From c9f5c59ba8a93cefaf6daf0cd994a6e9365fba4e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=A2=81=E5=B0=8F=E6=B1=9F?= <461355754@qq.com> Date: Sat, 7 Jun 2025 09:00:24 +0800 Subject: [PATCH] =?UTF-8?q?=E8=AF=AD=E5=9C=88=E5=9F=BA=E6=9C=AC=E5=AE=8C?= =?UTF-8?q?=E6=88=90=202=E3=80=81=E4=B8=AA=E4=BA=BA=E4=B8=BB=E9=A1=B5?= =?UTF-8?q?=E5=AE=8C=E6=88=90?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle | 22 +- app/proguard-rules.pro | 2 +- app/src/main/AndroidManifest.xml | 1 + .../main/java/com/qxcm/qxlive/AppContext.java | 3 + .../com/qxcm/qxlive/LaunchPageActivity.java | 26 +- build.gradle | 28 +- gradle.properties | 11 + gradle/libs.versions.toml | 8 + moduleLogin/build.gradle | 4 +- .../activity/ForgetPasswordActivity.java | 92 ++- .../activity/ImproveInfoActivity.java | 44 +- .../modulelogin/activity/LoginActivity.java | 7 +- .../activity/PasswordLoginActivity.java | 7 +- .../activity/SwitchAccountsActivity.java | 5 + .../modulelogin/present/LoginContacter.java | 3 + .../modulelogin/present/LoginPresenter.java | 17 +- moduleUtil/build.gradle | 22 +- moduleUtil/src/main/AndroidManifest.xml | 10 +- .../activity/BaseAppCompatActivity.java | 21 + .../moduleutil/activity/BaseMvpActivity.java | 32 +- .../moduleutil/activity/WebViewActivity.java | 85 +++ .../activity/WebViewBridgeConfig.java | 403 ++++++++++++ .../moduleutil/adapter/CirleListAdapter.java | 167 +++-- .../moduleutil/adapter/CommentAdapter.java | 171 ++++- .../moduleutil/adapter/LikeListAdapter.java | 24 + .../moduleutil/adapter/LikeUserAdapter.java | 18 + .../adapter/MyFragmentPagerAdapter.java | 4 +- .../qxcm/moduleutil/adapter/ReplyAdapter.java | 65 +- .../moduleutil/base/CommonAppContext.java | 36 +- .../com/qxcm/moduleutil/bean/AlbumBean.java | 21 +- .../qxcm/moduleutil/bean/CircleListBean.java | 26 +- .../com/qxcm/moduleutil/bean/CommentBean.java | 20 +- .../com/qxcm/moduleutil/bean/HeatedBean.java | 38 +- .../com/qxcm/moduleutil/bean/UserBean.java | 4 +- .../com/qxcm/moduleutil/bean/UserInfo.java | 53 ++ .../com/qxcm/moduleutil/bean/UserTagBean.java | 14 + .../dialog/ReplyDialogFragment.java | 96 +++ .../com/qxcm/moduleutil/http/ApiServer.java | 301 +++------ .../qxcm/moduleutil/http/BaseObserver.java | 10 +- .../qxcm/moduleutil/http/RetrofitClient.java | 430 +++++++++---- .../moduleutil/presenter/CommentContacts.java | 11 +- .../presenter/CommentPresenter.java | 29 +- .../moduleutil/utils/ARouteConstants.java | 16 + .../qxcm/moduleutil/utils/SPConstants.java | 4 +- .../com/qxcm/moduleutil/utils/SpUtil.java | 54 +- .../moduleutil/utils/wx/WeChatShareUtils.java | 195 ++++++ .../com/qxcm/moduleutil/widget/Constants.java | 24 + .../widget/dialog/CommentDialogFragment.java | 61 +- .../moduleutil/widget/dialog/ShareDialog.java | 115 +++- .../src/main/res/anim/slide_in_bottom.xml | 7 + .../src/main/res/anim/slide_out_bottom.xml | 7 + .../src/main/res/drawable/bg_bottom_sheet.xml | 6 + .../res/drawable/bg_bottom_sheet_item.xml | 9 + .../src/main/res/drawable/bg_r12_f9f9f9.xml | 5 + .../src/main/res/drawable/bg_r48_bbffeb.xml | 5 + .../src/main/res/drawable/bg_r53_33333.xml | 10 + .../src/main/res/drawable/bg_r53_f3f3f3.xml | 10 + .../res/drawable/selector_custom_checkbox.xml | 8 + .../src/main/res/layout/activity_web_view.xml | 29 + .../res/layout/bottom_sheet_recyclerview.xml | 56 ++ .../layout/dialog_bottom_sheet_actions.xml | 8 + .../main/res/layout/dialog_input_password.xml | 82 +++ .../src/main/res/layout/dialog_reply.xml | 37 ++ .../res/layout/fragment_comment_dialog.xml | 50 +- .../main/res/layout/index_image_banner.xml | 7 + .../src/main/res/layout/item_cirle_list.xml | 586 +++++++++--------- .../src/main/res/layout/item_comment.xml | 75 ++- .../src/main/res/layout/item_like_list.xml | 45 ++ .../src/main/res/layout/item_like_user.xml | 18 + moduleUtil/src/main/res/layout/item_reply.xml | 41 ++ moduleUtil/src/main/res/layout/me_xbanner.xml | 4 +- .../src/main/res/layout/room_dialog_share.xml | 156 ++++- .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 +- .../mipmap-anydpi-v26/ic_launcher_round.xml | 5 +- .../src/main/res/mipmap-hdpi/ic_launcher.webp | Bin 1404 -> 4302 bytes .../mipmap-hdpi/ic_launcher_foreground.webp | Bin 0 -> 10372 bytes .../res/mipmap-hdpi/ic_launcher_round.webp | Bin 2898 -> 6004 bytes moduleUtil/src/main/res/mipmap-mdpi/delte.png | Bin 0 -> 2352 bytes moduleUtil/src/main/res/mipmap-mdpi/gb.png | Bin 0 -> 848 bytes .../src/main/res/mipmap-mdpi/ic_launcher.webp | Bin 982 -> 2458 bytes .../mipmap-mdpi/ic_launcher_foreground.webp | Bin 0 -> 5622 bytes .../res/mipmap-mdpi/ic_launcher_round.webp | Bin 1772 -> 3512 bytes .../main/res/mipmap-xhdpi/ic_launcher.webp | Bin 1900 -> 6638 bytes .../mipmap-xhdpi/ic_launcher_foreground.webp | Bin 0 -> 16620 bytes .../res/mipmap-xhdpi/ic_launcher_round.webp | Bin 3918 -> 9340 bytes .../main/res/mipmap-xxhdpi/ic_launcher.webp | Bin 2884 -> 12208 bytes .../mipmap-xxhdpi/ic_launcher_foreground.webp | Bin 0 -> 30856 bytes .../res/mipmap-xxhdpi/ic_launcher_round.webp | Bin 5914 -> 16888 bytes moduleUtil/src/main/res/mipmap-xxxhdpi/bj.png | Bin 0 -> 897 bytes .../src/main/res/mipmap-xxxhdpi/cr_album.png | Bin 0 -> 4523 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.webp | Bin 3844 -> 19304 bytes .../ic_launcher_foreground.webp | Bin 0 -> 47886 bytes .../res/mipmap-xxxhdpi/ic_launcher_round.webp | Bin 7778 -> 25876 bytes .../src/main/res/mipmap-xxxhdpi/im_delete.png | Bin 0 -> 1447 bytes .../src/main/res/mipmap-xxxhdpi/im_share.png | Bin 0 -> 1523 bytes .../main/res/mipmap-xxxhdpi/im_transfer.png | Bin 0 -> 1099 bytes .../src/main/res/mipmap-xxxhdpi/jub.png | Bin 0 -> 4687 bytes .../src/main/res/mipmap-xxxhdpi/lianj.png | Bin 0 -> 4965 bytes .../src/main/res/mipmap-xxxhdpi/lock.png | Bin 0 -> 1516 bytes moduleUtil/src/main/res/mipmap-xxxhdpi/qq.png | Bin 0 -> 4889 bytes .../src/main/res/mipmap-xxxhdpi/shanc.png | Bin 0 -> 4472 bytes .../src/main/res/mipmap-xxxhdpi/shousz.png | Bin 0 -> 844 bytes .../src/main/res/mipmap-xxxhdpi/showszc.png | Bin 0 -> 854 bytes .../res/mipmap-xxxhdpi/sign_icon_wechat_q.png | Bin 0 -> 23305 bytes moduleUtil/src/main/res/mipmap-xxxhdpi/wx.png | Bin 0 -> 18636 bytes moduleUtil/src/main/res/values/colors.xml | 3 +- moduleUtil/src/main/res/values/strings.xml | 2 +- moduleUtil/src/main/res/values/styles.xml | 29 +- modulecircle/build.gradle | 18 +- modulecircle/src/main/AndroidManifest.xml | 9 + .../activity/DynamicDetailActivity.java | 427 +++++++++++++ .../activity/DynamicListActivity.java | 165 +++++ .../activity/ReleaseActivity.java | 2 +- .../adapter/ExpandColumnAdapter.java | 64 +- .../modulecircle/contacts/CircleContacts.java | 15 + .../dialog/MultiSelectAdapter.java | 39 +- .../fragment/CircleCategoryFragment.java | 92 ++- .../modulecircle/fragment/CircleFragment.java | 16 + .../fragment/ExpandColumnFragment.java | 50 ++ .../presenter/CirclePresenter.java | 93 +++ .../res/drawable/selector_custom_checkbox.xml | 8 + .../res/layout/activity_dynamic_detail.xml | 127 ++++ .../main/res/layout/activity_dynamic_list.xml | 113 ++++ .../res/layout/bottom_sheet_recyclerview.xml | 56 +- .../main/res/layout/item_expand_column.xml | 20 +- .../src/main/res/layout/item_multi_select.xml | 20 +- modulemain/build.gradle | 11 + modulevocal/build.gradle | 25 +- modulevocal/src/main/AndroidManifest.xml | 15 +- .../activity/AlbumDetailActivity.java | 392 ++++++++++++ .../activity/BriefIntroductionActivity.java | 66 +- .../activity/ChangPassActivity.java | 2 +- .../activity/ChangeNicknameActivity.java | 27 +- .../activity/CreateAlbumActivity.java | 104 +++- .../activity/EditUserInfoActivity.java | 196 ++++-- .../activity/NotificationActivity.java | 2 + .../modulevocal/activity/SettingActivity.java | 92 ++- .../activity/UserHomepageActivity.java | 386 ++---------- .../adapter/AlbumPhotoAdapter.java | 138 +++++ .../adapter/SingleChoiceAdapter.java | 80 +++ .../adapter/UserPhotoWallAdapter.java | 43 +- .../conacts/AlbumDetailConacts.java | 43 ++ .../conacts/BriefIntroductionConacts.java | 7 + .../conacts/ChangeNicknameConacts.java | 3 +- .../modulevocal/conacts/EditUserConactos.java | 21 +- .../modulevocal/conacts/MeConacts.java | 3 +- .../modulevocal/conacts/MyAlbumConacts.java | 12 +- .../modulevocal/conacts/SettingConacts.java | 19 + .../conacts/UserHomepageConacts.java | 13 +- .../fragment/CirleListFragment.java | 122 +++- .../modulevocal/fragment/MyAlbumFragment.java | 96 ++- .../fragment/UserHomepageFragment.java | 147 ++++- .../fragment/VocalRangeFragment.java | 56 +- .../presenter/AlbumDetailPresenter.java | 144 +++++ .../presenter/BriefIntroductionPresenter.java | 38 +- .../presenter/ChangeNicknamePresenter.java | 18 + .../presenter/ChangePasswordPresenter.java | 47 +- .../presenter/EditUserPresenter.java | 63 +- .../modulevocal/presenter/MePresenter.java | 45 +- .../presenter/MyAlbumPresenter.java | 99 +-- .../presenter/SettingPresenter.java | 46 ++ .../presenter/UserHomepagePresenter.java | 134 ++-- .../main/res/layout/activity_album_detail.xml | 270 ++++++++ .../main/res/layout/activity_create_album.xml | 114 +++- .../main/res/layout/activity_edit_user.xml | 11 + .../src/main/res/layout/activity_setting1.xml | 10 + .../res/layout/activity_user_homepage.xml | 68 +- .../main/res/layout/fragment_cirle_list.xml | 17 +- .../main/res/layout/fragment_vocal_range.xml | 79 ++- .../src/main/res/layout/item_group.xml | 15 + .../main/res/layout/item_multi_select_t.xml | 52 ++ .../src/main/res/layout/item_photo.xml | 43 ++ modulevocal/src/main/res/layout/item_tag.xml | 27 + modulevocal/src/main/res/layout/user_top.xml | 43 +- modulevoice/build.gradle | 10 + settings.gradle | 16 +- .../tuichat/classicui/ClassicUIService$1.dex | Bin 2128 -> 0 bytes .../inputedittext/TIMMentionEditText.dex | Bin 7364 -> 0 bytes .../minimalistui/widget/ChatView$23$2.dex | Bin 1588 -> 0 bytes .../tuichat/presenter/ChatPresenter$35.dex | Bin 2960 -> 0 bytes .../component/face/EmojiViewHolder$3.dex | Bin 1432 -> 0 bytes .../minimalistui/widget/input/InputView$8.dex | Bin 1280 -> 0 bytes .../widget/message/MessageRecyclerView$1.dex | Bin 1576 -> 0 bytes .../tuichat/presenter/ChatPresenter$34.dex | Bin 2272 -> 0 bytes .../bean/ConversationGroupBean.dex | Bin 3332 -> 0 bytes .../TUIConstants$TUICalling$ObjectFactory.dex | Bin 1236 -> 0 bytes 186 files changed, 7140 insertions(+), 1889 deletions(-) create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/activity/WebViewActivity.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/activity/WebViewBridgeConfig.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeListAdapter.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeUserAdapter.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserInfo.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserTagBean.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/dialog/ReplyDialogFragment.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/utils/ARouteConstants.java create mode 100644 moduleUtil/src/main/java/com/qxcm/moduleutil/utils/wx/WeChatShareUtils.java create mode 100644 moduleUtil/src/main/res/anim/slide_in_bottom.xml create mode 100644 moduleUtil/src/main/res/anim/slide_out_bottom.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_bottom_sheet.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_bottom_sheet_item.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_r12_f9f9f9.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_r48_bbffeb.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_r53_33333.xml create mode 100644 moduleUtil/src/main/res/drawable/bg_r53_f3f3f3.xml create mode 100644 moduleUtil/src/main/res/drawable/selector_custom_checkbox.xml create mode 100644 moduleUtil/src/main/res/layout/activity_web_view.xml create mode 100644 moduleUtil/src/main/res/layout/bottom_sheet_recyclerview.xml create mode 100644 moduleUtil/src/main/res/layout/dialog_bottom_sheet_actions.xml create mode 100644 moduleUtil/src/main/res/layout/dialog_input_password.xml create mode 100644 moduleUtil/src/main/res/layout/dialog_reply.xml create mode 100644 moduleUtil/src/main/res/layout/index_image_banner.xml create mode 100644 moduleUtil/src/main/res/layout/item_like_list.xml create mode 100644 moduleUtil/src/main/res/layout/item_like_user.xml create mode 100644 moduleUtil/src/main/res/mipmap-hdpi/ic_launcher_foreground.webp create mode 100644 moduleUtil/src/main/res/mipmap-mdpi/delte.png create mode 100644 moduleUtil/src/main/res/mipmap-mdpi/gb.png create mode 100644 moduleUtil/src/main/res/mipmap-mdpi/ic_launcher_foreground.webp create mode 100644 moduleUtil/src/main/res/mipmap-xhdpi/ic_launcher_foreground.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/bj.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/cr_album.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.webp create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/im_delete.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/im_share.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/im_transfer.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/jub.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/lianj.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/lock.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/qq.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/shanc.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/shousz.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/showszc.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/sign_icon_wechat_q.png create mode 100644 moduleUtil/src/main/res/mipmap-xxxhdpi/wx.png create mode 100644 modulecircle/src/main/java/com/example/modulecircle/activity/DynamicDetailActivity.java create mode 100644 modulecircle/src/main/java/com/example/modulecircle/activity/DynamicListActivity.java create mode 100644 modulecircle/src/main/res/drawable/selector_custom_checkbox.xml create mode 100644 modulecircle/src/main/res/layout/activity_dynamic_detail.xml create mode 100644 modulecircle/src/main/res/layout/activity_dynamic_list.xml create mode 100644 modulevocal/src/main/java/com/example/modulevocal/activity/AlbumDetailActivity.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/adapter/AlbumPhotoAdapter.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/adapter/SingleChoiceAdapter.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/conacts/AlbumDetailConacts.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/conacts/SettingConacts.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/presenter/AlbumDetailPresenter.java create mode 100644 modulevocal/src/main/java/com/example/modulevocal/presenter/SettingPresenter.java create mode 100644 modulevocal/src/main/res/layout/activity_album_detail.xml create mode 100644 modulevocal/src/main/res/layout/activity_setting1.xml create mode 100644 modulevocal/src/main/res/layout/item_group.xml create mode 100644 modulevocal/src/main/res/layout/item_multi_select_t.xml create mode 100644 modulevocal/src/main/res/layout/item_photo.xml create mode 100644 modulevocal/src/main/res/layout/item_tag.xml delete mode 100644 tuichat/build/.transforms/7a306fc474fc2367c382f12a89ccc0b2/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/classicui/ClassicUIService$1.dex delete mode 100644 tuichat/build/.transforms/7a306fc474fc2367c382f12a89ccc0b2/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/component/inputedittext/TIMMentionEditText.dex delete mode 100644 tuichat/build/.transforms/7a306fc474fc2367c382f12a89ccc0b2/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/minimalistui/widget/ChatView$23$2.dex delete mode 100644 tuichat/build/.transforms/7a306fc474fc2367c382f12a89ccc0b2/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/presenter/ChatPresenter$35.dex delete mode 100644 tuichat/build/.transforms/a7a2c0f6dc4a363398dfce28ecc9af15/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/component/face/EmojiViewHolder$3.dex delete mode 100644 tuichat/build/.transforms/a7a2c0f6dc4a363398dfce28ecc9af15/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/minimalistui/widget/input/InputView$8.dex delete mode 100644 tuichat/build/.transforms/a7a2c0f6dc4a363398dfce28ecc9af15/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/minimalistui/widget/message/MessageRecyclerView$1.dex delete mode 100644 tuichat/build/.transforms/a7a2c0f6dc4a363398dfce28ecc9af15/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuichat/presenter/ChatPresenter$34.dex delete mode 100644 tuiconversation/build/.transforms/b3c8bea6378b2a283018c31dfa649d94/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuikit/tuiconversation/bean/ConversationGroupBean.dex delete mode 100644 tuicore/build/.transforms/07b559618bef435fe04941a478c62401/transformed/bundleLibRuntimeToDirDebug/bundleLibRuntimeToDirDebug_dex/com/tencent/qcloud/tuicore/TUIConstants$TUICalling$ObjectFactory.dex diff --git a/app/build.gradle b/app/build.gradle index b1583828..6d105899 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -21,6 +21,14 @@ android { abiFilters 'armeabi-v7a', 'arm64-v8a' } + javaCompileOptions { + annotationProcessorOptions { + arguments = [ + AROUTER_MODULE_NAME: project.getName() + ] + } + } + } signingConfigs { @@ -112,18 +120,26 @@ dependencies { implementation libs.material implementation libs.activity implementation libs.constraintlayout - implementation project(':modulemain') + testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core - api project(":moduleUtil") - api project(":moduleLogin") implementation files('libs/auth_number_product-2.14.7-log-online-standard-cuum-release.aar') implementation files('libs/logger-2.2.2-release.aar') implementation files('libs/main-2.2.3-release.aar') + implementation (libs.arouter.api.v150) + //annotationProcessor + annotationProcessor libs.arouter.compiler + implementation project(':modulevocal') // 必须 + annotationProcessor project(':modulevocal') // 关键! + + api project(":moduleUtil") + api project(":moduleLogin") + implementation project(':modulemain') + //aar的名称,例如:WbCloudFaceLiveSdk-v6.0.0-1234567.aar,填入'WbCloudFaceLiveSdk-v6.0.0-1234567' // implementation(name: 'WbCloudFaceLiveSdk-face-v6.6.2-8e4718fc', ext: 'aar') ////2. 云normal SDK, diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro index ac49b06f..966a324c 100644 --- a/app/proguard-rules.pro +++ b/app/proguard-rules.pro @@ -875,4 +875,4 @@ public static java.lang.String TABLENAME; } -dontwarn com.tencent.cloud.huiyansdkface.okhttp3.OkHttpClient$Builder -####################### normal混淆规则-END############################# \ No newline at end of file +####################### normal混淆规则-END############################# diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 351db878..96899817 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -93,6 +93,7 @@ + " + context.getFacebookHashKey()); diff --git a/app/src/main/java/com/qxcm/qxlive/LaunchPageActivity.java b/app/src/main/java/com/qxcm/qxlive/LaunchPageActivity.java index 35db9489..ea12e983 100644 --- a/app/src/main/java/com/qxcm/qxlive/LaunchPageActivity.java +++ b/app/src/main/java/com/qxcm/qxlive/LaunchPageActivity.java @@ -95,7 +95,7 @@ public class LaunchPageActivity extends BaseMvpActivity implements LoginContacter.View, View.OnClickListener { - + private CountDownTimer mTimer; @Override protected void initData() { - + mBinding.tvSendCode.setOnClickListener(this::onClick); + mBinding.btnSubmit.setOnClickListener(this::onClick); } @Override @@ -33,13 +42,78 @@ public class ForgetPasswordActivity extends BaseMvpActivity implement @Override public void sendCode(String phoneNumber, int type) { - api.sendCode(phoneNumber,"default", new BaseObserver() { + api.sendCode(phoneNumber,type+"", new BaseObserver() { @Override public void onSubscribe(Disposable d) { @@ -134,6 +134,21 @@ public class LoginPresenter extends BasePresenter implement }); } + @Override + public void forgotPassword(String new_password, String mobile, String sms_code) { + api.forgotPassword(new_password, mobile, sms_code, new BaseObserver() { + @Override + public void onSubscribe(Disposable d) { + addDisposable(d); + } + + @Override + public void onNext(String s) { + MvpRef.get().ysxlSuccess(s); + } + }); + } + @Override public void detachView() { diff --git a/moduleUtil/build.gradle b/moduleUtil/build.gradle index 2a26e758..6cd668da 100644 --- a/moduleUtil/build.gradle +++ b/moduleUtil/build.gradle @@ -15,6 +15,14 @@ android { testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" consumerProguardFiles "consumer-rules.pro" + + javaCompileOptions { + annotationProcessorOptions { + arguments = [ + AROUTER_MODULE_NAME: project.getName() + ] + } + } } buildTypes { @@ -42,6 +50,8 @@ dependencies { implementation libs.material implementation libs.core.ktx implementation project(':moduletablayout') + implementation libs.activity + implementation libs.constraintlayout testImplementation libs.junit androidTestImplementation libs.ext.junit androidTestImplementation libs.espresso.core @@ -113,6 +123,10 @@ dependencies { //支付宝 api(libs.alipay.alipaysdk.android) + api(libs.arouter.api.v150) + annotationProcessor libs.arouter.annotation + annotationProcessor libs.arouter.compiler + api(libs.easypermissions) api(libs.xbanner) @@ -123,6 +137,10 @@ dependencies { //定位 api('com.google.android.gms:play-services-location:21.0.1') + //SwitchButton + api(libs.zcw.togglebutton.library) + //图片模糊 + api(libs.com.github.mmin18.realtimeblurview) //腾讯im // api project(':tuiconversation') @@ -133,4 +151,6 @@ dependencies { api files('libs/WbCloudNormal-v5.1.10-4e3e198.aar') //2. 云normal SDK, //aar的名称,例如:WbCloudNormal-v5.1.10-123456789.aar,填入 'WbCloudNormal-v5.1.10-123456789.aar' -} \ No newline at end of file +} + +apply plugin: 'com.alibaba.arouter' // ⚠️ 添加这一行 \ No newline at end of file diff --git a/moduleUtil/src/main/AndroidManifest.xml b/moduleUtil/src/main/AndroidManifest.xml index 68056176..56e6c606 100644 --- a/moduleUtil/src/main/AndroidManifest.xml +++ b/moduleUtil/src/main/AndroidManifest.xml @@ -3,10 +3,14 @@ - + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseAppCompatActivity.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseAppCompatActivity.java index b001d333..ce62d822 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseAppCompatActivity.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseAppCompatActivity.java @@ -17,10 +17,16 @@ import androidx.appcompat.app.AppCompatActivity; import androidx.databinding.DataBindingUtil; import androidx.databinding.ViewDataBinding; +import com.alibaba.android.arouter.launcher.ARouter; import com.blankj.utilcode.util.BarUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.utils.LanguageUtil; +import org.greenrobot.eventbus.EventBus; +import org.greenrobot.eventbus.Subscribe; + +import java.lang.reflect.Method; + public abstract class BaseAppCompatActivity extends AppCompatActivity { @Override protected void attachBaseContext(Context newBase) { @@ -37,6 +43,8 @@ public abstract class BaseAppCompatActivity extends setContentView(getLayoutId()); mBinding = DataBindingUtil.setContentView(this, getLayoutId()); mBinding.setLifecycleOwner(this); + + ARouter.getInstance().inject(this); BarUtils.setStatusBarLightMode(this, isLightMode()); BarUtils.transparentStatusBar(this); initView(); @@ -54,6 +62,19 @@ public abstract class BaseAppCompatActivity extends // 可在此处添加针对旧版本的处理逻辑(如果需要) } + // 动态判断是否包含 @Subscribe 注解的方法 + boolean hasSubscribeMethods = false; + for (Method method : getClass().getDeclaredMethods()) { + if (method.isAnnotationPresent(Subscribe.class)) { + hasSubscribeMethods = true; + break; + } + } + + if (hasSubscribeMethods) { + EventBus.getDefault().register(this); + } + } @Override diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseMvpActivity.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseMvpActivity.java index 3c7e71bf..0cb12e00 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseMvpActivity.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/BaseMvpActivity.java @@ -21,7 +21,11 @@ import com.blankj.utilcode.util.LogUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.base.CommonAppContext; import com.qxcm.moduleutil.bean.UserBean; +import com.qxcm.moduleutil.bean.UserInfo; import com.qxcm.moduleutil.utils.LanguageUtil; +import com.tencent.imsdk.v2.V2TIMCallback; +import com.tencent.imsdk.v2.V2TIMManager; +import com.tencent.imsdk.v2.V2TIMUserFullInfo; import com.tencent.qcloud.tuicore.TUILogin; import com.tencent.qcloud.tuicore.interfaces.TUICallback; @@ -75,10 +79,10 @@ public abstract class BaseMvpActivity

{ + + public String title; + public String url; + @Override + protected void initData() { + WebSettings webSettings = mBinding.webView.getSettings(); + webSettings.setUseWideViewPort(true); + webSettings.setLoadWithOverviewMode(true); + webSettings.setJavaScriptEnabled(true); + //增加JSBridge + mBinding.webView.addJavascriptInterface(new WebAppInterface(this), "Android"); +// mBinding.webView.addJavascriptInterface(new WebViewBridgeConfig(title), WebViewBridgeConfig.NAME); + webSettings.setBuiltInZoomControls(false); + webSettings.setSupportZoom(false); + webSettings.setDomStorageEnabled(true); + webSettings.setBlockNetworkImage(false);//解决图片不显示 + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) { + webSettings.setMixedContentMode(WebSettings.MIXED_CONTENT_ALWAYS_ALLOW); + } + webSettings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN); + mBinding.webView.setHorizontalScrollBarEnabled(false);//水平不显示 + mBinding.webView.setVerticalScrollBarEnabled(false); //垂直不显示 + mBinding.webView.requestFocus(); + mBinding.webView.loadUrl(url); + + + } + @Override + protected void initView() { + title = getIntent().getStringExtra("title"); + url = getIntent().getStringExtra("url"); + mBinding.topBar.setTitle(title); + } + + @Override + protected int getLayoutId() { + return R.layout.activity_web_view; + } + public class WebAppInterface { + Context mContext; + + WebAppInterface(Context c) { + mContext = c; + } + + // 被 H5 调用的方法 + @JavascriptInterface + public void showToast(String toast) { + Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); + } + } +} \ No newline at end of file diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/WebViewBridgeConfig.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/WebViewBridgeConfig.java new file mode 100644 index 00000000..7373baa6 --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/activity/WebViewBridgeConfig.java @@ -0,0 +1,403 @@ +package com.qxcm.moduleutil.activity; + +import android.content.Intent; +import android.net.Uri; +import android.text.TextUtils; +import android.util.Log; +import android.webkit.JavascriptInterface; + +import com.alibaba.android.arouter.launcher.ARouter; +import com.blankj.utilcode.util.ActivityUtils; +import com.blankj.utilcode.util.ThreadUtils; +import com.qxcm.moduleutil.utils.logger.Logger; + +import org.json.JSONObject; + +import io.reactivex.disposables.Disposable; + +/** + * 项目名称 qipao-android + * 包名:com.yutang.xqipao.ui.h5 + * 创建人 王欧 + * 创建时间 2020/6/16 1:26 PM + * 描述 describe + */ +public class WebViewBridgeConfig { + public static final String NAME = "bridge"; + public static final String TYPE_QQ_SERVICE = "qqService"; + public static final String TYPE_FEEDBACK = "feedback"; + public static final String TYPE_USER_ZONE = "userZone"; + public static final String TYPE_RECHARGE = "recharge"; + public static final String TYPE_BACK = "onBackPressed"; + + public static final String TYPE_GAME_RANK = "gameRank";//游戏排行榜 + public static final String TYPE_GAME_SOUND = "gameSound";//游戏声音 + public static final String TYPE_GAME_END = "gameEnd";//游戏结束 + public static final String TYPE_GAME_PAUSE = "gamePause";//游戏暂停 + public static final String TYPE_GAME_BEGIN = "gameBegin";//游戏开始 + public static final String TYPE_GAME_NEXT = "gameNext";//游戏下一关 + + private static int gameCount = 0;//游戏次数 + private String NextGame = "";//上次游戏名称 + private String title = "";//标题 + public static final String GAME_EL = "俄罗斯方块";//俄罗斯方块 + public static final String GAME_XM = "消灭星星";//消灭星星 + public static final String GAME_SB = "神步伐";//神步伐 + public static final String GAME_XT = "线条冲刺";//线条冲刺 + public static final String GAME_FK = "疯狂赛车";//疯狂赛车 + + public WebViewBridgeConfig(String title) { + this.title = title; + } + @JavascriptInterface + public void postMessage(String json) { + Logger.e(json); + try { + JSONObject jsonObject = new JSONObject(json); + String type = jsonObject.getString("type"); + JSONObject object = jsonObject.getJSONObject("data"); + switch (type) { + case TYPE_QQ_SERVICE: + serviceUser(); + break; + case TYPE_FEEDBACK: +// ActivityUtils.startActivity(FeedBackActivity.class); + break; + case TYPE_USER_ZONE: +// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", object.getString("userId")).navigation(); + break; + case TYPE_RECHARGE: +// ARouter.getInstance().build(ARouters.ME_BALANCE).navigation(); + break; + case TYPE_BACK: + try { + ActivityUtils.getTopActivity().onBackPressed(); + } catch (Exception e) { + e.printStackTrace(); + } + break; + } + } catch (Exception e) { + e.printStackTrace(); + } + } + + //跳转QQ客服 + private void serviceUser() { +// RemoteDataSource.getInstance().serviceUser(new BaseObserver() { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(String uin) { +// try { +// String qqUrl = "mqqwpa://im/chat?chat_type=wpa&uin=" + uin + "&version=1"; +// ActivityUtils.startActivity(new Intent(Intent.ACTION_VIEW, Uri.parse(qqUrl))); +// } catch (Exception e) { +// ToastUtils.showShort("请先安装QQ"); +// } +// } +// +// @Override +// public void onComplete() { +// +// } +// }); + } + + + /** + * H5小游戏语音互动调用 + * + * @param json + */ + @JavascriptInterface + public void common(String json) { +// ThreadUtils.runOnUiThread(new Runnable() { +// @Override +// public void run() { +// Logger.e(json); +// try { +// JSONObject jsonObject = new JSONObject(json); +// String type = jsonObject.getString("type"); +// JSONObject object = jsonObject.getJSONObject("params"); +// switch (type) { +// case JOIN_LIVE_ROOM: +// quitLiveRoom(); +// RtcManager.getInstance().setGame(true); +// RtcManager.getInstance().leaveChannel(); +// //游戏时关闭房间 +// ActivityUtils.finishActivity(RoomActivity.class); +// BaseApplication.getInstance().isPlaying = false; +// BaseApplication.getInstance().isShow = false; +// UserBean userBean = BaseApplication.getInstance().getUser(); +// RtcManager.getInstance().loginRoomGame(object.getString("roomId"), userBean.getUser_id(), userBean.getNickname(), ""); +// break; +// case LEAVE_LIVE_ROOM: +// RtcManager.getInstance().leaveChannel(object.getString("roomId")); +// RtcManager.getInstance().setAudioUrl(null); +// break; +// case ROOM_START_PUBLISH_STREAM: +// RtcManager.getInstance().applyWheat(String.format("%s_%s", object.getString("roomId"), object.getString("userId"))); +// break; +// case ROOM_STOP_PUBLISH_STREAM: +// RtcManager.getInstance().downWheat(); +// break; +// case ROOM_MUTE_LOCAL: +// RtcManager.getInstance().muteLocalAudioStream(object.getBoolean("mute")); +// break; +// case ROOM_MUTE_MICROPHONE: +// RtcManager.getInstance().muteSpeaker(object.getBoolean("mute")); +// break; +// case ROOM_SHOW_MESSAGE_DIALOG: +// DialogUtils.showDialogFragment(ARouter.getInstance().build(ARouteConstants.ROOM_MSG_DIALOG).navigation()); +// break; +// case ON_CLOSE_BTN_CLICK: +// RtcManager.getInstance().leaveChannel(); +// ActivityUtils.finishActivity(H5Activity.class); +// break; +// case TYPE_QQ_SERVICE: +// serviceUser(); +// break; +// case TYPE_FEEDBACK: +// ActivityUtils.startActivity(FeedBackActivity.class); +// break; +// case TYPE_USER_ZONE: +// ARouter.getInstance().build(ARouteConstants.NEW_HOME_PAGE).withString("userId", object.getString("userId")).navigation(); +// break; +// case TYPE_RECHARGE: +// ARouter.getInstance().build(ARouters.ME_BALANCE).navigation(); +// break; +// case TYPE_BACK: +// try { +// ActivityUtils.getTopActivity().onBackPressed(); +// } catch (Exception e) { +// e.printStackTrace(); +// } +// break; +// //游戏排行榜 +// case TYPE_GAME_RANK: +// switch (title) { +// case GAME_EL: +// AppLogUtil.reportAppLog(AppLogEvent.A050303); +// break; +// case GAME_SB: +// AppLogUtil.reportAppLog(AppLogEvent.A050403); +// break; +// case GAME_XM: +// AppLogUtil.reportAppLog(AppLogEvent.A050503); +// break; +// case GAME_XT: +// AppLogUtil.reportAppLog(AppLogEvent.A050603); +// break; +// case GAME_FK: +// AppLogUtil.reportAppLog(AppLogEvent.A050703); +// break; +// } +// break; +// //游戏开始 +// case TYPE_GAME_BEGIN: +// switch (title) { +// case GAME_EL: +// if (!TextUtils.isEmpty(NextGame) && GAME_EL.equals(NextGame)) { +// gameCount++; +// } +// break; +// case GAME_SB: +// if (!TextUtils.isEmpty(NextGame) && GAME_SB.equals(NextGame)) { +// gameCount++; +// } +// break; +// case GAME_XM: +// if (!TextUtils.isEmpty(NextGame) && GAME_XM.equals(NextGame)) { +// gameCount++; +// } +// break; +// case GAME_XT: +// if (!TextUtils.isEmpty(NextGame) && GAME_XT.equals(NextGame)) { +// gameCount++; +// } +// break; +// case GAME_FK: +// if (!TextUtils.isEmpty(NextGame) && GAME_FK.equals(NextGame)) { +// gameCount++; +// } +// break; +// } +// if (gameCount == 0) { +// gameCount = 1; +// } +// break; +// //游戏结束 +// case TYPE_GAME_END: +// switch (title) { +// case GAME_EL: +// AppLogUtil.reportAppLog(AppLogEvent.A050301, "game_count", String.valueOf(gameCount)); +// break; +// case GAME_SB: +// AppLogUtil.reportAppLog(AppLogEvent.A050401, "game_count", String.valueOf(gameCount)); +// break; +// case GAME_XM: +// AppLogUtil.reportAppLog(AppLogEvent.A050501, "game_count", String.valueOf(gameCount)); +// break; +// case GAME_XT: +// AppLogUtil.reportAppLog(AppLogEvent.A050601, "game_count", String.valueOf(gameCount)); +// break; +// case GAME_FK: +// AppLogUtil.reportAppLog(AppLogEvent.A050701, "game_count", String.valueOf(gameCount)); +// break; +// } +// break; +// //游戏下一关 +// case TYPE_GAME_NEXT: +// switch (title) { +// case GAME_XM: +// AppLogUtil.reportAppLog(AppLogEvent.A050504); +// break; +// case GAME_XT: +// AppLogUtil.reportAppLog(AppLogEvent.A050604); +// break; +// } +// break; +// //游戏暂停 +// case TYPE_GAME_PAUSE: +// break; +// //游戏声音 +// case TYPE_GAME_SOUND: +// switch (title) { +// case GAME_EL: +// if (!object.getBoolean("sound")) { +// AppLogUtil.reportAppLog(AppLogEvent.A050302); +// } +// break; +// case GAME_SB: +// if (!object.getBoolean("sound")) { +// AppLogUtil.reportAppLog(AppLogEvent.A050402); +// } +// break; +// case GAME_XM: +// if (!object.getBoolean("sound")) { +// AppLogUtil.reportAppLog(AppLogEvent.A050502); +// } +// break; +// case GAME_XT: +// if (!object.getBoolean("sound")) { +// AppLogUtil.reportAppLog(AppLogEvent.A050602); +// } +// break; +// case GAME_FK: +// if (!object.getBoolean("sound")) { +// AppLogUtil.reportAppLog(AppLogEvent.A050702); +// } +// break; +// } +// break; +// } +// } catch (Exception e) { +// e.printStackTrace(); +// } +// } +// }); + } + + private void quitLiveRoom() { +// if (!TextUtils.isEmpty(BaseApplication.getInstance().playId)) { +// NewApi.getInstance().quit(BaseApplication.getInstance().playId, new com.qpyy.libcommon.api.BaseObserver(false, false) { +// @Override +// public void onSubscribe(Disposable d) { +// +// } +// +// @Override +// public void onNext(String s) { +// +// } +// +// @Override +// public void onComplete() { +// +// } +// }); +// } + + } + +// 调用示例: +// window.bridge.common('{"type":"joinStreamLiveRoom","params":{"roomId":"12445435","userId":"12323 ","mute":false}}'); +// 调用顺序: +// 1、加入直播间 joinStreamLiveRoom +// 2、开始推流 startPublishingStreamLiveRoom +// 3、打开麦克风 muteMicrophoneLiveRoom + + /* + 加入直播间 joinStreamLiveRoom + params : + { + "roomId":"房间id", + } + */ + public static final String JOIN_LIVE_ROOM = "joinStreamLiveRoom"; + + /* + 离开流房间 推拉流 leaveStreamLiveRoom + params : + { + "roomId":"房间id", + } + */ + public static final String LEAVE_LIVE_ROOM = "leaveStreamLiveRoom"; + + /* + 开始推流 startPublishingStreamLiveRoom + params : + { + "roomId":"房间id", + "userId":"用户ID" + } + */ + public static final String ROOM_START_PUBLISH_STREAM = "startPublishingStreamLiveRoom"; + + /* + 停止推流 stopPublishingStreamLiveRoom + params : + { + "roomId":"房间id", + "userId":"用户ID" + } + */ + public static final String ROOM_STOP_PUBLISH_STREAM = "stopPublishingStreamLiveRoom"; + + /* + 是否屏蔽远端所有声音 muteSpeakerLiveRoom + params : + { + mute:true // true为关闭,false为打开 + } + */ + public static final String ROOM_MUTE_LOCAL = "muteSpeakerLiveRoom"; + + /* + 是否静音(关闭)麦克风 muteMicrophoneLiveRoom + params : + { + mute:true // true为关闭,false为打开 + } + */ + public static final String ROOM_MUTE_MICROPHONE = "muteMicrophoneLiveRoom"; + + + /* + 点击消息按钮 onMessageBtnClick + params : + { + } + */ + public static final String ROOM_SHOW_MESSAGE_DIALOG = "onMessageBtnClick"; + + + //关闭按钮 + public static final String ON_CLOSE_BTN_CLICK = "onCloseBtnClick"; + +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CirleListAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CirleListAdapter.java index df01a716..beaa11f8 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CirleListAdapter.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CirleListAdapter.java @@ -1,18 +1,35 @@ package com.qxcm.moduleutil.adapter; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; +import static com.blankj.utilcode.util.ActivityUtils.startActivity; + +import android.content.Intent; +import android.text.SpannableStringBuilder; +import android.text.Spanned; +import android.text.TextPaint; import android.text.TextUtils; +import android.text.method.LinkMovementMethod; +import android.text.style.ClickableSpan; import android.view.View; import android.view.ViewTreeObserver; import android.widget.ImageView; import android.widget.TextView; +import androidx.core.content.ContextCompat; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; + +import com.alibaba.android.arouter.launcher.ARouter; import com.blankj.utilcode.util.TimeUtils; import com.chad.library.adapter.base.BaseQuickAdapter; import com.chad.library.adapter.base.BaseViewHolder; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.bean.CircleListBean; -import com.qxcm.moduleutil.generated.callback.OnClickListener; +import com.qxcm.moduleutil.bean.HeatedBean; import com.qxcm.moduleutil.utils.ImageUtils; +import com.qxcm.moduleutil.utils.MeHeadView; +import com.qxcm.moduleutil.utils.SpUtil; import com.qxcm.moduleutil.widget.MyGridView; import com.qxcm.moduleutil.widget.img.FullScreenUtil; @@ -23,15 +40,21 @@ public class CirleListAdapter extends BaseQuickAdapter{ + helper.getView(R.id.pinglun).setOnClickListener(v -> { if (mListener != null) mListener.onPinglunClick(item); }); + helper.getView(R.id.rela).setOnClickListener(v -> { + if (mListener != null) mListener.onRelaClick(item); + }); + // 为整个 item 设置点击事件 + helper.itemView.setOnClickListener(v -> { + if (mListener != null) { + mListener.onPinglunClick(item); // 复用 onHeadImageClick 作为跳转逻辑 + } + }); //昵称 helper.setText(R.id.dy_name_text, item.getNickname()); //头像 - ImageUtils.loadHeadCC(item.getAvatar(), (ImageView) helper.getView(R.id.dy_head_image)); - +// ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.dy_head_image)); + MeHeadView headView = helper.getView(R.id.dy_head_image); + headView.setData(item.getAvatar(), "", item.getSex() + ""); //动态内容以富文本展示 String content = item.getContent(); if (content == null || content.length() == 0) { - helper.getView(R.id.dy_lookmore_tv).setVisibility(View.GONE); - helper.getView(R.id.dy_content_tv).setVisibility(View.GONE); + helper.getView(R.id.dy_lookmore_tv).setVisibility(GONE); + helper.getView(R.id.dy_content_tv).setVisibility(GONE); } else { - helper.getView(R.id.dy_lookmore_tv).setVisibility(View.VISIBLE); - helper.getView(R.id.dy_content_tv).setVisibility(View.VISIBLE); + helper.getView(R.id.dy_lookmore_tv).setVisibility(VISIBLE); + helper.getView(R.id.dy_content_tv).setVisibility(VISIBLE); } helper.getView(R.id.dy_lookmore_tv).getViewTreeObserver().addOnPreDrawListener(new ViewTreeObserver.OnPreDrawListener() { @Override @@ -101,67 +135,97 @@ public class CirleListAdapter extends BaseQuickAdapter= 7) { - helper.getView(R.id.dy_lookmore_tv).setVisibility(View.VISIBLE); + helper.getView(R.id.dy_lookmore_tv).setVisibility(VISIBLE); helper.getView(R.id.dy_content_tv).getViewTreeObserver().removeOnPreDrawListener(this);//销毁 } else { - helper.getView(R.id.dy_lookmore_tv).setVisibility(View.GONE); + helper.getView(R.id.dy_lookmore_tv).setVisibility(GONE); helper.getView(R.id.dy_content_tv).getViewTreeObserver().removeOnPreDrawListener(this);//销毁 } return true; } }); - helper.setText(R.id.dy_content_tv, content); + if (TextUtils.isEmpty(content)) { TextView view = helper.getView(R.id.dy_content_tv); - view.setVisibility(View.GONE); + view.setVisibility(GONE); } else { TextView view = helper.getView(R.id.dy_content_tv); - view.setVisibility(View.VISIBLE); + view.setVisibility(VISIBLE); } +// 创建 SpannableString 来拼接 title 并设置点击事件 + SpannableStringBuilder spannableStringBuilder = new SpannableStringBuilder(); + spannableStringBuilder.append(content).append(" "); // 添加原始内容 if (item.getTitle() != null) { - helper.setVisible(R.id.dy_more_tv, true); - helper.setText(R.id.dy_more_tv, item.getTitle().replace("#", "")); - }else { - helper.setVisible(R.id.dy_more_tv, false); - } - //点赞 - helper.setText(R.id.dy_fabulous, item.getLike_num()); - if (item.getIs_like() == 1) { - TextView dy_fabulous = helper.getView(R.id.dy_fabulous); - helper.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan); - } else { - TextView dy_fabulous = helper.getView(R.id.dy_fabulous); - helper.setImageResource(R.id.dianzan_image, com.qxcm.moduleutil.R.mipmap.dongtai_hudong_dianzan); + + for (int i = 0; i < item.getTitle().size(); i++) { + HeatedBean heatedBean = item.getTitle().get(i); + String title = heatedBean != null ? heatedBean.getTitle() : ""; + + // 添加 title 到 SpannableString + spannableStringBuilder.append(title); + + + // 创建点击事件和颜色 + ClickableSpan clickableSpan = new ClickableSpan() { + @Override + public void onClick(View widget) { + // 处理点击事件,比如跳转 +// Intent intent = new Intent(mContext, TargetActivity.class); +// intent.putExtra("url", item.getUrl()); // 传递 URL 或其他参数 +// mContext.startActivity(intent); + } + + @Override + public void updateDrawState(TextPaint ds) { + super.updateDrawState(ds); + ds.setColor(ContextCompat.getColor(mContext, R.color.color_0DFFB9)); // 设置文字颜色 + ds.setUnderlineText(false); // 去掉下划线 + } + }; + + // 设置点击效果 + spannableStringBuilder.setSpan(clickableSpan, spannableStringBuilder.length() - title.length(), spannableStringBuilder.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); + } + TextView textView = helper.getView(R.id.dy_content_tv); + textView.setMovementMethod(LinkMovementMethod.getInstance()); // 允许点击 + textView.setHighlightColor(0); // 去掉点击时的背景色 + textView.setText(spannableStringBuilder); } - if (item.getIs_room()!=null && item.getIs_room().equals("0")){ - helper.setVisible(R.id.gensui,false); - }else { - helper.setVisible(R.id.gensui,true); + + if (item.getIs_like() == 1) { + helper.setImageResource(R.id.dianzan_image, R.mipmap.dongtai_hudong_yidianzan); + helper.setText(R.id.dy_fabulous, String.valueOf(Integer.parseInt(item.getLike_num()) + 1)); + } else { + helper.setImageResource(R.id.dianzan_image, com.qxcm.moduleutil.R.mipmap.dongtai_hudong_dianzan); + helper.setText(R.id.dy_fabulous, item.getLike_num()); + } + + if (item.getIs_room() != null && item.getIs_room().equals("0")) { + helper.setVisible(R.id.gensui, false); + } else if (item.getIs_room() == null) { + helper.setVisible(R.id.gensui, false); + } else { + helper.setVisible(R.id.gensui, true); } //分享数 - helper.setText(R.id.dy_zs, item.getRewards_num()!=null ? item.getRewards_num() : "0"); + helper.setText(R.id.dy_zs, item.getRewards_num() != null ? item.getRewards_num() : "0"); //评论数 helper.setText(R.id.dy_comment, item.getComment_num() + ""); //时间 if (!item.getCreatetime().isEmpty()) { try { - helper.setText(R.id.dy_time_text, "发布于:"+TimeUtils.millis2String(Long.parseLong(item.getCreatetime()) * 1000)); + helper.setText(R.id.dy_time_text, "发布于:" + TimeUtils.millis2String(Long.parseLong(item.getCreatetime()) * 1000)); } catch (NumberFormatException e) { e.printStackTrace(); } } - - if (item.getImages()!=null) { - + //显示图片 + if (item.getImages() != null && !item.getImages().isEmpty()) { String[] arrIv = item.getImages().split(","); -// String[] arrIv = Arrays.asList(item.getImages().split(",")).toArray(new String[item.getImages().size()]); - int length = arrIv.length; - - OneImageYuanJiaoAdapter oneImageYuanJiaoAdapter = new OneImageYuanJiaoAdapter(mContext); MyGridView recyclerView = helper.getView(R.id.dy_image_recyc); recyclerView.setNumColumns(3); @@ -171,14 +235,25 @@ public class CirleListAdapter extends BaseQuickAdapter { FullScreenUtil.showFullScreenDialog(mContext, position, oneImageYuanJiaoAdapter.getList_adapter()); }); } + if (item.getLike_list() == null){ + helper.getView(R.id.rela).setVisibility(GONE); + helper.getView(R.id.view).setVisibility(VISIBLE); + }else { + helper.getView(R.id.rela).setVisibility(VISIBLE); + helper.getView(R.id.view).setVisibility(GONE); + RecyclerView recyclerView= helper.getView(R.id.recycle_view); + recyclerView.setLayoutManager(new LinearLayoutManager(mContext, LinearLayoutManager.HORIZONTAL, false)); + LikeUserAdapter likeUserAdapter = new LikeUserAdapter(); + recyclerView.setAdapter(likeUserAdapter); + likeUserAdapter.setNewData(item.getLike_list()); + helper.setText(R.id.pinglun_tv, item.getLike_num()+"人点赞"); + } + } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CommentAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CommentAdapter.java index c76eb085..ad1e5141 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CommentAdapter.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/CommentAdapter.java @@ -1,34 +1,63 @@ package com.qxcm.moduleutil.adapter; +import static android.view.View.GONE; +import static android.view.View.VISIBLE; + +import android.content.Context; +import android.graphics.Color; +import android.graphics.drawable.ColorDrawable; +import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; -import android.widget.Button; -import android.widget.ImageView; +import android.view.inputmethod.InputMethodManager; +import android.widget.EditText; +import android.widget.PopupWindow; import android.widget.TextView; +import android.widget.Toast; import androidx.annotation.NonNull; +import androidx.constraintlayout.widget.ConstraintLayout; +import androidx.fragment.app.FragmentManager; +import androidx.recyclerview.widget.DiffUtil; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.TimeUtils; +import com.blankj.utilcode.util.ToastUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.bean.CommentBean; +import com.qxcm.moduleutil.dialog.ReplyDialogFragment; import com.qxcm.moduleutil.utils.MeHeadView; +import com.qxcm.moduleutil.utils.SpUtil; import java.util.ArrayList; import java.util.List; public class CommentAdapter extends RecyclerView.Adapter { + public interface OnCommentInteractionListener { + void onInputBoxShow(int id,String s,int position,String replyTo); + void onDetaleClick(int id,int position); + // 新增长按回调 + void onCommentLongClick(CommentBean.CommentDetailsBean comment, CommentBean.CommentDetailsBean.Replies reply, int position); + + } + private OnCommentInteractionListener listener; // 新增监听器引用 + public void setOnCommentInteractionListener(OnCommentInteractionListener listener) { + this.listener = listener; + } private List commentList; + private static FragmentManager fragmentManager = null; public CommentAdapter(List commentList) { this.commentList = commentList; } public void updateData(List newReplyList) { - commentList.clear(); - commentList.addAll(newReplyList); - notifyDataSetChanged(); + DiffUtil.DiffResult diffResult = DiffUtil.calculateDiff(new CommentDiffCallback(this.commentList, newReplyList)); + this.commentList.clear(); + this.commentList.addAll(newReplyList); + diffResult.dispatchUpdatesTo(this); } @NonNull @Override @@ -40,7 +69,7 @@ public class CommentAdapter extends RecyclerView.Adapter()); -// rvReplies.setAdapter(replyAdapter); + LinearLayoutManager layoutManager = new LinearLayoutManager(itemView.getContext()); + rvReplies.setLayoutManager(layoutManager); + ReplyAdapter replyAdapter = new ReplyAdapter(new ArrayList<>()); + rvReplies.setAdapter(replyAdapter); } - public void bind(CommentBean.CommentDetailsBean comment) { + public void bind(CommentBean.CommentDetailsBean comment, OnCommentInteractionListener listener, int position) { // 绑定主评论数据 tvNickname.setText(comment.getNickname()); tvContent.setText(comment.getContent()); @@ -79,21 +117,108 @@ public class CommentAdapter extends RecyclerView.Adapter 0) { + rvReplies.setVisibility(VISIBLE); + replyAdapter.updateData(comment.getReplies()); + + // 控制“全部评论...”按钮的显示 + btnShowAllReplies.setVisibility(comment.getReplies().size() > 2 ? VISIBLE : GONE); + + btnShowAllReplies.setOnClickListener(v -> { + replyAdapter.setExpanded(true); // 展开所有评论 + btnShowAllReplies.setVisibility(GONE); // 隐藏按钮 + }); + + replyAdapter.setOnReplyClickListener((reply, position1) -> { + if (listener != null) { + // 构造回复内容(如 @用户名) + String replyContent = "@" + reply.getNickname() + " "; + listener.onInputBoxShow(reply.getPid(), replyContent, getAdapterPosition(),reply.getReply_to()+""); + } + }); + + replyAdapter.setOnReplyLongClickListener((reply, replyPosition) -> { + if (listener != null) { + // 转发到Activity + listener.onCommentLongClick(comment,reply, replyPosition); + } + }); + }else { + rvReplies.setVisibility(GONE); + } + } // 点击回复按钮 btnReply.setOnClickListener(v -> { - // 弹出输入框让用户输入回复内容 - showReplyDialog(comment.getId()); + + if (listener != null) { + // 传递需要的参数 + listener.onInputBoxShow(comment.getId(), "", position,""); + } + }); + btnDetale.setOnClickListener(v -> { + if (listener != null) { + listener.onDetaleClick(comment.getId(), position); // 点击删除按钮 + } + }); + + if (comment.getUser_id()!= SpUtil.getUserId()){ + btnReply.setVisibility(GONE); + }else { + btnReply.setVisibility(VISIBLE); + } + + // 添加长按监听 + itemView.setOnLongClickListener(v -> { + if (listener != null) { + listener.onCommentLongClick(comment, null,position); + } + return true; // 消费事件 + }); + } - private void showReplyDialog(int commentId) { - // 调用弹窗逻辑,传递 commentId 和 FragmentManager + } + + static class CommentDiffCallback extends DiffUtil.Callback { + + private final List oldList; + private final List newList; + + public CommentDiffCallback(List oldList, List newList) { + this.oldList = oldList; + this.newList = newList; + } + + @Override + public int getOldListSize() { + return oldList.size(); + } + + @Override + public int getNewListSize() { + return newList.size(); + } + + @Override + public boolean areItemsTheSame(int oldItemPosition, int newItemPosition) { + return oldList.get(oldItemPosition).getId() == newList.get(newItemPosition).getId(); + } + + @Override + public boolean areContentsTheSame(int oldItemPosition, int newItemPosition) { + return oldList.get(oldItemPosition).equals(newList.get(newItemPosition)); } } + } \ No newline at end of file diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeListAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeListAdapter.java new file mode 100644 index 00000000..5f01091f --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeListAdapter.java @@ -0,0 +1,24 @@ +package com.qxcm.moduleutil.adapter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qxcm.moduleutil.R; +import com.qxcm.moduleutil.bean.CircleListBean; +import com.qxcm.moduleutil.utils.ImageUtils; + +public class LikeListAdapter extends BaseQuickAdapter { + public LikeListAdapter() { + super(R.layout.item_like_list); + } + + @Override + protected void convert(BaseViewHolder helper, CircleListBean.LikeList item) { + ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.like_avatar)); + helper.setText(R.id.tv_nickname, item.getNickname()); + String s=item.getSex().equals("1")?"男":"女"; + String age=item.getAge()+"岁"; + String constellation=item.getConstellation(); + String co=s+"/"+age+"/"+constellation; + helper.setText(R.id.tv_content, co); + } +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeUserAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeUserAdapter.java new file mode 100644 index 00000000..0c6d3d76 --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/LikeUserAdapter.java @@ -0,0 +1,18 @@ +package com.qxcm.moduleutil.adapter; + +import com.chad.library.adapter.base.BaseQuickAdapter; +import com.chad.library.adapter.base.BaseViewHolder; +import com.qxcm.moduleutil.R; +import com.qxcm.moduleutil.bean.CircleListBean; +import com.qxcm.moduleutil.utils.ImageUtils; + +public class LikeUserAdapter extends BaseQuickAdapter { + public LikeUserAdapter() { + super(R.layout.item_like_user); + } + + @Override + protected void convert(BaseViewHolder helper, CircleListBean.LikeList item) { + ImageUtils.loadHeadCC(item.getAvatar(), helper.getView(R.id.user_icon)); + } +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/MyFragmentPagerAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/MyFragmentPagerAdapter.java index d3e7bc07..94a1796a 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/MyFragmentPagerAdapter.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/MyFragmentPagerAdapter.java @@ -6,10 +6,11 @@ import androidx.annotation.NonNull; import androidx.fragment.app.Fragment; import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentPagerAdapter; +import androidx.fragment.app.FragmentStatePagerAdapter; import java.util.List; -public class MyFragmentPagerAdapter extends FragmentPagerAdapter { +public class MyFragmentPagerAdapter extends FragmentStatePagerAdapter { private List fragmentList; @@ -18,7 +19,6 @@ public class MyFragmentPagerAdapter extends FragmentPagerAdapter { super(fm); this.fragmentList = list; } - @Override public Fragment getItem(int i) { return fragmentList.get(i); diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/ReplyAdapter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/ReplyAdapter.java index e11ebfe1..c9ddb7a8 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/ReplyAdapter.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/adapter/ReplyAdapter.java @@ -8,14 +8,34 @@ import android.widget.TextView; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; +import com.blankj.utilcode.util.TimeUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.bean.CommentBean; import java.util.List; public class ReplyAdapter extends RecyclerView.Adapter { + public interface OnReplyClickListener { + void onReplyClick(CommentBean.CommentDetailsBean.Replies reply, int position); + } + // 添加回调接口 + public interface OnReplyLongClickListener { + void onReplyLongClick(CommentBean.CommentDetailsBean.Replies reply, int position); + } + private OnReplyLongClickListener longClickListener; + + public void setOnReplyLongClickListener(OnReplyLongClickListener listener) { + this.longClickListener = listener; + } + private OnReplyClickListener listener; + + // 设置监听器的方法 + public void setOnReplyClickListener(OnReplyClickListener listener) { + this.listener = listener; + } private List replyList; + private boolean isExpanded = false; // 是否展开显示所有评论 public ReplyAdapter(List replyList) { this.replyList = replyList; @@ -37,27 +57,60 @@ public class ReplyAdapter extends RecyclerView.Adapter= 2) { + return; // 不绑定数据 + } + holder.bind(reply,position, listener,longClickListener); + } + + public void setExpanded(boolean expanded) { + isExpanded = expanded; + notifyDataSetChanged(); // 刷新适配器 } @Override public int getItemCount() { - return replyList.size(); + return isExpanded ? replyList.size() : Math.min(2, replyList.size()); } static class ReplyViewHolder extends RecyclerView.ViewHolder { private TextView tvNickname; private TextView tvContent; + private TextView btnReply; + private TextView tvTime; public ReplyViewHolder(@NonNull View itemView) { super(itemView); -// tvNickname = itemView.findViewById(R.id.tv_reply_nickname); -// tvContent = itemView.findViewById(R.id.tv_reply_content); + tvNickname = itemView.findViewById(R.id.tv_name); + tvContent = itemView.findViewById(R.id.tv_reply); + btnReply = itemView.findViewById(R.id.btn_reply); + tvTime = itemView.findViewById(R.id.tv_time); } - public void bind(CommentBean.CommentDetailsBean.Replies reply) { - tvNickname.setText(reply.getNickname()); + public void bind(CommentBean.CommentDetailsBean.Replies reply,int position, OnReplyClickListener listener,OnReplyLongClickListener longClickListener) { + + tvNickname.setText(reply.getNickname()+":" +(reply.getReply_to_user()!=null?reply.getReply_to_user():"")); tvContent.setText(reply.getContent()); + tvTime.setText(TimeUtils.millis2String(Long.parseLong(reply.getCreatetime()+"") * 1000)); + btnReply.setOnClickListener(new View.OnClickListener() { + + @Override + public void onClick(View v) { + if (listener != null) { + listener.onReplyClick(reply, position); + } + } + }); + + // 添加长按监听 + itemView.setOnLongClickListener(v -> { + if (longClickListener != null) { + longClickListener.onReplyLongClick(reply, position); + return true; // 消费事件 + } + return false; + }); + } } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/base/CommonAppContext.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/base/CommonAppContext.java index 84f2c24d..acf33040 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/base/CommonAppContext.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/base/CommonAppContext.java @@ -9,16 +9,22 @@ import android.content.Intent; import android.content.pm.PackageInfo; import android.content.pm.PackageManager; import android.content.pm.Signature; +import android.media.MediaRouter; import android.os.Build; import android.os.Bundle; import android.os.Handler; import android.text.TextUtils; import android.util.Base64; +import android.util.Log; import android.webkit.WebView; import androidx.multidex.MultiDex; import androidx.multidex.MultiDexApplication; +import com.alibaba.android.arouter.facade.model.RouteMeta; +import com.alibaba.android.arouter.facade.template.IRouteGroup; +import com.alibaba.android.arouter.launcher.ARouter; +import com.blankj.utilcode.BuildConfig; import com.blankj.utilcode.util.AppUtils; import com.blankj.utilcode.util.LogUtils; import com.blankj.utilcode.util.ProcessUtils; @@ -49,6 +55,7 @@ import org.greenrobot.eventbus.EventBus; import java.lang.reflect.Method; import java.security.MessageDigest; +import java.util.Map; import java.util.concurrent.Executors; import java.util.concurrent.ScheduledExecutorService; import java.util.concurrent.TimeUnit; @@ -73,15 +80,17 @@ public class CommonAppContext extends MultiDexApplication { public UserBean mUserBean; private final ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1); private ScheduledExecutorService scheduledExecutorServiceRoom = null; + @Override public void onCreate() { super.onCreate(); sInstance = this; - sMainThreadHandler=new Handler(); + sMainThreadHandler = new Handler(); UtilConfig.init(this); registerActivityLifecycleCallbacks(); initWebView(); if (ProcessUtils.isMainProcess()) { + initARouter(); if (SpUtil.isAgreePolicy()) { checkInEmulator(); UtilConfig.checkInEmulator(); @@ -90,6 +99,16 @@ public class CommonAppContext extends MultiDexApplication { EnvironmentPrefs prefs = new EnvironmentPrefs(this); currentEnvironment = prefs.getSelectedEnvironment(); } + + private void initARouter() { + if(BuildConfig.DEBUG) { + ARouter.openDebug(); + ARouter.openLog(); + } + ARouter.init(this); + + } + private void initWebView() { //Android P 以及之后版本不支持同时从多个进程使用具有相同数据目录的WebView if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) { @@ -99,6 +118,7 @@ public class CommonAppContext extends MultiDexApplication { } } } + public String getProcessName(Context context) { if (context == null) return null; ActivityManager manager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE); @@ -109,6 +129,7 @@ public class CommonAppContext extends MultiDexApplication { } return null; } + @Override protected void attachBaseContext(Context base) { MultiDex.install(this); @@ -155,6 +176,7 @@ public class CommonAppContext extends MultiDexApplication { public String getToken() { return SpUtil.getToken(); } + private void registerActivityLifecycleCallbacks() { registerActivityLifecycleCallbacks(new Application.ActivityLifecycleCallbacks() { @Override @@ -264,26 +286,28 @@ public class CommonAppContext extends MultiDexApplication { return mFront; } - public void startInitSdk(){ + public void startInitSdk() { } public void setUser(UserBean userBean) { mUserBean = userBean; SpUtil.saveUserId(userBean.getUser_id()); - SpUtil.saveUserInfo(userBean); + SpUtil.saveUserBean(userBean); SpUtil.putToken(userBean.getToken()); } public UserBean getUser() { if (mUserBean == null) { - mUserBean = SpUtil.getUserInfo(); + mUserBean = SpUtil.getUserBean(); } return mUserBean; } + public void setUserBean(UserBean bean) { mUserBean = bean; } + public void clearLoginInfo() throws ClassNotFoundException { // mUid = null; // mToken = null; @@ -292,14 +316,14 @@ public class CommonAppContext extends MultiDexApplication { // ); mUserBean = null; SpUtil.saveUserId(-1); - SpUtil.saveUserInfo(new UserBean()); + SpUtil.saveUserBean(new UserBean()); SpUtil.putToken(""); Intent intent = new Intent("com.example.action.LAUNCH_PAGE"); intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK | Intent.FLAG_ACTIVITY_NEW_TASK); getApplicationContext().startActivity(intent); } - public static boolean isAlipayInstalled(Context context){ + public static boolean isAlipayInstalled(Context context) { try { context.getPackageManager().getPackageInfo("com.eg.android.AlipayGphone", 0); return true;//安装了支付宝 diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/AlbumBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/AlbumBean.java index 0b615b45..f780508b 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/AlbumBean.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/AlbumBean.java @@ -1,5 +1,8 @@ package com.qxcm.moduleutil.bean; +import com.chad.library.adapter.base.entity.MultiItemEntity; + +import java.io.Serializable; import java.util.List; import lombok.Data; @@ -10,7 +13,8 @@ import lombok.Data; *@description: 相册列表 */ @Data -public class AlbumBean { +public class AlbumBean implements Serializable { + private static final long serialVersionUID = 1L; private String id;//相册id private String name; //相册名称 @@ -20,13 +24,26 @@ public class AlbumBean { private String pwd; //相册密码 private String read_num; //相册阅读数 + private String is_pwd; + private String is_like;//是否点赞 + private String like_num;//点赞数 + private String count;//图片数量 + private String user_id; private List image_list; @Data - public class ImageList{ + public static class ImageList implements MultiItemEntity , Serializable{ + private static final long serialVersionUID = 1L; private String id; //图片id private String image; //图片地址 private String content; //图片描述 private String createtime; //图片创建时间 + private boolean isSelected; // 用于标记是否被选中 + private int itemViewType = 1; + + @Override + public int getItemType() { + return itemViewType; + } } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CircleListBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CircleListBean.java index 0f4980c7..2e9ef6a8 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CircleListBean.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CircleListBean.java @@ -4,13 +4,18 @@ import java.util.List; import lombok.Data; +/** + * @author qx + * @data 2025/6/3 + * @description: 这是广场中的列表数据 + */ @Data public class CircleListBean { private int id;//语圈ID private int user_id;//用户ID private String nickname;//用户昵称 private String avatar;//用户头像 - private int is_like;//是否点赞(0没有,1点赞) + private int is_like;//我是否点赞(0没有,1点赞) private int sex;//性别 1男2女 private String content;//内容 private String like_num;//点赞数 @@ -22,6 +27,23 @@ public class CircleListBean { private String ip;//活跃地址 private String images;////图片 JSON字符串 封面获取第一张 private String createtime;//时间 - private String title;//话题 + private String topic_id; + private String share_url; + private List title;//话题列表 + + private String read_num;//阅读数 + private List like_list; + + + @Data + public class LikeList { + private String user_id; + private String nickname; + private String avatar; + private int age;//年龄 + private String sex; + private String constellation;//星座 + private String birthday;//生日 + } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CommentBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CommentBean.java index 5e7bdf3f..079a2b4e 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CommentBean.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/CommentBean.java @@ -15,25 +15,29 @@ public class CommentBean { private List list; @Data public static class CommentDetailsBean { - private int id; - private int zone_id; - private String content; + private int id;//评论ID + private int zone_id;//动态ID + private String content;//评论内容 private int createtime; - private int user_id; + private int user_id;//评论者ID private String nickname; private String avatar; - private int is_author; + private int is_author;//评论者是否作者 0不是,1是 private List replies; @Data public static class Replies { - private int zone_id; + private int id;//评论ID + private int zone_id;//动态ID private String content; private int createtime; - private int user_id; + private int user_id;//评论者ID private String nickname; private String avatar; - private int pid; + private int pid;//上级评论的ID + private int is_author;//评论者是否作者 0不是,1是 + private int reply_to;//回复给谁的ID + private String reply_to_user; } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/HeatedBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/HeatedBean.java index 4036a5fd..f6c06378 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/HeatedBean.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/HeatedBean.java @@ -1,5 +1,8 @@ package com.qxcm.moduleutil.bean; +import android.os.Parcel; +import android.os.Parcelable; + import lombok.Data; /** *@author qx @@ -7,13 +10,44 @@ import lombok.Data; *@description: 话题实体 */ @Data -public class HeatedBean { +public class HeatedBean implements Parcelable { private String title;//话题 private String topic_id;//话题id private String count;//引用数量 private String pic; //图片 private String content;//内容 - private String id;//话题id + protected HeatedBean(Parcel in) { + title = in.readString(); + topic_id = in.readString(); + count = in.readString(); + pic = in.readString(); + content = in.readString(); + } + public static final Creator CREATOR = new Creator() { + @Override + public HeatedBean createFromParcel(Parcel in) { + return new HeatedBean(in); + } + + @Override + public HeatedBean[] newArray(int size) { + return new HeatedBean[size]; + } + }; + + @Override + public int describeContents() { + return 0; + } + + @Override + public void writeToParcel(Parcel dest, int flags) { + dest.writeString(title); + dest.writeString(topic_id); + dest.writeString(count); + dest.writeString(pic); + dest.writeString(content); + } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserBean.java index da851ceb..17e2a099 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserBean.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserBean.java @@ -1,5 +1,7 @@ package com.qxcm.moduleutil.bean; +import com.google.gson.annotations.SerializedName; + import java.io.Serializable; import java.util.List; @@ -7,7 +9,7 @@ import lombok.Data; @Data public class UserBean implements Serializable { - + @SerializedName(value = "id", alternate = "user_id") private int user_id; private int user_code; private String avatar; diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserInfo.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserInfo.java new file mode 100644 index 00000000..5516cb15 --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserInfo.java @@ -0,0 +1,53 @@ +package com.qxcm.moduleutil.bean; + +import java.util.List; + +import lombok.Data; +/** + *@author qx + *@data 2025/6/3 + *@description: 个人信息,点击我的获取 + */ +@Data +public class UserInfo { + private int id; //用户id + private String user_code;//用户id码 + private String avatar;//头像 + private String nickname;//昵称 + private int sex;//性别 1男 2女 + private List icon;//等级图标数组 + private int follow_num;//关注数 + private int fans_num;//粉丝数 + private int look_me_num; //被查看次数,需要魅力等级20以上才能查看 + private int charm_level; //魅力等级 + private int is_use_code; //是否是靓号 0否 1是 + private String tencent_im; + + private String birthday;//生日 + private String profile;//简介 + private String home_bgimages;//背景图片 + private String is_follow;//是否关注 + private List tag_list; + private List gift_wall; + private int age;//年龄 + private String is_room; + +// @Data +// public static class TagList{ +// private String id; +// private String tag_name; +// } + @Data + public static class GiftWall{ + private String gift_name; + private String total; + + private List send_user_info; + @Data + public static class SendUserInfo{ + private String nickname; + private String avatar; + } + + } +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserTagBean.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserTagBean.java new file mode 100644 index 00000000..72a493bc --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/bean/UserTagBean.java @@ -0,0 +1,14 @@ +package com.qxcm.moduleutil.bean; + +import lombok.Data; +/** + *@author qx + *@data 2025/6/4 + *@description: 用户标签实体 + */ +@Data +public class UserTagBean { + private String id; + private String tag_name; + private String createtime; +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/dialog/ReplyDialogFragment.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/dialog/ReplyDialogFragment.java new file mode 100644 index 00000000..9e2d0bdf --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/dialog/ReplyDialogFragment.java @@ -0,0 +1,96 @@ +package com.qxcm.moduleutil.dialog; + +import android.annotation.SuppressLint; +import android.content.Context; +import android.os.Bundle; +import android.text.TextUtils; +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.EditText; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.fragment.app.DialogFragment; +import androidx.fragment.app.FragmentManager; + +import com.blankj.utilcode.util.ToastUtils; +import com.qxcm.moduleutil.R; +import com.qxcm.moduleutil.adapter.CommentAdapter; + +public class ReplyDialogFragment extends DialogFragment { + private static final String TAG = "ReplyDialogFragment"; + private int commentId; + private int position; + private OnCommentInteractionListener listener; + + public interface OnCommentInteractionListener { + void onInputBoxShow(int id, String content, int position); + } + + public static ReplyDialogFragment newInstance(int commentId, int position, OnCommentInteractionListener listener) { + ReplyDialogFragment fragment = new ReplyDialogFragment(); + fragment.commentId = commentId; + fragment.position = position; + fragment.listener = listener; + return fragment; + } + + @Nullable + @Override + public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) { + return inflater.inflate(R.layout.dialog_reply, container, false); + } + + @Override + public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) { + super.onViewCreated(view, savedInstanceState); + + EditText etInput = view.findViewById(R.id.et_input); + TextView tvSend = view.findViewById(R.id.tv_send); + + etInput.requestFocus(); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE | WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); + + tvSend.setOnClickListener(v -> { + String content = etInput.getText().toString().trim(); + if (!TextUtils.isEmpty(content) && listener != null) { + listener.onInputBoxShow(commentId, content, position); + dismiss(); + } else { + ToastUtils.showShort("请输入内容"); + } + }); + } + + @Override + public void onStart() { + super.onStart(); + Window window = getDialog().getWindow(); + if (window != null) { + // 设置宽度为 match_parent + window.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); + + // 设置位置在底部(可选) + window.setGravity(Gravity.BOTTOM); + + // 去除默认背景遮罩 + window.setBackgroundDrawableResource(android.R.color.transparent); + window.getDecorView().setBackgroundColor(0x00000000); // 完全透明 + } + } + + @Override + public void onResume() { + super.onResume(); + // 自动弹出软键盘 + getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); + getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); + } +} + diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/ApiServer.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/ApiServer.java index 2336a283..b66e86ee 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/ApiServer.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/ApiServer.java @@ -12,6 +12,8 @@ import com.qxcm.moduleutil.bean.RealNameBean; import com.qxcm.moduleutil.bean.RewardUserBean; import com.qxcm.moduleutil.bean.RoonGiftModel; import com.qxcm.moduleutil.bean.UserBean; +import com.qxcm.moduleutil.bean.UserInfo; +import com.qxcm.moduleutil.bean.UserTagBean; import com.qxcm.moduleutil.widget.Constants; import java.util.List; @@ -53,6 +55,10 @@ public interface ApiServer { @POST(Constants.SWITCH_ACCOUNTS) Observable>> switchAccounts(@Field("user_login") String user_id); + @FormUrlEncoded + @POST(Constants.FORGOT_PASSWORD) + Call> forgotPassword(@Field("new_password") String new_password, @Field("mobile") String mobile, @Field("sms_code") String sms_code); + @FormUrlEncoded @POST(Constants.USER_UPDATE) Observable> userUpdate(@FieldMap Map map); @@ -92,10 +98,13 @@ public interface ApiServer { @FormUrlEncoded @POST(Constants.GET_ALBUM_LIST) - Observable>> getAlbumList(@Field("page") String page, @Field("page_limit") String page_limit); + Observable>> getAlbumList(@Field("page") String page, @Field("page_limit") String page_limit, @Field("user_id") String user_id); @FormUrlEncoded @POST(Constants.CREATE_ALBUM) - Call > createAlbum(@Field("name") String name, @Field("image") String image); + Call > createAlbum(@Field("name") String name, @Field("pwd")String pwd, @Field("image") String image); + @FormUrlEncoded + @POST(Constants.EDIT_ALBUM) + Call > editAlbum(@Field("album_id") String album_id,@Field("name") String name, @Field("pwd")String pwd, @Field("image") String image); @FormUrlEncoded @POST(Constants.GET_REWARD_LIST) @@ -118,11 +127,30 @@ public interface ApiServer { @GET(Constants.GET_CIRCLE_LIST) Observable>> getCircleList(@Query("page") String page, @Query("page_limit") String page_limit); + @FormUrlEncoded + @POST(Constants.GET_USER_HOME_ZONE) + Observable>> getCircleUserList(@Field("user_id") String user_id,@Field("page") String page, @Field("page_limit") String page_limit); @FormUrlEncoded @POST(Constants.LIKE_ZONE) Call> likeZone(@Field("id") String zone_id); + @FormUrlEncoded + @POST(Constants.TOPIC_ID) + Observable>> topicId(@Field("topic_id") String topic_id); + + @FormUrlEncoded + @POST(Constants.ZONE_DETAIL) + Observable> zoneDetail(@Field("id") String topic_id); + + @FormUrlEncoded + @POST(Constants.GET_USER_HOME) + Observable> getUserHome(@Field("user_id") String user_id); + + @FormUrlEncoded + @POST(Constants.DELETE_COMMENT) + Call> deleteComment(@Field("id") String zone_id); + @FormUrlEncoded @POST(Constants.GET_COMMENT_LIST) Observable> getCommentList(@Field("id") String id, @Field("page") String page, @Field("page_limit") String page_limit); @@ -131,218 +159,61 @@ public interface ApiServer { @POST(Constants.COMMENT_ZONE) Call> commentZone(@Field("id") String id, @Field("content") String content, @Field("pid") String pid, @Field("reply_to") String reply_to); -// @FormUrlEncoded -// @POST(Constant.URL.ADDBANK) -// Observable> addBank(@Field("token") String token, @Field("bank_num") String bankNum, @Field("cardholder") String cardholder, @Field("bank_type") int bankType, -// @Field("bank_name") String bankName, @Field("mobile") String mobile, @Field("bank_zhi") String bankZhi, @Field("card_number") String cardNumber, -// @Field("code") String code -// ); -// -// @FormUrlEncoded -// @POST(Constant.URL.SEND_CODE) -// Observable> sendCode(@Field("token") String token, @Field("mobile") String mobile, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(URLConstants.CHECK_SMS_CODE) -// Observable> checkSmsCode(@Field("mobile") String mobile, @Field("code") String code); -// -// @FormUrlEncoded -// @POST(Constant.URL.USER_BANK) -// Observable> getUserBank(@Field("token") String token); -// -// @FormUrlEncoded -// @POST(Constant.URL.RECHARGE) -// Observable> userRecharge(@Field("token") String token, @Field("money") String money, @Field("type") int type); -// @FormUrlEncoded -// @POST(Constant.URL.THREE_PARTY_LOGIN) -// Observable> threePay(@Field("user_id") String userId, @Field("type") int type, @Field("id") String id); -// -// @FormUrlEncoded -// @POST(Constant.URL.ALIPAYMENT) -// Observable> aliPay(@Field("token") String token, @Field("user_id") String userId, @Field("type") int type, @Field("id") String id); -// -// @FormUrlEncoded -// @POST(Constant.URL.WXPAYMENT) -// Observable> wxPay(@Field("token") String token, @Field("user_id") String userId, @Field("type") int type, @Field("id") String id); -// -// -// @FormUrlEncoded -// @POST(Constant.URL.EDITBANK) -// Observable> editBank(@Field("token") String token, @Field("cardholder") String cardholder, @Field("bank_name") String bank_name, -// @Field("mobile") String mobile, @Field("card_number") String card_number, @Field("id") String id, -// @Field("bank_num") String bank_num, @Field("bank_zhi") String bank_zhi, @Field("code") String code); -// -// @FormUrlEncoded -// @POST(Constant.URL.USERWITHDRAW) -// Observable> userWithdraw(@Field("token") String token, @Field("bank_id") String bank_id, @Field("number") String number, @Field("password") String password); -// -// @FormUrlEncoded -// @POST(Constant.URL.LOGIN) -// Observable> login(@Field("mobile") String mobile, @Field("password") String password, @Field("code") String code, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(Constant.URL.LOGIN) -// Observable> oauthLogin(@Field("netease_token") String netease_token, @Field("access_token") String access_token, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(Constant.URL.SETUSERSEX) -// Observable> setUserSex(@Field("user_id") String user_id, @Field("sex") int sex); -// -// @FormUrlEncoded -// @POST(Constant.URL.THIRDPARTYLOGIN) -// Observable> thirdPartyLogin(@Field("openid") String openid, @Field("three_party") int three_party, @Field("nickname") String nickname,@Field("openid_old") String oldOpenId, @Field("head_pic") String head_pic); -// -// -// @FormUrlEncoded -// @POST(Constant.URL.EARNINGS) -// Observable> getEarnings(@Field("token") String token); -// -// @FormUrlEncoded -// @POST(Constant.URL.CONVERTEARNINGS) -// Observable> convertEarnings(@Field("token") String token, @Field("number") String number, @Field("password") String password); -// -// -// @FormUrlEncoded -// @POST(Constant.URL.CASHLOG) -// Observable>> getCashLog(@Field("token") String token, @Field("p") int p, @Field("change_type") int change_type); -// -// @FormUrlEncoded -// @POST(Constant.URL.BALANCE) -// Observable> getBalance(@Field("token") String token, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(Constant.URL.FOLLOW) -// Observable> follow(@Field("token") String token, @Field("user_id") String userId, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(Constant.URL.FRIENDLIST) -// Observable>> friendList(@Field("p") int p); -// -// @FormUrlEncoded -// @POST(Constant.URL.FOLLOWLIST) -// Observable>> followList(@Field("p") int p); -// -// @FormUrlEncoded -// @POST(Constant.URL.FANSLIST) -// Observable>> fansList(@Field("p") int p); -// -// @POST(Constant.URL.MYINFO) -// Observable> userInfo(); -// -// @FormUrlEncoded -// @POST(Constant.URL.USERINFO) -// Observable> userInfoData(@Field("user_id") String userId, @Field("emchat_username") String emchatUsername, @Field("visit") int visit); -// -// @POST(Constant.URL.VIPINFO) -// Observable> vipinfo(); -// -// @POST(Constant.URL.SERVICEUSER) -// Observable> serviceUser(); -// -// @POST(Constant.URL.ARTICLE_CATEGORIES) -// Observable>> articleCategories(); -// -// @FormUrlEncoded -// @POST(Constant.URL.ARTICLE_LIST) -// Observable>> articleList(@Field("article_cat_id") String articleCatId); -// -// @POST(Constant.URL.USER_NOBILITYINFO) -// Observable> userNobilityInfo(); -// -// @POST(Constant.URL.NOBILITY) -// Observable>> nobility(); -// -// @FormUrlEncoded -// @POST(Constant.URL.BUYNOBILITY) -// Observable> buyNobility(@Field("nobility_id") String nobilityId); -// -// @FormUrlEncoded -// @POST(Constant.URL.RENEWNOBILITY) -// Observable> renewNobility(@Field("day") String day); -// -// @FormUrlEncoded -// @POST(Constant.URL.UPDATE_USERINFO) -// Observable> updateUserInfo(@Field("signature") String signature, @Field("birthday") String birthday, @Field("constellation") String constellation, @Field("profession") String profession, -// @Field("city_id") String city_id, @Field("user_photo") String user_photo, @Field("sex") String sex, @Field("head_picture") String head_picture, -// @Field("nickname") String nickname, @Field("province_id") String province_id, @Field("user_no") String userNo, @Field("county_id") String county_id); -// -// @FormUrlEncoded -// @POST(Constant.URL.INDEX_LABEL) -// Observable>> indexLabel(@Field("category_id") String categoryId, @Field("p") int p); -// -// @FormUrlEncoded -// @POST(Constant.URL.ADDLABEL) -// Observable> addLabel(@Field("ids") String ids); -// -// @POST(Constant.URL.CASHTYPE) -// Observable>> cashType(); -// -// @FormUrlEncoded -// @POST(Constant.URL.COMEUSER) -// Observable>> comeUser(@Field("token") String token, @Field("p") int p); -// -// @GET(Constant.URL.APPUPDATE) -// Observable> appUpdate(); -// -// @GET(Constant.URL.CHECK_UPDATE) -// Observable> checkUpdate(); -// -// @POST(Constant.URL.USER_FILES) -// Observable> userFiles(); -// -// @FormUrlEncoded -// @POST(Constant.URL.BIND_MOBILE) -// Observable> bindMobile(@Field("mobile") String mobile, @Field("code") String code); -// -// @FormUrlEncoded -// @POST(Constant.URL.RESET_PASSWORD) -// Observable> resetPassword(@Field("mobile") String mobile, @Field("code") String code, @Field("password") String password); -// -// @FormUrlEncoded -// @POST(Constant.URL.MESSAGE_SETTING) -// Observable> messageSetting(@Field("broadcast") int broadcast, @Field("fans") int fans, @Field("news_voice") int news_voice, @Field("news_vibrate") int news_vibrate, @Field("only_friend") int only_friend ); -// -// @FormUrlEncoded -// @POST(Constant.URL.USER_BLACK_LIST) -// Observable>> userBlackList(@Field("p") int page, @Field("keyword") String keyword); -// -// @FormUrlEncoded -// @POST(Constant.URL.ADD_BLACK_USER) -// Observable> removeBlackUser(@Field("black_id") String blackId, @Field("type") int type); -// -// @FormUrlEncoded -// @POST(Constant.URL.QUIT_ROOM_WITH_USER_ID) -// Observable> quitRoomWithUserId(@Field("room_id") String roomId, @Field("user_id") String userId); -// -// @POST(Constant.URL.SIGN_SWITCH) -// Observable> signSwitch(); -// -// @FormUrlEncoded -// @POST(Constant.URL.SET_SECOND_PASSWORD) -// Observable> setSecondPassword(@Field("mobile") String mobile, @Field("password") String password, @Field("code") String code); -// -// @FormUrlEncoded -// @POST(URLConstants.NAME_AUTH) -// Observable> nameAuth(@Field("userId") String userId, @Field("fullName") String fullName, @Field("idNumber") String idNumber, @Field("idCard") String idCard, @Field("front") String front, @Field("back") String back); -// -// @POST(Constant.URL.USER_PHOTO) -// Observable>> userPhotos(); -// -// @FormUrlEncoded -// @POST(Constant.URL.DELETE_USER_PHOTO) -// Observable> deleteUserPhoto(@Field("id") String ids); -// -// @FormUrlEncoded -// @POST(Constant.URL.ADD_USER_PHOTO) -// Observable> addUserPhoto(@Field("photo") String photo); -// -// @FormUrlEncoded -// @POST(Constant.URL.LOGOUT_REASON) -// Observable> logoutReason(@Field("token") String token, @Field("mobile") String mobile, -// @Field("reason") String reason,@Field("code") String code); -// -// @FormUrlEncoded -// @POST(Constant.URL.LOGOUT_STATUS) -// Observable> getlogoutStatus(@Field("token") String token, @Field("mobile") String mobile); + + @FormUrlEncoded + @POST(Constants.CLEAR_LOGIN_INFO) + Call> clearLoginInfo(@Field("token") String token); + + @FormUrlEncoded + @POST(Constants.CANCEL) + Call> cancel(@Field("token") String token); + + @FormUrlEncoded + @POST(Constants.DELETE_ZONE) + Call> deleteZone(@Field("id") String id); + + @GET(Constants.GET_MY_INFO) + Observable> getMyInfo(); + + @FormUrlEncoded + @POST(Constants.ED_USER_INFO) + Call> editUserInfo(@Field("nickname") String nickname, @Field("birthday") String birthday, @Field("sex") String sex, @Field("avatar") String avatar, @Field("images") String images, @Field("profile") String profile, @Field("tag_id") String tag_id); + + @FormUrlEncoded + @POST(Constants.ED_USER_BG) + Call> editUserBg(@Field("images") String images); + @GET(Constants.GET_USER_TAG_LIST) + Observable>> getUserTagList(); + + @FormUrlEncoded + @POST(Constants.GET_LIKE_LIST) + Observable>> getLikeList(@Field("id") String id); + + @FormUrlEncoded + @POST(Constants.GET_ALBUM_DETAIL) + Observable> getAlbumDetail(@Field("album_id") String albumId, @Field("pwd") String pwd, @Field("page") String page, @Field("page_limit") String page_limit); + + @FormUrlEncoded + @POST(Constants.POST_GZ) + Call> userGuanz(@Field("user_id") String userId,@Field("type")String type); + + @FormUrlEncoded + @POST(Constants.UP_ALBUM) + Call> upAddAlbum(@Field("album_id") String album_id, @Field("images") String images, @Field("content") String content); + + @FormUrlEncoded + @POST(Constants.MOVE_ALBUM) + Call> moveAlbum(@Field("id") String id,@Field("new_album_id")String new_album_id); + @FormUrlEncoded + @POST(Constants.DELETE_ALBUM_IMAGE) + Call> deleteAlbumImage(@Field("id") String id); + + @FormUrlEncoded + @POST(Constants.DELETE_ALBUM) + Call> deleteAlbum(@Field("album_id") String id); + + @FormUrlEncoded + @POST(Constants.LIKE_ALBUM) + Call> likeAlbum(@Field("album_id") String id); } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/BaseObserver.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/BaseObserver.java index 1f0d1d37..0bdfca04 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/BaseObserver.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/BaseObserver.java @@ -51,8 +51,13 @@ public abstract class BaseObserver implements Observer { ToastUtils.show("解析失败"); } else if (e instanceof APIException) { APIException apiException = (APIException) e; - if (apiException.getCode() == -1) { + if (apiException.getCode() == 301) { EventBus.getDefault().post(new LogOutEvent()); + try { + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException ex) { + throw new RuntimeException(ex); + } } if (showErrMsg && !TextUtils.isEmpty(apiException.getMessage())) { ToastUtils.show(apiException.getMessage()); @@ -64,7 +69,8 @@ public abstract class BaseObserver implements Observer { } } else if (e instanceof JsonSyntaxException) { ToastUtils.show("网络请求错误……"); - } else { + } + else { ToastUtils.show(e.getMessage()); // CrashReport.postCatchedException(e); //bugly收集错误信息 } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/RetrofitClient.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/RetrofitClient.java index d1355f1e..f0434213 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/http/RetrofitClient.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/http/RetrofitClient.java @@ -23,6 +23,9 @@ import com.qxcm.moduleutil.bean.RealNameBean; import com.qxcm.moduleutil.bean.RewardUserBean; import com.qxcm.moduleutil.bean.RoonGiftModel; import com.qxcm.moduleutil.bean.UserBean; +import com.qxcm.moduleutil.bean.UserInfo; +import com.qxcm.moduleutil.bean.UserTagBean; +import com.qxcm.moduleutil.utils.SpUtil; import com.qxcm.moduleutil.utils.SystemUtils; import com.qxcm.moduleutil.utils.logger.DataLogger; import com.qxcm.moduleutil.utils.logger.DataLoggingInterceptor; @@ -190,6 +193,8 @@ public class RetrofitClient { sApiServer.switchAccounts(loginId).compose(new DefaultTransformer<>()).subscribe(observer); } + + public void userUpdate(Map map, BaseObserver observer) { sApiServer.userUpdate(map).compose(new DefaultTransformer<>()).subscribe(observer); } @@ -221,39 +226,11 @@ public class RetrofitClient { sApiServer.getOfficialNotice(page,page_limit,type).compose(new DefaultTransformer<>()).subscribe(observer); } - public void getAlbumList(String page,String page_limit,BaseObserver> observer){ - sApiServer.getAlbumList(page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); + public void getAlbumList(String page,String page_limit,String userId,BaseObserver> observer){ + sApiServer.getAlbumList(page,page_limit,userId).compose(new DefaultTransformer<>()).subscribe(observer); } - public void createAlbum(String name,String image,BaseObserver observer) { - sApiServer.createAlbum(name,image).enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.code()==200){ - BaseModel string=response.body(); - if (string!=null){ - int code=string.getCode(); - if (code==1){ - observer.onNext(string.getMsg()); - }else if (code==301){ - try { - CommonAppContext.getInstance().clearLoginInfo(); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - com.blankj.utilcode.util.ToastUtils.showShort(string.getMsg()); - } - } - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); - } - }); - } public void getRewardList(String id, int page, int page_limit,BaseObserver > observer){ sApiServer.getRewardList(id,page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); @@ -272,36 +249,6 @@ public class RetrofitClient { sApiServer.topicList(page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); } - public void publishZone(String images, String content, String topic_id, String room_id,String ip,BaseObserver observer){ - - sApiServer.publishZone(images,content,topic_id,room_id,ip).enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.code()==200){ - BaseModel string=response.body(); - if (string!=null){ - int code=string.getCode(); - if (code==1){ - observer.onNext(string.getMsg()); - }else if (code==301){ - try { - CommonAppContext.getInstance().clearLoginInfo(); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - com.blankj.utilcode.util.ToastUtils.showShort(string.getMsg()); - } - } - - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); - } - }); - } public void getCategories(BaseObserver> observer){//动态顶部热门话题 sApiServer.getCategories().compose(new DefaultTransformer<>()).subscribe(observer); @@ -311,63 +258,46 @@ public class RetrofitClient { sApiServer.getCircleList(page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); } - public void likeZone(String zone_id,BaseObserver observer){ - sApiServer.likeZone(zone_id).enqueue(new Callback>() { - @Override - public void onResponse(Call> call, Response> response) { - if (response.code()==200){ - BaseModel string=response.body(); - if (string!=null){ - int code=string.getCode(); - if (code==1){ - observer.onNext(string.getMsg()); - }else if (code==301){ - try { - CommonAppContext.getInstance().clearLoginInfo(); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - com.blankj.utilcode.util.ToastUtils.showShort(string.getMsg()); - } - } + public void getCircleUserList(String user_id,String page,String page_limit,BaseObserver> observer){//用户主页动态列表 + sApiServer.getCircleUserList(user_id,page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); + } + public void topicId(String topic_id,BaseObserver> observer){//动态列表 + sApiServer.topicId(topic_id).compose(new DefaultTransformer<>()).subscribe(observer); + } + public void zoneDetail(String topic_id,BaseObserver observer){//动态列表 + sApiServer.zoneDetail(topic_id).compose(new DefaultTransformer<>()).subscribe(observer); + } - } - } - - @Override - public void onFailure(Call> call, Throwable t) { - com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); - } - }); + public void getUserHome(String user_id,BaseObserver observer){ + sApiServer.getUserHome(user_id).compose(new DefaultTransformer<>()).subscribe(observer); } public void getCommentList(String id, String page, String page_limit, BaseObserver observer){ sApiServer.getCommentList(id,page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); } - public void commentZone(String id, String content, String pid, String reply_to,BaseObserver observer){ - sApiServer.commentZone(id,content,pid,reply_to).enqueue(new Callback>() { + public void getMyInfo(BaseObserver observer){//点击我的获取数据 + sApiServer.getMyInfo().compose(new DefaultTransformer<>()).subscribe(observer); + } + + public void getUserTagList(BaseObserver> observer){ + sApiServer.getUserTagList().compose(new DefaultTransformer<>()).subscribe(observer); + } + + public void getLikeList(String id,BaseObserver> observer){ + sApiServer.getLikeList(id).compose(new DefaultTransformer<>()).subscribe(observer); + } + + public void getAlbumDetail(String albumId, String pwd,String page,String page_limit,BaseObserver observer){ + sApiServer.getAlbumDetail(albumId,pwd,page,page_limit).compose(new DefaultTransformer<>()).subscribe(observer); + } + + public void publishZone(String images, String content, String topic_id, String room_id,String ip,BaseObserver observer){ + + sApiServer.publishZone(images,content,topic_id,room_id,ip).enqueue(new Callback>() { @Override public void onResponse(Call> call, Response> response) { - if (response.code()==200){ - BaseModel string=response.body(); - if (string!=null){ - int code=string.getCode(); - if (code==1){ - observer.onNext(string.getMsg()); - }else if (code==301){ - try { - CommonAppContext.getInstance().clearLoginInfo(); - } catch (ClassNotFoundException e) { - throw new RuntimeException(e); - } - com.blankj.utilcode.util.ToastUtils.showShort(string.getMsg()); - } - } - - }else { - ToastUtils.showShort("评论失败"); - } + onNextRetu(response,observer); } @Override @@ -377,4 +307,288 @@ public class RetrofitClient { }); } + + public void likeZone(String zone_id,BaseObserver observer){ + sApiServer.likeZone(zone_id).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void deleteComment(String id,BaseObserver observer){ + sApiServer.deleteComment(id).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + + } + + public void deleteZone(String id,BaseObserver observer){ + sApiServer.deleteZone(id).enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void commentZone(String id, String content, String pid, String reply_to,BaseObserver observer){ + sApiServer.commentZone(id,content,pid,reply_to).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void clearLoginInfo(BaseObserver observer){ + sApiServer.clearLoginInfo(SpUtil.getToken()).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void cancel(BaseObserver observer){ + sApiServer.cancel(SpUtil.getToken()).enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void getPostData(String new_password, String mobile, String code, String userId,BaseObserver observer){ + sApiServer.getPostData(new_password,mobile,code,userId).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + if (t.toString().contains("登录失效")){ + try { + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + } + } + }); + } + + public void forgotPassword(String new_password,String mobile, String sms_code, BaseObserver observer){ + sApiServer.forgotPassword(new_password,mobile,sms_code).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + public void createAlbum(String name,String pwd,String image,BaseObserver observer) { + sApiServer.createAlbum(name,pwd,image).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void editAlbum(String album_id,String name,String pwd,String image,BaseObserver observer){ + sApiServer.editAlbum(album_id,name,pwd,image).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void editUserInfo(int type,String nickname, String birthday, String sex, String avatar, String images, String profile, String tag_id,BaseObserver observer){ + if (type == 1) { + sApiServer.editUserInfo(nickname, birthday, sex, avatar, images, profile, tag_id).enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } else{ + sApiServer.editUserBg(images).enqueue(new Callback>() { + + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + } + + public void userGuanz(String user_id,String type,BaseObserver observer){ + sApiServer.userGuanz(user_id,type).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void upAddAlbum(String album_id,String images,String content,BaseObserver observer){ + sApiServer.upAddAlbum(album_id,images,content).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void moveAlbum(String id,String new_album_id,BaseObserver observer){ + sApiServer.moveAlbum(id,new_album_id).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void deleteAlbum(String id,int type,BaseObserver observer){ + if (type == 1) { + sApiServer.deleteAlbumImage(id).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response, observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + }else { + sApiServer.deleteAlbum(id).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response, observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + } + + public void likeAlbum(String albumId,BaseObserver observer){ + sApiServer.likeAlbum(albumId).enqueue(new Callback>() { + @Override + public void onResponse(Call> call, Response> response) { + onNextRetu(response,observer); + } + + @Override + public void onFailure(Call> call, Throwable t) { + com.blankj.utilcode.util.ToastUtils.showShort(t.toString()); + } + }); + } + + public void onNextRetu(Response> response,BaseObserver observer){ + if (response.code() == 200) { + BaseModel string = response.body(); + if (string != null) { + int code = string.getCode(); + if (code == 1) { + observer.onNext(string.getMsg()); + } else if (code == 301) { + try { + CommonAppContext.getInstance().clearLoginInfo(); + } catch (ClassNotFoundException e) { + throw new RuntimeException(e); + } + com.blankj.utilcode.util.ToastUtils.showShort(string.getMsg()); + } + } + + } + } + } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentContacts.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentContacts.java index 3005d758..62ddfa0e 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentContacts.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentContacts.java @@ -4,17 +4,18 @@ import android.app.Activity; import com.qxcm.moduleutil.activity.IPresenter; import com.qxcm.moduleutil.activity.IView; +import com.qxcm.moduleutil.bean.CircleListBean; import com.qxcm.moduleutil.bean.CommentBean; +import java.util.List; + public class CommentContacts { public interface View extends IView { - void getCommentList(CommentBean commentBean); - - void commentZone(); + void getCommentList(List likeLists); } public interface IIndexPre extends IPresenter { - void getCommentList(String id,String page,String page_limit); - void commentZone(String id,String content,String pid,String reply_to); + void getCommentList(String id); + } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentPresenter.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentPresenter.java index 6ea90047..5ea22f40 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentPresenter.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/presenter/CommentPresenter.java @@ -2,9 +2,12 @@ package com.qxcm.moduleutil.presenter; import android.content.Context; +import com.qxcm.moduleutil.bean.CircleListBean; import com.qxcm.moduleutil.bean.CommentBean; import com.qxcm.moduleutil.http.BaseObserver; +import java.util.List; + import io.reactivex.disposables.Disposable; public class CommentPresenter extends BasePresenter implements CommentContacts.IIndexPre{ @@ -12,34 +15,18 @@ public class CommentPresenter extends BasePresenter implem super(view, context); } - @Override - public void getCommentList(String id, String page, String page_limit) { - api.getCommentList(id, page, page_limit, new BaseObserver() { + @Override + public void getCommentList(String id) { + api.getLikeList(id, new BaseObserver>() { @Override public void onSubscribe(Disposable d) { addDisposable(d); } @Override - public void onNext(CommentBean commentBean) { - MvpRef.get().getCommentList(commentBean); - } - }); - } - - @Override - public void commentZone(String id, String content, String pid, String reply_to) { - api.commentZone(id, content, pid, reply_to, new BaseObserver() { - - @Override - public void onSubscribe(Disposable d) { - addDisposable(d); - } - - @Override - public void onNext(String s) { - MvpRef.get().commentZone(); + public void onNext(List likeLists) { + MvpRef.get().getCommentList(likeLists); } }); } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/ARouteConstants.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/ARouteConstants.java new file mode 100644 index 00000000..06b43731 --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/ARouteConstants.java @@ -0,0 +1,16 @@ +package com.qxcm.moduleutil.utils; + +public class ARouteConstants { + public static final String DYNAMIC_DETAIL = "/moduleCircle/DynamicDetailActivity"; + public static final String CIRCLE_LIST = "/moduleCircle/DynamicListActivity"; + + public static final String USER_HOME_PAGE = "/modulevocal/UserHomepageActivity"; + + public static final String USER_ALBUM_DETAIL = "/modulevocal/AlbumDetailActivity"; + public static final String CREATE_ALBUM = "/modulevocal/CreateAlbumActivity"; + + + public static final String FRAGMENT_CIRCLE = "CirleListFragment"; + public static final String FRAGMENT_GIFT_WALL = "UserGiftWallFragment"; + public static final String FRAGMENT_ALBUM = "MyAlbumFragment"; +} diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SPConstants.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SPConstants.java index 859a9436..c651e811 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SPConstants.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SPConstants.java @@ -11,7 +11,7 @@ public class SPConstants { public static final String TOKEN = "token"; public static final String SEARCH_HISTORY = "SearchHistory"; public static final String USER_ID = "UserId"; - public static final String USER_INFO = "userInfo"; + public static final String USER_BEAN = "userBean"; public static final String EMQTT_CLIENT_ID = "emqttClientId"; public static final String FIRST_ENTER_ROOM = "firstEnterRoom"; public static final String PLAY_MODE = "PLAY_MODE"; //播放模式 0 顺序循序播放 1随机播放 2单曲循环 @@ -28,4 +28,6 @@ public class SPConstants { public static final String CABIN="cabin";//小黑屋 public static final String REAL_NAME = "realName";//是否实名认证 + + public static final String USER_INFO = "userInfo"; } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SpUtil.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SpUtil.java index 986ccd12..d2029ea4 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SpUtil.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/SpUtil.java @@ -9,6 +9,7 @@ import com.alibaba.fastjson.JSON; import com.blankj.utilcode.util.SPUtils; import com.qxcm.moduleutil.base.CommonAppContext; import com.qxcm.moduleutil.bean.UserBean; +import com.qxcm.moduleutil.bean.UserInfo; import java.util.Map; @@ -241,10 +242,14 @@ public class SpUtil { public static String getMyRoomId() { return SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getString("MyRoomId"); } - public static void saveUserInfo(UserBean userBean) { - String s = JSON.toJSONString(userBean); + public static void saveUserInfo(UserInfo userInfo) { + String s = JSON.toJSONString(userInfo); SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put(SPConstants.USER_INFO, s, true); } + public static void saveUserBean(UserBean userBean) { + String s = JSON.toJSONString(userBean); + SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put(SPConstants.USER_BEAN, s, true); + } public static void saveMyRoomId(String roomId) { SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put("MyRoomId", roomId, true); } @@ -262,36 +267,6 @@ public class SpUtil { SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put(SPConstants.TOKEN, token, true); } -// public static void saveCabin(CabinEvent cabinEvent) { -// String s = JSON.toJSONString(cabinEvent); -// SPUtils.getInstance(SPConstants.CABIN).put("cabin", s, true); -// } -// -// public static CabinEvent getCabin() { -// String s = SPUtils.getInstance(SPConstants.CABIN).getString("cabin"); -// if (TextUtils.isEmpty(s)) { -// return null; -// } -// CabinEvent cabinEvent = JSON.parseObject(s, CabinEvent.class); -// return cabinEvent; -// } -// -// public static void saveUserInfo(UserBean userBean) { -// String s = JSON.toJSONString(userBean); -// SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put(SPConstants.USER_INFO, s, true); -// } -// -// public static UserBean getUserInfo() { -// String s = SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getString(SPConstants.USER_INFO); -// if (TextUtils.isEmpty(s)) { -// return new UserBean(); -// } -// UserBean userBean = JSON.parseObject(s, UserBean.class); -// if (userBean == null) { -// return new UserBean(); -// } -// return userBean; -// } public static void saveTzbl(String roomId, float bl) { SPUtils.getInstance(SPConstants.PREFERENCE_NAME).put(getUserId() + "-" + roomId + "_Tzbl", bl, true); @@ -461,8 +436,8 @@ public class SpUtil { public static boolean getRealName(){ return SPUtils.getInstance(SPConstants.REAL_NAME).getBoolean("realName", false); } - public static UserBean getUserInfo() { - String s = SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getString(SPConstants.USER_INFO); + public static UserBean getUserBean() { + String s = SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getString(SPConstants.USER_BEAN); if (TextUtils.isEmpty(s)) { return new UserBean(); } @@ -472,6 +447,17 @@ public class SpUtil { } return userBean; } + public static UserInfo getUserInfo() { + String s = SPUtils.getInstance(SPConstants.PREFERENCE_NAME).getString(SPConstants.USER_INFO); + if (TextUtils.isEmpty(s)) { + return new UserInfo(); + } + UserInfo userInfo = JSON.parseObject(s, UserInfo.class); + if (userInfo == null) { + return new UserInfo(); + } + return userInfo; + } /** * 是否同意协议 * diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/wx/WeChatShareUtils.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/wx/WeChatShareUtils.java new file mode 100644 index 00000000..a52ae71f --- /dev/null +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/utils/wx/WeChatShareUtils.java @@ -0,0 +1,195 @@ +package com.qxcm.moduleutil.utils.wx; + +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.Canvas; +import android.graphics.Rect; + +import com.qxcm.moduleutil.base.CommonAppContext; +import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; +import com.tencent.mm.opensdk.modelmsg.WXImageObject; +import com.tencent.mm.opensdk.modelmsg.WXMediaMessage; +import com.tencent.mm.opensdk.modelmsg.WXMiniProgramObject; +import com.tencent.mm.opensdk.modelmsg.WXTextObject; +import com.tencent.mm.opensdk.modelmsg.WXWebpageObject; +import com.tencent.mm.opensdk.openapi.IWXAPI; +import com.tencent.mm.opensdk.openapi.WXAPIFactory; + +import java.io.ByteArrayOutputStream; + +// todo 微信分享工具类 +public class WeChatShareUtils { + // private static final int TIMELINE_SUPPORTED_VERSION = 0x21020001; // 微信4.2以上支持 + private static final int TIMELINE_SUPPORTED_VERSION = 0x27000D00; // 判断微信版本是否为7.0.13及以上 + private static final String id = "xxxxxx"; //小程序原始id + private static final String pageUrl = "xxxxxx"; //兼容低版本的网页链接 + + + //IWXAPI是第三方app和微信通信的openapi接口 + private IWXAPI api; + private Context context; + public static WeChatShareUtils weChatShareUtils; + + public static WeChatShareUtils getInstance(Context context){ + if(weChatShareUtils ==null){ + weChatShareUtils = new WeChatShareUtils(); + } + if(weChatShareUtils.api !=null){ + weChatShareUtils.api.unregisterApp();; + } + weChatShareUtils.context = context; + weChatShareUtils.regToWx(); + return weChatShareUtils; + } + + // todo 注册应用id到微信 + private void regToWx(){ + //通过WXAPIFactory工厂,获取IWXAPI的实例 + api = WXAPIFactory.createWXAPI(context, CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId(),true); + //将应用的appId注册到微信 + api.registerApp(CommonAppContext.getInstance().getCurrentEnvironment().getWxAppId()); + } + + /** + *todo 分享文字到朋友圈或者好友 + * @param text 文本内容 + * @param scene 分享方式:好友还是朋友圈 + * @return + */ + public boolean shareText(String text,int scene){ + //初始化一个WXTextObject对象,填写分享的文本对象 + WXTextObject textObject = new WXTextObject(); + textObject.text = text; + return share(textObject,text,scene); + } + + /** + * todo 分享图片到朋友圈或者好友 + * @param bmp 图片的Bitmap对象 + * @param scene 分享方式:好友 WXSceneSession 还是朋友圈 WXSceneTimeline,收藏 WXSceneFavorite + * @return + */ + public boolean sharePic(Bitmap bmp, int scene){ + //初始化一个WXImageObject对象 + WXImageObject imageObject = new WXImageObject(); + //设置缩略图 + Bitmap thump = Bitmap.createScaledBitmap(bmp,300,300,true); + bmp.recycle(); + return share(imageObject,thump,scene); + } + + /** + * todo 分享网页到朋友圈或者好友,视频和音乐的分享和网页大同小异,只是创建的对象不同。 + * @param url 网页的url + * @param title 显示分享网页的标题 + * @param thumb 图片的缩略图 + * @param description 对网页的描述 + * @param scene 分享方式:好友还是朋友圈 + * @return + */ + public boolean shareUrl(String url, String title, Bitmap thumb, String description, int scene) { + //初试话一个WXWebpageObject对象,填写url + WXWebpageObject webPage = new WXWebpageObject(); + webPage.webpageUrl = url; + //设置缩略图 + Bitmap tmb = Bitmap.createScaledBitmap(thumb,150,150,true); + thumb.recycle(); + return share(webPage, title, tmb, description, scene); + } + + /** + * todo 分享小程序类型 + * @param url + * @param title + * @param thumb + * @param description + * @param scene 只支持分享给微信好友 + * @return + */ + public boolean shareMiniProgram(String url, String title, Bitmap thumb, String description, int scene) { + //初试话一个WXMiniProgramObject对象,填写url + WXMiniProgramObject wxMiniProgramObject = new WXMiniProgramObject(); + wxMiniProgramObject.webpageUrl = pageUrl; //兼容低版本的网页链接 + wxMiniProgramObject.miniprogramType = WXMiniProgramObject.MINIPROGRAM_TYPE_TEST; //小程序类型,测试版 + wxMiniProgramObject.userName = id; //小程序原始id + wxMiniProgramObject.path = url; //小程序的path + + //设置缩略图 + Bitmap tmb = Bitmap.createScaledBitmap(thumb,300,300,true); + thumb.recycle(); + return share(wxMiniProgramObject, title, tmb, description, scene); + } + + + private boolean share(WXMediaMessage.IMediaObject mediaObject, Bitmap thumb, int scene) { + return share(mediaObject, null, thumb, null, scene); + } + + private boolean share(WXMediaMessage.IMediaObject mediaObject, String description, int scene) { + return share(mediaObject, null, null, description, scene); + } + + private boolean share(WXMediaMessage.IMediaObject mediaObject,String title,Bitmap thumb,String description, int scene){ + WXMediaMessage msg = new WXMediaMessage(mediaObject); + if(title !=null){ + msg.title = title; + } + if(description !=null){ + msg.description = description; + } + if(thumb !=null){ + msg.thumbData = bmpToByteArray(thumb, true); + } + //构造一个Req + SendMessageToWX.Req req = new SendMessageToWX.Req(); + req.transaction = String.valueOf(System.currentTimeMillis()); + req.message = msg; + req.scene = scene; + return api.sendReq(req); + } + + //判断是否支持转发到朋友圈 + //微信4.2以上支持,如果需要检查微信版本支持API的情况, 可调用IWXAPI的getWXAppSupportAPI方法,0x21020001及以上支持发送朋友圈 + //微信版本:当且仅当通过 IWXAPI.getWXAppSupportAPI() 接口获取到的值 >= 0x27000D00(7.0.13以上),才能支持FileProvider的方式进行分享。 + public boolean isSupportWX(){ + int wxSdkVersion = api.getWXAppSupportAPI(); + return wxSdkVersion >= TIMELINE_SUPPORTED_VERSION; + } + + // todo Bitmap转换为 byte数组 + private byte[] bmpToByteArray(final Bitmap bmp,final boolean needRecycle){ + int i; + int j; + if (bmp.getHeight() > bmp.getWidth()) { + i = bmp.getWidth(); + j = bmp.getWidth(); + } else { + i = bmp.getHeight(); + j = bmp.getHeight(); + } + + Bitmap localBitmap = Bitmap.createBitmap(i, j, Bitmap.Config.RGB_565); + Canvas localCanvas = new Canvas(localBitmap); + + while ( true) { + localCanvas.drawBitmap(bmp, new Rect(0, 0, i, j), new Rect(0, 0,i, j), null); + if (needRecycle) + bmp.recycle(); + ByteArrayOutputStream localByteArrayOutputStream = new ByteArrayOutputStream(); + localBitmap.compress(Bitmap.CompressFormat.JPEG, 100, + localByteArrayOutputStream); + localBitmap.recycle(); + byte[] arrayOfByte = localByteArrayOutputStream.toByteArray(); + try { + localByteArrayOutputStream.close(); + return arrayOfByte; + } catch (Exception e) { + // F.out(e); + } + i = bmp.getHeight(); + j = bmp.getHeight(); + } + } +} + + diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/Constants.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/Constants.java index 58621d32..3ee0957c 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/Constants.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/Constants.java @@ -367,6 +367,7 @@ public class Constants { public static final String GET_OFFICIAL_NOTICE = "/api/UserMessage/get_user_message_list";//获取消息信息 public static final String GET_ALBUM_LIST = "/api/User/get_album_list";//相册列表 public static final String CREATE_ALBUM = "/api/User/create_album";//创建相册 + public static final String EDIT_ALBUM = "/api/User/edit_album";//编辑相册 public static final String GET_REWARD_LIST = "/api/UserZone/reward_list";//动态打赏列表 public static final String GET_GIFT_LABEL = "/api/Gift/get_gift_label";//礼物标签 public static final String GIFT_LIST = "/api/Gift/get_gift_list";//礼物标签 @@ -377,5 +378,28 @@ public class Constants { public static final String LIKE_ZONE = "/api/UserZone/like_zone";//语圈列表 public static final String GET_COMMENT_LIST = "/api/UserZone/get_comment_list";//评论列表 public static final String COMMENT_ZONE = "/api/UserZone/comment_zone";//评论列表 + public static final String TOPIC_ID = "/api/UserZone/get_zone_topic_list";//热门话题列表 + public static final String ZONE_DETAIL = "/api/UserZone/zone_detail";//语圈详情 + public static final String DELETE_COMMENT = "/api/UserZone/delete_zone_comment";//删除子评论 + public static final String DELETE_ZONE = "/api/UserZone/delete_zone";//删除动态 + public static final String FORGOT_PASSWORD = "/api/Login/forgot_password";//忘记密码 + public static final String CLEAR_LOGIN_INFO = "/api/Login/logout";//忘记密码 + public static final String CANCEL = "/api/Login/cancel";//注销账号 + public static final String GET_MY_INFO = "/api/User/get_user_info";//点击我的获取个人数据 + public static final String GET_USER_HOME = "/api/User/get_user_home";//点击获取个人数据 + + public static final String ED_USER_INFO = "/api/User/edit_user_info";//编辑信息 + public static final String ED_USER_BG = "/api/User/edit_user_bg";//编辑背景图片 + public static final String GET_USER_TAG_LIST = "/api/User/get_user_tag_list";//获取用户标签 + public static final String GET_USER_HOME_ZONE = "/api/User/user_home_zone";//获取用户动态 + public static final String GET_LIKE_LIST = "/api/UserZone/like_list";//获取点赞列表 + public static final String POST_GZ = "/api/User/follow";//关注、回关、取关 + public static final String GET_ALBUM_DETAIL = "/api/User/get_album_detail";//相册详情 + public static final String UP_ALBUM = "/api/User/add_album_content";//添加相册图片 + public static final String MOVE_ALBUM = "/api/User/move_album_images";//移动相册图片 + public static final String DELETE_ALBUM_IMAGE = "/api/User/delete_album_images";//删除图片 + public static final String DELETE_ALBUM = "/api/User/delete_album";//删除相册 + public static final String LIKE_ALBUM = "/api/User/like_album";//相册点赞 + } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/CommentDialogFragment.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/CommentDialogFragment.java index 8d34c85d..74dc6b1b 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/CommentDialogFragment.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/CommentDialogFragment.java @@ -4,6 +4,7 @@ import android.os.Bundle; import android.view.Gravity; import android.view.View; import android.view.Window; +import android.view.WindowManager; import androidx.annotation.NonNull; import androidx.fragment.app.FragmentManager; @@ -12,7 +13,9 @@ import androidx.recyclerview.widget.LinearLayoutManager; import com.blankj.utilcode.util.ToastUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.adapter.CommentAdapter; +import com.qxcm.moduleutil.adapter.LikeListAdapter; import com.qxcm.moduleutil.base.BaseMvpDialogFragment; +import com.qxcm.moduleutil.bean.CircleListBean; import com.qxcm.moduleutil.bean.CommentBean; import com.qxcm.moduleutil.databinding.FragmentCommentDialogBinding; import com.qxcm.moduleutil.presenter.CommentContacts; @@ -21,15 +24,17 @@ import com.scwang.smartrefresh.layout.api.RefreshLayout; import com.scwang.smartrefresh.layout.listener.OnRefreshLoadMoreListener; import java.util.ArrayList; +import java.util.List; /** *@author qx *@data 2025/5/30 - *@description: 评论弹框 + *@description: 点赞列表弹窗 */ -public class CommentDialogFragment extends BaseMvpDialogFragment implements CommentContacts.View { +public class CommentDialogFragment extends BaseMvpDialogFragment implements + CommentContacts.View { private int page; - private CommentAdapter commentAdapter; + private LikeListAdapter likeListAdapter; @Override protected CommentPresenter bindPresenter() { return new CommentPresenter(this, getActivity()); @@ -43,9 +48,22 @@ public class CommentDialogFragment extends BaseMvpDialogFragment()); - mBinding.rvComment.setAdapter(commentAdapter); + likeListAdapter = new LikeListAdapter(); + mBinding.rvComment.setAdapter(likeListAdapter); } - private void onClick(View view) { - if (view.getId()==R.id.tv_send){ - if (mBinding.etInput.getText().toString().isEmpty()){ - ToastUtils.showShort("请输入评论内容"); - return; - } - MvpPre.commentZone(getArguments().getString("id"), mBinding.etInput.getText().toString(), "0", ""); - } - } + @Override protected void initDialogStyle(Window window) { @@ -91,17 +100,13 @@ public class CommentDialogFragment extends BaseMvpDialogFragment likeLists) { + mBinding.tvNum.setText("已有"+likeLists.size()+"人点赞"); + likeListAdapter.setNewData(likeLists); } } diff --git a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/ShareDialog.java b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/ShareDialog.java index fb2fb572..19722ccd 100644 --- a/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/ShareDialog.java +++ b/moduleUtil/src/main/java/com/qxcm/moduleutil/widget/dialog/ShareDialog.java @@ -1,7 +1,12 @@ package com.qxcm.moduleutil.widget.dialog; +import static android.view.View.GONE; +import static com.qxcm.moduleutil.utils.wx.WeChatShareUtils.weChatShareUtils; + import android.app.Activity; import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; import android.util.Log; import android.view.Gravity; import android.view.View; @@ -10,22 +15,46 @@ import android.view.WindowManager; import androidx.annotation.NonNull; +import com.blankj.utilcode.util.ImageUtils; +import com.blankj.utilcode.util.ToastUtils; import com.qxcm.moduleutil.R; import com.qxcm.moduleutil.base.CommonAppContext; import com.qxcm.moduleutil.databinding.RoomDialogShareBinding; import com.qxcm.moduleutil.utils.BaseBottomSheetDialog; +import com.qxcm.moduleutil.utils.wx.WeChatShareUtils; +import com.tencent.mm.opensdk.modelmsg.SendMessageToWX; /** * 房间分享弹窗 */ public class ShareDialog extends BaseBottomSheetDialog { + public WeChatShareUtils weChatShareUtils; + private Context mContext; + private String mcontent; + private String murl; + private String ids; + private int types; + public interface OnShareDataListener { + void onShareDataLoaded(String id); + } + + private OnShareDataListener listener; + + public void setOnShareDataListener(OnShareDataListener listener) { + this.listener = listener; + } private static final String TAG = "ShareDialog"; - public ShareDialog(@NonNull Context context) { + public ShareDialog(Context context, String content, String url, String id, int type) { super(context); + this.mcontent = content; + this.murl = url; + this.mContext = getContext(); + this.ids = id; + this.types = type; Log.i(TAG, "(Start)启动了===========================ShareDialog"); } @@ -43,28 +72,104 @@ public class ShareDialog extends BaseBottomSheetDialog { window.addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); window.setGravity(Gravity.BOTTOM); mBinding.tvQq.setOnClickListener(this::onClick); - mBinding.tvWeixin.setOnClickListener(this::onClick); + mBinding.tvWx.setOnClickListener(this::onClick); + mBinding.tvWxq.setOnClickListener(this::onClick); + mBinding.tvQqq.setOnClickListener(this::onClick); mBinding.tvClean.setOnClickListener(this::onClick); + mBinding.tvCopy.setOnClickListener(this::onClick); + mBinding.tvJub.setOnClickListener(this::onClick); + mBinding.shanc.setOnClickListener(this::onClick); + + if (types == 1) {//1是分享动态 + + } else if (types == 2) {//分享相册 + mBinding.tvQq.setVisibility(GONE); + mBinding.tvQqq.setVisibility(GONE); + mBinding.rl.setVisibility(GONE); + } } @Override public void initData() { - + weChatShareUtils = WeChatShareUtils.getInstance(getContext()); } public void onClick(View view) { int id = view.getId(); - String appName = CommonAppContext.getInstance().getResources().getString(R.string.app_name); +// String appName = CommonAppContext.getInstance().getResources().getString(R.string.app_name); + + if (R.id.tv_qq == id) { // AppLogUtil.reportAppLog(AppLogEvent.D0108, "share_way", "QQ分享"); // ShareUtil.shareWeb((Activity) view.getContext(), URLConstants.SHARE, String.format("我在%s玩呢,大家都在玩,快来展示您的精彩", appName) // , appName, "", R.mipmap.ic_launcher_new, SHARE_MEDIA.QQ); - } else if (R.id.tv_weixin == id) { + } else if (R.id.tv_wx == id) { // AppLogUtil.reportAppLog(AppLogEvent.D0108, "share_way", "微信分享"); // ShareUtil.shareWeb((Activity) view.getContext(), URLConstants.SHARE, String.format("我在%s玩呢,大家都在玩,快来展示您的精彩", appName) // , appName, "", R.mipmap.ic_launcher_new, SHARE_MEDIA.WEIXIN); + fun_handleShare(SendMessageToWX.Req.WXSceneSession); + } else if (R.id.tv_wxq == id) { + fun_handleShare1(SendMessageToWX.Req.WXSceneTimeline); + } else if (R.id.tv_qqq == id) { + + } else if (R.id.shanc == id) { + if (listener != null) { + listener.onShareDataLoaded(ids); + } + } else if (R.id.tv_jub == id) { + + } else if (R.id.tv_copy == id) { + } + dismiss(); } + // todo fun_handleShare 分享小程序类型 (只支持分享给微信好友) + private void fun_handleShare(int scene) { + if (weChatShareUtils.isSupportWX()) { + String appName = mContext.getPackageManager().getApplicationLabel(mContext.getApplicationInfo()).toString(); + if (types == 2){ + com.qxcm.moduleutil.utils.ImageUtils.loadBitmap(murl, new com.qxcm.moduleutil.utils.ImageUtils.onLoadBitmap() { + @Override + public void onReady(Bitmap resource) { + weChatShareUtils.sharePic(resource, scene); + } + }); + }else { + String shortContent = mcontent.length() > 20 ? mcontent.substring(0, 20) : mcontent; + String desc = shortContent; + String title = appName; + String url = murl; + Bitmap bitmap = ImageUtils.drawable2Bitmap(mContext.getResources().getDrawable(R.mipmap.ic_launcher)); + weChatShareUtils.shareUrl(url, title, bitmap, desc, scene); + } + } else { + ToastUtils.showShort("手机上微信版本不支持分享功能"); + } + } + + private void fun_handleShare1(int scene) { + if (weChatShareUtils.isSupportWX()) { + String appName = mContext.getPackageManager().getApplicationLabel(mContext.getApplicationInfo()).toString(); + if (types == 2) { + com.qxcm.moduleutil.utils.ImageUtils.loadBitmap(murl, new com.qxcm.moduleutil.utils.ImageUtils.onLoadBitmap() { + @Override + public void onReady(Bitmap resource) { + weChatShareUtils.sharePic(resource, scene); + } + }); + }else { + String shortContent = mcontent.length() > 20 ? mcontent.substring(0, 20) : mcontent; + String desc = shortContent; + String title = appName; + String url = murl; +// Bitmap bitmap = BitmapFactory.decodeResource(mContext.getResources(),R.mipmap.ic_launcher); + Bitmap bitmap = ImageUtils.drawable2Bitmap(mContext.getResources().getDrawable(R.mipmap.ic_launcher)); + weChatShareUtils.shareUrl(url, title, bitmap, desc, scene); + } + } else { + ToastUtils.showShort("手机上微信版本不支持分享功能"); + } + } } diff --git a/moduleUtil/src/main/res/anim/slide_in_bottom.xml b/moduleUtil/src/main/res/anim/slide_in_bottom.xml new file mode 100644 index 00000000..f5d47dfe --- /dev/null +++ b/moduleUtil/src/main/res/anim/slide_in_bottom.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/anim/slide_out_bottom.xml b/moduleUtil/src/main/res/anim/slide_out_bottom.xml new file mode 100644 index 00000000..65d27508 --- /dev/null +++ b/moduleUtil/src/main/res/anim/slide_out_bottom.xml @@ -0,0 +1,7 @@ + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/drawable/bg_bottom_sheet.xml b/moduleUtil/src/main/res/drawable/bg_bottom_sheet.xml new file mode 100644 index 00000000..cd2e9ef6 --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_bottom_sheet.xml @@ -0,0 +1,6 @@ + + + + diff --git a/moduleUtil/src/main/res/drawable/bg_bottom_sheet_item.xml b/moduleUtil/src/main/res/drawable/bg_bottom_sheet_item.xml new file mode 100644 index 00000000..24b971a4 --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_bottom_sheet_item.xml @@ -0,0 +1,9 @@ + + + + + + + + + diff --git a/moduleUtil/src/main/res/drawable/bg_r12_f9f9f9.xml b/moduleUtil/src/main/res/drawable/bg_r12_f9f9f9.xml new file mode 100644 index 00000000..386ce90c --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_r12_f9f9f9.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/drawable/bg_r48_bbffeb.xml b/moduleUtil/src/main/res/drawable/bg_r48_bbffeb.xml new file mode 100644 index 00000000..96d5c6a6 --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_r48_bbffeb.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/drawable/bg_r53_33333.xml b/moduleUtil/src/main/res/drawable/bg_r53_33333.xml new file mode 100644 index 00000000..53bf4e36 --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_r53_33333.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/drawable/bg_r53_f3f3f3.xml b/moduleUtil/src/main/res/drawable/bg_r53_f3f3f3.xml new file mode 100644 index 00000000..980dd824 --- /dev/null +++ b/moduleUtil/src/main/res/drawable/bg_r53_f3f3f3.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/drawable/selector_custom_checkbox.xml b/moduleUtil/src/main/res/drawable/selector_custom_checkbox.xml new file mode 100644 index 00000000..64d0e88b --- /dev/null +++ b/moduleUtil/src/main/res/drawable/selector_custom_checkbox.xml @@ -0,0 +1,8 @@ + + + + + + + diff --git a/moduleUtil/src/main/res/layout/activity_web_view.xml b/moduleUtil/src/main/res/layout/activity_web_view.xml new file mode 100644 index 00000000..170b46a1 --- /dev/null +++ b/moduleUtil/src/main/res/layout/activity_web_view.xml @@ -0,0 +1,29 @@ + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/moduleUtil/src/main/res/layout/bottom_sheet_recyclerview.xml b/moduleUtil/src/main/res/layout/bottom_sheet_recyclerview.xml new file mode 100644 index 00000000..40a44974 --- /dev/null +++ b/moduleUtil/src/main/res/layout/bottom_sheet_recyclerview.xml @@ -0,0 +1,56 @@ + + + + + +