├── app ├── consumer-rules.pro ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── mipmap-xhdpi │ │ │ ├── icon.png │ │ │ └── icon_round.png │ │ ├── mipmap-xxhdpi │ │ │ ├── icon.png │ │ │ └── icon_round.png │ │ ├── drawable-xxhdpi │ │ │ ├── logo.png │ │ │ ├── img_default.jpg │ │ │ ├── img_match_bg.jpg │ │ │ ├── ic_alipay_logo.png │ │ │ └── img_default_avatar.png │ │ ├── mipmap-xxxhdpi │ │ │ ├── icon.png │ │ │ └── icon_round.png │ │ ├── drawable │ │ │ ├── shape_input_sign.xml │ │ │ ├── shape_info_top_mask.xml │ │ │ ├── shape_home_icon_bg.xml │ │ │ ├── shape_launch_splash.xml │ │ │ ├── shape_rectangle_top_radius_bg.xml │ │ │ ├── shape_rectangle_bottom_radius_bg.xml │ │ │ ├── shape_applet_item_mask_bg.xml │ │ │ ├── shape_tab_indicator.xml │ │ │ ├── ic_explore.xml │ │ │ ├── ic_edit.xml │ │ │ ├── ic_home.xml │ │ │ ├── ic_chat.xml │ │ │ └── ic_me.xml │ │ ├── values │ │ │ ├── configs.xml │ │ │ ├── themes.xml │ │ │ ├── colors.xml │ │ │ └── dimens.xml │ │ ├── layout │ │ │ ├── activity_ads.xml │ │ │ ├── activity_reward_video.xml │ │ │ ├── widget_unread_layout.xml │ │ │ └── item_publish_category_spinner.xml │ │ ├── values-night │ │ │ └── colors.xml │ │ └── menu │ │ │ └── main_nav_menu.xml │ │ ├── assets │ │ └── data │ │ │ └── dcloud_control.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── app │ │ └── template │ │ ├── app │ │ └── CoroutinesDispatcherProvider.kt │ │ ├── report │ │ └── ReportConstants.kt │ │ ├── ui │ │ ├── ads │ │ │ └── ADSActivity.kt │ │ └── trade │ │ │ ├── VipBannerAdapter.kt │ │ │ └── GoldDescActivity.kt │ │ ├── router │ │ └── JSONServiceImpl.kt │ │ └── common │ │ └── Constants.kt └── proguard-rules.pro ├── vmads ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ ├── values │ │ │ │ └── strings.xml │ │ │ ├── xml │ │ │ │ └── anythink_bk_sigmob_file_path.xml │ │ │ └── layout │ │ │ │ └── ads_item_delegate.xml │ │ ├── java │ │ │ └── com │ │ │ │ └── vmloft │ │ │ │ └── develop │ │ │ │ └── library │ │ │ │ └── ads │ │ │ │ ├── ADSItem.kt │ │ │ │ └── ADSItemDelegate.kt │ │ └── AndroidManifest.xml │ └── googlePlay │ │ └── AndroidManifest.xml └── proguard-rules.pro ├── vmbase ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── integer.xml │ │ │ └── strings.xml │ │ ├── color │ │ │ ├── selector_bottom_nav.xml │ │ │ ├── selector_text_accent.xml │ │ │ └── selector_text_primary.xml │ │ ├── drawable │ │ │ ├── shape_circle_common_bg.xml │ │ │ ├── ic_switch_selector.xml │ │ │ ├── shape_fillet_tips_bg.xml │ │ │ ├── shape_card_common_bg.xml │ │ │ ├── shape_input_fillet_bg.xml │ │ │ ├── shape_rectangle_input_bg.xml │ │ │ ├── shape_fillet_common_bg.xml │ │ │ ├── shape_card_common_gray_bg.xml │ │ │ ├── shape_card_common_translucent_bg.xml │ │ │ ├── shape_fillet_common_border.xml │ │ │ ├── ic_arrow_next.xml │ │ │ ├── selector_fill_common_bg.xml │ │ │ ├── ic_switch_close.xml │ │ │ ├── selector_circle_common_accent_bg.xml │ │ │ ├── ic_switch_open.xml │ │ │ ├── ic_arrow_back.xml │ │ │ ├── selector_rectangle_input_border_bg.xml │ │ │ ├── selector_rectangle_common_border.xml │ │ │ ├── selector_circle_common_icon_bg.xml │ │ │ ├── ic_more.xml │ │ │ ├── shape_unread_common_bg.xml │ │ │ └── selector_circle_common_border.xml │ │ ├── anim │ │ │ ├── activity_fade_close_enter.xml │ │ │ ├── activity_fade_open_exit.xml │ │ │ ├── activity_slide_open_exit.xml │ │ │ ├── activity_slide_close_enter.xml │ │ │ ├── activity_slide_close_exit.xml │ │ │ ├── activity_slide_open_enter.xml │ │ │ ├── activity_fade_close_exit.xml │ │ │ └── activity_fade_open_enter.xml │ │ └── layout │ │ │ ├── activity_notify.xml │ │ │ ├── widget_common_top_bar.xml │ │ │ └── widget_common_empty_status_view.xml │ │ ├── java │ │ └── com │ │ │ └── vmloft │ │ │ └── develop │ │ │ └── library │ │ │ └── base │ │ │ ├── common │ │ │ ├── CFileProvider.kt │ │ │ └── CError.kt │ │ │ ├── event │ │ │ └── EventData.kt │ │ │ ├── widget │ │ │ └── CommonDialog.kt │ │ │ └── BResultLauncher.kt │ │ └── AndroidManifest.xml └── proguard-rules.pro ├── vmdata ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── data │ │ ├── common │ │ └── DConstants.kt │ │ ├── bean │ │ ├── Role.kt │ │ ├── Clock.kt │ │ ├── Like.kt │ │ ├── Category.kt │ │ ├── Config.kt │ │ ├── Attachment.kt │ │ ├── Room.kt │ │ ├── Comment.kt │ │ ├── Profession.kt │ │ ├── Applet.kt │ │ ├── Version.kt │ │ ├── Order.kt │ │ ├── Match.kt │ │ └── Feedback.kt │ │ ├── api │ │ ├── AppletAPI.kt │ │ ├── GiftAPI.kt │ │ ├── BlacklistAPI.kt │ │ └── RelationAPI.kt │ │ ├── repository │ │ └── AppletRepository.kt │ │ └── db │ │ ├── GiftDao.kt │ │ ├── MatchDao.kt │ │ ├── ConfigDao.kt │ │ ├── VersionDao.kt │ │ ├── CategoryDao.kt │ │ └── ProfessionDao.kt └── proguard-rules.pro ├── vmdb ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ └── AndroidManifest.xml └── proguard-rules.pro ├── vmgift ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── java │ │ └── com │ │ │ └── vmloft │ │ │ └── develop │ │ │ └── library │ │ │ └── gift │ │ │ └── GiftRouter.kt │ │ ├── res │ │ └── values │ │ │ └── strings.xml │ │ └── AndroidManifest.xml └── proguard-rules.pro ├── vmmp ├── .gitignore ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── mp │ │ └── MPConstants.kt └── proguard-rules.pro ├── vmpay ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ └── AndroidManifest.xml └── proguard-rules.pro ├── vmpush ├── .gitignore ├── src │ ├── main │ │ ├── res │ │ │ └── drawable-xxhdpi │ │ │ │ ├── push.png │ │ │ │ └── push_small.png │ │ ├── java │ │ │ └── com │ │ │ │ └── vmloft │ │ │ │ └── develop │ │ │ │ └── library │ │ │ │ └── push │ │ │ │ └── CustomPushService.kt │ │ └── AndroidManifest.xml │ ├── develop │ │ ├── java │ │ │ └── com │ │ │ │ └── vmloft │ │ │ │ └── develop │ │ │ │ └── library │ │ │ │ └── push │ │ │ │ └── CustomPushManager.kt │ │ └── AndroidManifest.xml │ └── googlePlay │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── push │ │ └── CustomPushManager.kt ├── consumer-rules.pro └── proguard-rules.pro ├── vmqr ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── res │ │ └── values │ │ │ └── strings.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── qr │ │ └── QRCodeScanLauncher.kt └── proguard-rules.pro ├── vmcommon ├── proguard-rules.pro ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── styles.xml │ │ │ └── strings.xml │ │ ├── values-night │ │ │ └── colors.xml │ │ ├── drawable-xxhdpi │ │ │ ├── img_default.png │ │ │ └── img_default_avatar.png │ │ ├── drawable │ │ │ ├── ic_done_selector.xml │ │ │ ├── ic_password_selector.xml │ │ │ ├── ic_check_box_selector.xml │ │ │ ├── ic_play.xml │ │ │ ├── ic_alert.xml │ │ │ ├── ic_info.xml │ │ │ ├── ic_close.xml │ │ │ ├── ic_add.xml │ │ │ ├── ic_done.xml │ │ │ ├── ic_send.xml │ │ │ ├── ic_pause.xml │ │ │ ├── ic_fire.xml │ │ │ ├── ic_collect.xml │ │ │ ├── ic_check_box_normal.xml │ │ │ ├── ic_check_box_select.xml │ │ │ ├── ic_like_fill.xml │ │ │ ├── ic_done_all.xml │ │ │ ├── ic_camera.xml │ │ │ ├── ic_call_end.xml │ │ │ ├── ic_search.xml │ │ │ ├── ic_call.xml │ │ │ ├── ic_lock.xml │ │ │ ├── ic_notify.xml │ │ │ ├── ic_picture.xml │ │ │ ├── ic_thumb.xml │ │ │ ├── ic_share.xml │ │ │ ├── ic_video.xml │ │ │ ├── ic_filter.xml │ │ │ ├── ic_comment.xml │ │ │ ├── ic_logout.xml │ │ │ ├── ic_password_open.xml │ │ │ ├── ic_picture_album.xml │ │ │ ├── ic_scan.xml │ │ │ ├── ic_password.xml │ │ │ ├── ic_top.xml │ │ │ └── ic_game.xml │ │ ├── xml │ │ │ ├── network_security_config.xml │ │ │ └── file_paths.xml │ │ └── layout │ │ │ ├── activity_debug.xml │ │ │ └── activity_web.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── common │ │ ├── CommonManager.kt │ │ └── widget │ │ └── refresh │ │ └── DoubleCircleFooter.kt └── consumer-rules.pro ├── vmim ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── raw │ │ │ ├── im_call_out.mp3 │ │ │ └── im_incoming_call.mp3 │ │ ├── drawable-xhdpi │ │ │ ├── emoji3_10.png │ │ │ ├── emoji3_44.png │ │ │ ├── emoji3_45.png │ │ │ ├── emoji3_46.png │ │ │ ├── im_ic_emotion_applaud.png │ │ │ └── im_ic_emotion_flower.png │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── drawable │ │ │ ├── im_shape_msg_tips_bg.xml │ │ │ ├── im_shape_msg_input_bg.xml │ │ │ ├── im_selector_call_icon_bg.xml │ │ │ ├── im_selector_call_icon_end_bg.xml │ │ │ ├── im_selector_call_icon_answer_bg.xml │ │ │ ├── im_selector_call_icon_effect_bg.xml │ │ │ ├── im_msg_bubble_send_bg.xml │ │ │ ├── im_msg_bubble_receive_bg.xml │ │ │ ├── im_msg_bubble_triangle.xml │ │ │ └── im_ic_avatar_midlife.xml │ │ ├── layout │ │ │ ├── im_activity_conversation.xml │ │ │ └── im_activity_chat.xml │ │ └── values-night │ │ │ └── colors.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── im │ │ ├── fast │ │ └── IMCustomEditText.kt │ │ ├── chat │ │ └── msg │ │ │ ├── MsgCallSendDelegate.kt │ │ │ ├── MsgTextSendDelegate.kt │ │ │ ├── MsgCallReceiveDelegate.kt │ │ │ └── MsgTextReceiveDelegate.kt │ │ ├── bean │ │ └── IMSignal.kt │ │ ├── room │ │ └── ItemRoomApplyUserDelegate.kt │ │ ├── db │ │ └── IMDataConverter.kt │ │ └── core │ │ └── AckTimer.kt ├── consumer-rules.pro └── proguard-rules.pro ├── vmimage ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── res │ │ ├── values │ │ │ └── themes.xml │ │ └── layout │ │ │ ├── display_item_delegate.xml │ │ │ ├── activity_display_single.xml │ │ │ └── activity_display_multi.xml │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── image │ │ ├── display │ │ └── DisplayItemDelegate.kt │ │ ├── IMGGlideModule.kt │ │ └── BlurTransformation.kt └── proguard-rules.pro ├── vmimem ├── .gitignore ├── src │ └── main │ │ ├── res │ │ ├── raw │ │ │ ├── im_call_out.mp3 │ │ │ └── im_incoming_call.mp3 │ │ ├── drawable-xhdpi │ │ │ ├── emoji3_10.png │ │ │ ├── emoji3_44.png │ │ │ ├── emoji3_45.png │ │ │ ├── emoji3_46.png │ │ │ ├── im_ic_emotion_flower.png │ │ │ └── im_ic_emotion_applaud.png │ │ ├── values │ │ │ ├── dimens.xml │ │ │ ├── colors.xml │ │ │ └── styles.xml │ │ ├── drawable │ │ │ ├── im_shape_msg_tips_bg.xml │ │ │ ├── im_shape_msg_input_bg.xml │ │ │ ├── im_selector_call_icon_bg.xml │ │ │ ├── im_selector_call_icon_end_bg.xml │ │ │ ├── im_selector_call_icon_answer_bg.xml │ │ │ ├── im_selector_call_icon_effect_bg.xml │ │ │ ├── im_msg_bubble_send_bg.xml │ │ │ ├── im_msg_bubble_receive_bg.xml │ │ │ ├── im_msg_bubble_triangle.xml │ │ │ └── im_ic_avatar_midlife.xml │ │ ├── layout │ │ │ ├── im_activity_conversation.xml │ │ │ └── im_activity_chat.xml │ │ └── values-night │ │ │ └── colors.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── im │ │ ├── bean │ │ ├── IMRoom.kt │ │ └── IMUser.kt │ │ ├── fast │ │ └── IMCustomEditText.kt │ │ ├── room │ │ └── ItemRoomApplyUserDelegate.kt │ │ └── chat │ │ └── msg │ │ ├── MsgCallSendDelegate.kt │ │ ├── MsgTextSendDelegate.kt │ │ ├── MsgCallReceiveDelegate.kt │ │ └── MsgTextReceiveDelegate.kt ├── consumer-rules.pro └── proguard-rules.pro ├── vmreport ├── .gitignore ├── consumer-rules.pro └── proguard-rules.pro ├── vmrequest ├── .gitignore ├── consumer-rules.pro ├── src │ └── main │ │ ├── AndroidManifest.xml │ │ └── java │ │ └── com │ │ └── vmloft │ │ └── develop │ │ └── library │ │ └── request │ │ ├── RResponse.kt │ │ ├── RPaging.kt │ │ ├── RResult.kt │ │ └── RConstants.kt └── proguard-rules.pro ├── vmloft.debug.jks ├── images ├── banner.jpg ├── imGroup.jpg ├── payQRAli.jpg ├── payQRWeChat.jpg ├── qqQR1565176197.jpg └── wechatSubscribeGreen.jpg ├── vmloft.debug.keystore ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── sponsor.md ├── arouter.gradle └── LICENSE /app/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmads/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmbase/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmdata/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmdb/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmdb/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmgift/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmmp/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmpay/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmpush/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmqr/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmqr/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmcommon/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmdata/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmgift/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmim/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /vmimage/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmimem/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /vmpay/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmreport/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmrequest/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /vmrequest/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -------------------------------------------------------------------------------- /vmcommon/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | /Develop 3 | /GooglePlay 4 | 5 | /schemas -------------------------------------------------------------------------------- /vmloft.debug.jks: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmloft.debug.jks -------------------------------------------------------------------------------- /images/banner.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/banner.jpg -------------------------------------------------------------------------------- /images/imGroup.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/imGroup.jpg -------------------------------------------------------------------------------- /images/payQRAli.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/payQRAli.jpg -------------------------------------------------------------------------------- /vmloft.debug.keystore: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmloft.debug.keystore -------------------------------------------------------------------------------- /images/payQRWeChat.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/payQRWeChat.jpg -------------------------------------------------------------------------------- /images/qqQR1565176197.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/qqQR1565176197.jpg -------------------------------------------------------------------------------- /vmcommon/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /images/wechatSubscribeGreen.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/images/wechatSubscribeGreen.jpg -------------------------------------------------------------------------------- /vmcommon/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xhdpi/icon.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xxhdpi/icon.png -------------------------------------------------------------------------------- /vmim/src/main/res/raw/im_call_out.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/raw/im_call_out.mp3 -------------------------------------------------------------------------------- /vmimem/src/main/res/raw/im_call_out.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/raw/im_call_out.mp3 -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/drawable-xxhdpi/logo.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xxxhdpi/icon.png -------------------------------------------------------------------------------- /app/src/main/assets/data/dcloud_control.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/icon_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xhdpi/icon_round.png -------------------------------------------------------------------------------- /vmim/src/main/res/raw/im_incoming_call.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/raw/im_incoming_call.mp3 -------------------------------------------------------------------------------- /vmimem/src/main/res/raw/im_incoming_call.mp3: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/raw/im_incoming_call.mp3 -------------------------------------------------------------------------------- /vmpush/src/main/res/drawable-xxhdpi/push.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmpush/src/main/res/drawable-xxhdpi/push.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/icon_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xxhdpi/icon_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/icon_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/mipmap-xxxhdpi/icon_round.png -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/emoji3_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/emoji3_10.png -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/emoji3_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/emoji3_44.png -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/emoji3_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/emoji3_45.png -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/emoji3_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/emoji3_46.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_default.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/drawable-xxhdpi/img_default.jpg -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_match_bg.jpg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/drawable-xxhdpi/img_match_bg.jpg -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/emoji3_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/emoji3_10.png -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/emoji3_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/emoji3_44.png -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/emoji3_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/emoji3_45.png -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/emoji3_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/emoji3_46.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/ic_alipay_logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/drawable-xxhdpi/ic_alipay_logo.png -------------------------------------------------------------------------------- /vmpush/src/main/res/drawable-xxhdpi/push_small.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmpush/src/main/res/drawable-xxhdpi/push_small.png -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable-xxhdpi/img_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmcommon/src/main/res/drawable-xxhdpi/img_default.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/img_default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/app/src/main/res/drawable-xxhdpi/img_default_avatar.png -------------------------------------------------------------------------------- /vmads/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 暂无视频数据,请稍后再试 4 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/im_ic_emotion_applaud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/im_ic_emotion_applaud.png -------------------------------------------------------------------------------- /vmim/src/main/res/drawable-xhdpi/im_ic_emotion_flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmim/src/main/res/drawable-xhdpi/im_ic_emotion_flower.png -------------------------------------------------------------------------------- /vmim/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @dimen/vm_dimen_20 4 | 5 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/im_ic_emotion_flower.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/im_ic_emotion_flower.png -------------------------------------------------------------------------------- /vmimem/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | @dimen/vm_dimen_20 4 | 5 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable-xxhdpi/img_default_avatar.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmcommon/src/main/res/drawable-xxhdpi/img_default_avatar.png -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable-xhdpi/im_ic_emotion_applaud.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/lzan13/VMTemplateAndroid/HEAD/vmimem/src/main/res/drawable-xhdpi/im_ic_emotion_applaud.png -------------------------------------------------------------------------------- /vmpush/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | -dontwarn com.igexin.** 2 | -keep class com.igexin.** { *; } 3 | -keep class org.json.** { *; } 4 | -dontwarn com.getui.** 5 | -keep class com.getui.** { *; } -------------------------------------------------------------------------------- /vmim/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | ####################################################### 2 | ### 三方框架 3 | ####################################################### 4 | 5 | # 声网 Agora 混淆代码 6 | -keep class io.agora.**{*;} 7 | -------------------------------------------------------------------------------- /vmdata/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /vmdb/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /vmmp/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /vmpay/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /vmads/src/main/java/com/vmloft/develop/library/ads/ADSItem.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.ads 2 | 3 | /** 4 | * Create by lzan13 on 2022/4/25 22:48 5 | * 描述:广告数据包装 6 | */ 7 | data class ADSItem(val adsId: String) 8 | -------------------------------------------------------------------------------- /vmrequest/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | -------------------------------------------------------------------------------- /vmbase/src/main/res/values/integer.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 220 4 | 260 5 | -------------------------------------------------------------------------------- /sponsor.md: -------------------------------------------------------------------------------- 1 | 赞助列表 2 | ====== 3 | 4 | 感谢以下大哥大姐的支持,这里跳转到他们的社交主页 5 | 6 | | Name | Money | 7 | |------------------------|---------| 8 | | [devilsafe][devilsafe] | 200 | 9 | | | | 10 | 11 | [devilsafe]: https://github.com/devilsafe/ -------------------------------------------------------------------------------- /vmrequest/src/main/java/com/vmloft/develop/library/request/RResponse.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.request 2 | 3 | /** 4 | * Create by lzan13 on 2020/02/13 18:56 5 | * 描述:统一请求结果数据 bean 6 | */ 7 | data class RResponse(val code: Int, val msg: String, val data: T) 8 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Aug 23 21:43:22 CST 2022 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.3.3-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /vmpush/src/main/java/com/vmloft/develop/library/push/CustomPushService.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.push 2 | 3 | import com.igexin.sdk.PushService 4 | 5 | /** 6 | * Create by lzan13 on 2022/4/20 7 | * 描述:自定义推送服务 8 | */ 9 | class CustomPushService : PushService() { 10 | 11 | } -------------------------------------------------------------------------------- /vmimage/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | 2 | ### Glide 混淆配置 3 | -keep public class * implements com.bumptech.glide.module.GlideModule 4 | -keep public class * extends com.bumptech.glide.module.AppGlideModule 5 | -keep public enum com.bumptech.glide.load.ImageHeaderParser$** { 6 | **[] $VALUES; 7 | public *; 8 | } -------------------------------------------------------------------------------- /vmqr/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 二维码识别 6 | 未识别到二维码 7 | 打开相机失败 8 | 9 | -------------------------------------------------------------------------------- /vmbase/src/main/java/com/vmloft/develop/library/base/common/CFileProvider.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.base.common 2 | 3 | import androidx.core.content.FileProvider 4 | 5 | /** 6 | * Create by lzan13 on 2020/8/14 10:45 7 | * 描述:文件代理 8 | */ 9 | class CFileProvider : FileProvider() { 10 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/color/selector_bottom_nav.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /vmbase/src/main/res/color/selector_text_accent.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_circle_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /vmbase/src/main/res/color/selector_text_primary.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /vmgift/src/main/java/com/vmloft/develop/library/gift/GiftRouter.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.gift 2 | 3 | /** 4 | * Create by lzan13 on 2020-02-24 21:57 5 | * 描述:礼物相关路由路径定义 6 | */ 7 | object GiftRouter { 8 | 9 | const val giftAnim = "/Gift/Anim" 10 | const val giftMine = "/Gift/Mine" 11 | } -------------------------------------------------------------------------------- /vmimage/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | 8 | -------------------------------------------------------------------------------- /vmimem/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | ####################################################### 2 | ### 三方框架 3 | ####################################################### 4 | 5 | # 环信 SDK 混淆代码 6 | -keep class com.hyphenate.** {*;} 7 | -dontwarn com.hyphenate.** 8 | 9 | # 声网 Agora 混淆代码 10 | -keep class io.agora.**{*;} 11 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_done_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /vmgift/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 赠送 5 | 我的礼物 6 | 余额不足,先去获取吧 7 | 去获取→ 8 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_password_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /vmads/src/main/res/xml/anythink_bk_sigmob_file_path.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/java/com/vmloft/develop/library/base/common/CError.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.base.common 2 | 3 | /** 4 | * Create by lzan13 on 2020/9/5 19:46 5 | * 描述:定义通用错误码 6 | */ 7 | object CError { 8 | // 未知错误 9 | const val unknown = -1 10 | 11 | // 一般错误,不重要的, 12 | const val ordinary = -1000 13 | } -------------------------------------------------------------------------------- /vmbase/src/main/java/com/vmloft/develop/library/base/event/EventData.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.base.event 2 | 3 | /** 4 | * Create by lzan13 on 2022/3/22 5 | * 描述:生命周期事件总线通用 Event 数据传递类 6 | */ 7 | data class EventData( 8 | var what: Int = 0, // 简单事件类型 9 | var data: Any? = null, // 自定义数据 bean 数据类型 10 | ) { 11 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_check_box_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_input_sign.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 172.16.185.128 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_info_top_mask.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_switch_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_fillet_tips_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_shape_msg_tips_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_shape_msg_tips_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /arouter.gradle: -------------------------------------------------------------------------------- 1 | android{ 2 | kapt { 3 | arguments { 4 | // 阿里巴巴 ARouter Kotlin 下的配置 5 | arg("AROUTER_MODULE_NAME", project.getName()) 6 | } 7 | } 8 | } 9 | 10 | dependencies { 11 | // ARouter 编译器,TODO 当代码中有一些自己没看到的错误的时候,ARouter 会拦截错误信息,看不到错误位置,把这行注释掉,重新编译 12 | kapt 'com.alibaba:arouter-compiler:1.5.2' 13 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_card_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_input_fillet_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_rectangle_input_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_shape_msg_input_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_shape_msg_input_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_fillet_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_card_common_gray_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_card_common_translucent_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /vmrequest/src/main/java/com/vmloft/develop/library/request/RPaging.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.request 2 | 3 | /** 4 | * Create by lzan13 on 2020/02/13 18:56 5 | * 描述:网络请求分页结果实体类 6 | */ 7 | data class RPaging( 8 | val currentCount: Int, 9 | val totalCount: Int, 10 | val page: Int, 11 | val limit: Int, 12 | val data: List 13 | ) 14 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_fade_close_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_fade_open_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_slide_open_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_slide_close_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_home_icon_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 9 | 10 | -------------------------------------------------------------------------------- /vmmp/src/main/java/com/vmloft/develop/library/mp/MPConstants.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.mp 2 | 3 | /** 4 | * Create by lzan13 on 2022/5/12 5 | * 描述:小程序静态资源类 6 | */ 7 | class MPConstants { 8 | /** 9 | * 小程序 Id 10 | */ 11 | object MPAppId { 12 | const val easyChoose = "__UNI__EB854F1" // 易择 13 | const val sokoban = "__UNI__8ACD3DE" // 易择 14 | } 15 | } -------------------------------------------------------------------------------- /vmbase/src/main/java/com/vmloft/develop/library/base/widget/CommonDialog.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.base.widget 2 | 3 | import android.content.Context 4 | 5 | import com.vmloft.develop.library.tools.widget.VMDefaultDialog 6 | 7 | /** 8 | * Create by lzan13 on 2020/12/10 21:41 9 | * 描述:自定义通用对话框 10 | */ 11 | open class CommonDialog(context: Context) : VMDefaultDialog(context) { 12 | 13 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_launch_splash.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_fillet_common_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmreport/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | 2 | ### Bugly 混淆配置 3 | -dontwarn com.tencent.bugly.** 4 | -keep public class com.tencent.bugly.**{*;} 5 | 6 | 7 | ### 友盟 SDK 混淆配置 8 | -keep class com.umeng.** {*;} 9 | 10 | -keepclassmembers class * { 11 | public (org.json.JSONObject); 12 | } 13 | 14 | -keepclassmembers enum * { 15 | public static **[] values(); 16 | public static ** valueOf(java.lang.String); 17 | } 18 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_rectangle_top_radius_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_rectangle_bottom_radius_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /vmbase/src/main/res/layout/activity_notify.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/bean/IMRoom.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.bean 2 | 3 | 4 | /** 5 | * Create by lzan13 on 2019/5/23 09:50 6 | * 7 | * 描述:定义 IM 内部房间实体类,用来获取头像昵称等简单属性进行展示 8 | */ 9 | data class IMRoom( 10 | var id: String, // id 11 | var owner: IMUser, // 所有者 12 | var title: String = "", // 标题 13 | var desc: String = "", // 描述 14 | var count: Int = 1, // 人数 15 | ) { 16 | 17 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_applet_item_mask_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_tab_indicator.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /vmbase/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 11 | 12 | -------------------------------------------------------------------------------- /vmqr/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /vmcommon/consumer-rules.pro: -------------------------------------------------------------------------------- 1 | ####################################################### 2 | ### 三方框架 3 | ####################################################### 4 | 5 | ### 地址日期选择器 6 | -keep class com.aigestudio.wheelpicker.** { *;} 7 | 8 | ### AgentWeb 库混淆配置 9 | -keep class com.just.agentweb.** {*;} 10 | -dontwarn com.just.agentweb.** 11 | 12 | ### SVGA 动画库混淆配置 13 | -keep class com.squareup.wire.** { *; } 14 | -keep class com.opensource.svgaplayer.proto.** { *; } 15 | 16 | -------------------------------------------------------------------------------- /vmimage/src/main/res/layout/display_item_delegate.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/values/configs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 2500 6 | 7 | 60 8 | 9 | 2000 10 | 11 | 12 | 4 13 | 8 14 | 15 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/common/DConstants.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.common 2 | 3 | /** 4 | * Create by lzan13 on 2022/7/6 5 | * 描述:数据模块常量类 6 | */ 7 | object DConstants { 8 | const val dbName = "vm_db_app_" 9 | const val dbPass = "vm_db_app_lzan13" 10 | 11 | object Event{ 12 | const val userInfo = "userInfo" // 用户信息改变事件 13 | const val matchInfo = "matchInfo" // 匹配信息改变事件 14 | const val giftGive = "giftGive" // 礼物赠送事件 15 | } 16 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_play.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmim/src/main/res/layout/im_activity_conversation.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /vmimem/src/main/res/layout/im_activity_conversation.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 12 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_selector_call_icon_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_selector_call_icon_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_selector_call_icon_end_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_selector_call_icon_end_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_slide_close_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_selector_call_icon_answer_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_slide_open_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 12 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_selector_call_icon_effect_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_selector_call_icon_answer_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_selector_call_icon_effect_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_arrow_next.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Role.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2020/7/30 16:04 11 | * 描述:角色对象数据 Bean 12 | */ 13 | @Parcelize 14 | data class Role( 15 | @SerializedName("_id") 16 | var id: String ="", 17 | var title: String = "", 18 | var desc: String = "", 19 | var identity: Int = 0, // 角色身份级别 20 | ) : Parcelable { 21 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 调试模式 6 | 环境 7 | 测试 8 | 线上 9 | 切换环境需要重启App,是否继续? 10 | 11 | 12 | 再拉试试 13 | 进入休闲空间 14 | 15 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_fade_close_exit.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /vmbase/src/main/res/anim/activity_fade_open_enter.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 8 | 9 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_alert.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_info.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmads/src/main/res/layout/ads_item_delegate.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 11 | -------------------------------------------------------------------------------- /app/src/main/res/values/themes.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_ads.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Clock.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | import androidx.room.Entity 5 | import androidx.room.PrimaryKey 6 | 7 | import com.google.gson.annotations.SerializedName 8 | 9 | import kotlinx.parcelize.Parcelize 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/20 16:12 13 | * 描述:签到数据 Bean 14 | */ 15 | @Parcelize 16 | data class Clock( 17 | @SerializedName("_id") 18 | var id: String = "", 19 | var userId: String = "", 20 | var createdAt: Long = 0, 21 | ) : Parcelable { 22 | } -------------------------------------------------------------------------------- /app/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #dde66d48 5 | #d54b4b 6 | #ddfab37b 7 | #ddcc39 8 | #ddb37fe8 9 | #dd6db7c7 10 | 11 | @color/vm_white_87 12 | @color/vm_white_54 13 | 14 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_add.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/app/CoroutinesDispatcherProvider.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.app 2 | 3 | import kotlinx.coroutines.CoroutineDispatcher 4 | import kotlinx.coroutines.Dispatchers 5 | 6 | /** 7 | * Create by lzan13 on 2020-02-13 18:02 8 | * 描述:协同程序调度代理类 9 | */ 10 | data class CoroutinesDispatcherProvider( 11 | val main: CoroutineDispatcher = Dispatchers.Main, 12 | val computation: CoroutineDispatcher = Dispatchers.Default, 13 | val io: CoroutineDispatcher = Dispatchers.IO 14 | ) { 15 | constructor() : this(Dispatchers.Main, Dispatchers.Default, Dispatchers.IO) 16 | } 17 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/report/ReportConstants.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.report 2 | 3 | /** 4 | * Create by lzan13 on 2021/7/11 5 | * 描述:上报自定义常量类,定义事件,需和后端一致 6 | */ 7 | object ReportConstants { 8 | 9 | const val eventChangeFilter = "eventChangeFilter" // 过滤配置变化 10 | const val eventChangeEmotion = "eventChangeEmotion" // 心情变化 11 | const val eventDestinyMatch = "eventDestinyMatch" // 缘分匹配 12 | const val eventFastChat = "eventFastChat" // 快速聊天 13 | const val eventPostCreate = "eventPostCreate" // 内容发布 14 | const val eventRoomCreate = "eventRoomCreate" // 创建房间 15 | 16 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_reward_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 14 | 15 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_done.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmpush/src/develop/java/com/vmloft/develop/library/push/CustomPushManager.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.push 2 | 3 | import android.content.Context 4 | 5 | import com.igexin.sdk.PushManager 6 | 7 | import com.vmloft.develop.library.tools.utils.logger.VMLog 8 | 9 | 10 | /** 11 | * Create by lzan13 on 2022/4/20 12 | * 描述:推送管理类 13 | */ 14 | object CustomPushManager { 15 | 16 | fun init(context: Context) { 17 | PushManager.getInstance().initialize(context) 18 | if (BuildConfig.DEBUG) { 19 | PushManager.getInstance().setDebugLogger(context) { msg -> VMLog.i("pushLog $msg") } 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_fill_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_send.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Like.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2020/7/30 16:15 11 | * 描述:喜欢数据 Bean 12 | */ 13 | @Parcelize 14 | data class Like( 15 | @SerializedName("_id") 16 | var id: String = "", 17 | var owner: String = "", 18 | var user: User = User(), 19 | var post: Post = Post(), 20 | var comment: Comment = Comment(), 21 | var type: Int = 0, 22 | var createdAt: Long = 0, 23 | ) : Parcelable { 24 | } -------------------------------------------------------------------------------- /vmrequest/src/main/java/com/vmloft/develop/library/request/RResult.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.request 2 | 3 | /** 4 | * Create by lzan13 on 2020/02/13 18:56 5 | * 描述:协程回调结果 6 | */ 7 | sealed class RResult { 8 | 9 | data class Success(val msg: String? = null, val data: T? = null) : RResult() 10 | data class Error(val code: Int, val error: String) : RResult() 11 | 12 | override fun toString(): String { 13 | return when (this) { 14 | is Success<*> -> "请求成功 - msg:$msg, data: $data" 15 | is Error -> "请求失败 - code:$code, error: $error" 16 | } 17 | } 18 | 19 | } 20 | -------------------------------------------------------------------------------- /vmads/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 11 | 12 | 13 | 17 | 18 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_switch_close.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_explore.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_circle_common_accent_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_pause.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmrequest/src/main/java/com/vmloft/develop/library/request/RConstants.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.request 2 | 3 | import com.vmloft.develop.library.base.common.CSPManager 4 | 5 | /** 6 | * Create by lzan13 on 2022/3/9 7 | * 描述: 8 | */ 9 | object RConstants { 10 | 11 | /** 12 | * 获取接口 host 地址,根据 debug 状态返回不同地址 13 | */ 14 | fun baseHost(): String { 15 | return if (CSPManager.isDebug()) { 16 | BuildConfig.baseUrlDebug 17 | } else { 18 | BuildConfig.baseUrlRelease 19 | } 20 | } 21 | 22 | /** 23 | * 获取媒体资源 host 地址 24 | */ 25 | fun mediaHost(): String { 26 | return BuildConfig.mediaUrl 27 | } 28 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_switch_open.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_fire.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/api/AppletAPI.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.api 2 | 3 | import com.vmloft.develop.library.data.bean.* 4 | import com.vmloft.develop.library.request.RPaging 5 | import com.vmloft.develop.library.request.RResponse 6 | 7 | import retrofit2.http.* 8 | 9 | /** 10 | * Create by lzan13 on 2020/04/07 17:35 11 | * 描述:程序相关 API 接口 12 | */ 13 | interface AppletAPI { 14 | 15 | /** 16 | * 获取列表 17 | * @param page 18 | * @param limit 19 | */ 20 | @GET("v1/common/appletList") 21 | suspend fun appletList( 22 | @Query("page") page: Int, 23 | @Query("limit") limit: Int, 24 | ): RResponse> 25 | 26 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_arrow_back.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Category.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import androidx.room.Entity 6 | import androidx.room.Ignore 7 | import androidx.room.PrimaryKey 8 | 9 | import com.google.gson.annotations.SerializedName 10 | 11 | import kotlinx.parcelize.Parcelize 12 | 13 | 14 | /** 15 | * Create by lzan13 on 2020/7/30 16:12 16 | * 描述:分类数据 Bean 17 | */ 18 | @Entity 19 | @Parcelize 20 | data class Category( 21 | @PrimaryKey 22 | @SerializedName("_id") 23 | var id: String = "", 24 | var title: String = "", 25 | var desc: String = "", 26 | ) : Parcelable { 27 | @Ignore 28 | constructor() : this("") 29 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_collect.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmgift/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 14 | 15 | 16 | 19 | 20 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_check_box_normal.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_check_box_select.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/menu/main_nav_menu.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | 13 | 14 | 18 | 19 | 23 | 24 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/ui/ads/ADSActivity.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.ui.ads 2 | 3 | 4 | import com.alibaba.android.arouter.facade.annotation.Route 5 | 6 | import com.vmloft.develop.app.template.databinding.ActivityAdsBinding 7 | import com.vmloft.develop.app.template.router.AppRouter 8 | import com.vmloft.develop.library.base.BActivity 9 | 10 | 11 | /** 12 | * Create by lzan13 on 2022/03/23 15:56 13 | * 描述:广告界面 14 | */ 15 | @Route(path = AppRouter.appADS) 16 | class ADSActivity : BActivity() { 17 | 18 | override fun initVB() = ActivityAdsBinding.inflate(layoutInflater) 19 | 20 | override fun initUI() { 21 | super.initUI() 22 | 23 | } 24 | 25 | override fun initData() { 26 | } 27 | 28 | } -------------------------------------------------------------------------------- /vmcommon/src/main/java/com/vmloft/develop/library/common/CommonManager.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.common 2 | 3 | import android.content.Context 4 | import android.net.http.HttpResponseCache 5 | import com.opensource.svgaplayer.SVGAParser 6 | import com.vmloft.develop.library.tools.utils.VMFile 7 | import java.io.File 8 | 9 | /** 10 | * Create by lzan13 on 2022/7/11 11 | * 描述: 12 | */ 13 | object CommonManager { 14 | 15 | fun init(context: Context) { 16 | // SVGAParser 单例需要提前实例化 17 | SVGAParser.shareParser().init(context) 18 | 19 | // VGAParser 依赖 URLConnection, URLConnection 使用 HttpResponseCache 处理缓存。 20 | val cacheDir = File(VMFile.filesPath("gift")) 21 | HttpResponseCache.install(cacheDir, 1024 * 1024 * 128) 22 | } 23 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_like_fill.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Config.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import androidx.room.Entity 6 | import androidx.room.Ignore 7 | import androidx.room.PrimaryKey 8 | 9 | import com.google.gson.annotations.SerializedName 10 | 11 | import kotlinx.parcelize.Parcelize 12 | 13 | /** 14 | * Create by lzan13 on 2020/7/30 16:12 15 | * 描述:配置数据 Bean 16 | */ 17 | @Entity 18 | @Parcelize 19 | data class Config( 20 | @PrimaryKey 21 | @SerializedName("_id") 22 | var id: String = "", 23 | var alias: String = "", 24 | var title: String = "", 25 | var desc: String = "", 26 | var content: String = "", 27 | ) : Parcelable { 28 | @Ignore 29 | constructor() : this("") 30 | } -------------------------------------------------------------------------------- /app/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #dde66d48 5 | #fab37b 6 | #e66d48 7 | #d54b4b 8 | #fab37b 9 | #cc39 10 | #b37fe8 11 | #6db7c7 12 | 13 | 14 | @color/vm_white 15 | @color/vm_white_87 16 | 17 | 18 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/repository/AppletRepository.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.repository 2 | 3 | import com.vmloft.develop.library.data.api.APIRequest 4 | import com.vmloft.develop.library.data.bean.Applet 5 | import com.vmloft.develop.library.request.BaseRepository 6 | import com.vmloft.develop.library.request.RPaging 7 | import com.vmloft.develop.library.request.RResult 8 | 9 | /** 10 | * Create by lzan13 on 2022/05/25 09:08 11 | * 描述:程序相关请求 12 | */ 13 | class AppletRepository : BaseRepository() { 14 | 15 | /** 16 | * 程序列表 17 | */ 18 | suspend fun appletList( page: Int, limit: Int): RResult> { 19 | return safeRequest { executeResponse(APIRequest.appletAPI.appletList(page, limit)) } 20 | } 21 | 22 | } -------------------------------------------------------------------------------- /vmpush/src/googlePlay/java/com/vmloft/develop/library/push/CustomPushManager.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.push 2 | 3 | import android.content.Context 4 | 5 | import com.igexin.sdk.PushManager 6 | 7 | import com.vmloft.develop.library.tools.utils.logger.VMLog 8 | 9 | 10 | /** 11 | * Create by lzan13 on 2022/4/20 12 | * 描述:推送管理类 13 | */ 14 | object CustomPushManager { 15 | 16 | fun init(context: Context) { 17 | // 初始化 sdk 18 | PushManager.getInstance().initialize(context, CustomPushService::class.java) 19 | // 注册自定义推送消息接收处理服务 20 | PushManager.getInstance().registerPushIntentService(context, CustomPushIntentService::class.java); 21 | // 设置同意隐私条款 22 | PushManager.getInstance().setPrivacyPolicyStrategy(context, true) 23 | } 24 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/layout/widget_common_top_bar.xml: -------------------------------------------------------------------------------- 1 | 2 | 8 | 9 | 10 | 15 | 16 | 21 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Attachment.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.net.Uri 4 | import android.os.Parcelable 5 | 6 | import com.google.gson.annotations.SerializedName 7 | 8 | import kotlinx.parcelize.Parcelize 9 | 10 | /** 11 | * Create by lzan13 on 2020/7/30 16:19 12 | * 描述:附件数据 Bean 13 | */ 14 | @Parcelize 15 | data class Attachment( 16 | @SerializedName("_id") 17 | var id: String = "", // 附件 id 18 | var desc: String = "", // 附件描述 19 | var duration: Int = 0, // 附件时长,video/voice 有值 20 | var extname: String = "", // 附件扩展名 21 | var path: String = "", // 附件地址 22 | var width: Int = 0, // 附件宽 23 | var height: Int = 0, // 附件高 24 | 25 | var uri: Uri? = null, // 本地文件,上传前用 26 | ) : Parcelable { 27 | } -------------------------------------------------------------------------------- /vmim/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #ffffffff 5 | #fff6f7f8 6 | 7 | #03A9F4 8 | #6103A9F4 9 | @color/app_main_54 10 | 11 | 12 | @color/vm_gray_white_12 13 | @color/vm_white 14 | @color/vm_gray_white 15 | 16 | #00DC2B 17 | @color/vm_red 18 | 19 | 20 | -------------------------------------------------------------------------------- /vmimem/src/main/res/values/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #ffffffff 5 | #fff6f7f8 6 | 7 | #03A9F4 8 | #6103A9F4 9 | @color/app_main_54 10 | 11 | 12 | @color/vm_gray_white_12 13 | @color/vm_white 14 | @color/vm_gray_white 15 | 16 | #00DC2B 17 | @color/vm_red 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_edit.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_done_all.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmads/src/main/java/com/vmloft/develop/library/ads/ADSItemDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.ads 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.ads.databinding.AdsItemDelegateBinding 7 | import com.vmloft.develop.library.base.BItemDelegate 8 | 9 | /** 10 | * Create by lzan13 on 2022/04/25 21:56 11 | * 描述:展示广告内容 Item 12 | */ 13 | class ADSItemDelegate : BItemDelegate() { 14 | 15 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = AdsItemDelegateBinding.inflate(inflater, parent, false) 16 | 17 | override fun onBindView(holder: BItemHolder, item: ADSItem) { 18 | ADSManager.showNativeAD(mContext, holder.binding.adsContainerCL) 19 | } 20 | 21 | } 22 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_camera.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmim/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #ff2a2a2a 5 | #ff000000 6 | 7 | #8903A9F4 8 | #1e03A9F4 9 | @color/app_main_54 10 | 11 | 12 | @color/vm_gray_white_12 13 | @color/vm_white_87 14 | @color/vm_gray_white_87 15 | 16 | #dd00DC2B 17 | @color/vm_red_87 18 | 19 | 20 | -------------------------------------------------------------------------------- /vmimem/src/main/res/values-night/colors.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | #ff2a2a2a 5 | #ff000000 6 | 7 | #8903A9F4 8 | #1e03A9F4 9 | @color/app_main_54 10 | 11 | 12 | @color/vm_gray_white_12 13 | @color/vm_white_87 14 | @color/vm_gray_white_87 15 | 16 | #dd00DC2B 17 | @color/vm_red_87 18 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/ui/trade/VipBannerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.ui.trade 2 | 3 | 4 | import com.vmloft.develop.app.template.R 5 | 6 | import com.zhpan.bannerview.BaseBannerAdapter 7 | import com.zhpan.bannerview.BaseViewHolder 8 | 9 | /** 10 | * Create by lzan13 2022/06/19 11 | * 描述:自动轮播 Banner 适配器 12 | */ 13 | class BannerAdapter : BaseBannerAdapter() { 14 | 15 | override fun bindData(holder: BaseViewHolder, data: VipBannerItem, position: Int, pageSize: Int) { 16 | holder.setImageResource(R.id.iconIV, data.icon) 17 | holder.setText(R.id.descTV, data.desc) 18 | } 19 | 20 | override fun getLayoutId(viewType: Int) = R.layout.item_vip_banner 21 | 22 | } 23 | 24 | class VipBannerItem(val icon: Int, val desc: String) {} 25 | -------------------------------------------------------------------------------- /vmim/src/main/res/layout/im_activity_chat.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/layout/activity_debug.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 14 | 18 | 19 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_msg_bubble_send_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /vmimem/src/main/res/layout/im_activity_chat.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 13 | 14 | 15 | 16 | 20 | 21 | -------------------------------------------------------------------------------- /vmads/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmdata/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmdb/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmgift/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_msg_bubble_receive_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /vmimage/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 12 | 13 | 18 | 19 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_msg_bubble_send_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /vmmp/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmpay/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmpush/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmqr/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmreport/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmbase/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_rectangle_input_border_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /vmim/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /vmimage/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /vmimem/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_msg_bubble_receive_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /vmrequest/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile -------------------------------------------------------------------------------- /vmcommon/src/main/res/xml/file_paths.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_call_end.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_search.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | @dimen/vm_dimen_0 11 | 12 | 13 | @dimen/vm_dimen_36 14 | @dimen/vm_dimen_48 15 | 16 | 17 | @dimen/vm_dimen_0_5 18 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_call.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_rectangle_common_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_circle_common_icon_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Room.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2021/5/25 16:08 11 | * 描述:房间对象数据 Bean 12 | */ 13 | @Parcelize 14 | data class Room( 15 | @SerializedName("_id") 16 | var id: String = "", // 17 | var owner: User = User(), // 房主 18 | var managers: MutableList = mutableListOf(), // 管理员列表 19 | var members: MutableList = mutableListOf(), // 成员列表 20 | var title: String = "", // 标题 21 | var desc: String = "", // 描述 22 | var type: Int = 0, // 房间类型 0-普通聊天 1-你画我猜 2-谁是卧底 23 | var count: Int = 0, // 房间人数 24 | var maxCount: Int = 500, // 房间最大人数 25 | var extension: String = "", // 扩展信息 26 | ) : Parcelable { 27 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_lock.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_notify.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_picture.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Comment.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2020/7/30 16:18 11 | * 描述:评论数据 Bean 12 | */ 13 | @Parcelize 14 | data class Comment( 15 | @SerializedName("_id") 16 | var id: String = "", 17 | var owner: User = User(), 18 | var user: User = User(), 19 | var post: Post = Post(), 20 | var content: String = "", 21 | var likeCount: Int = 0, 22 | val createdAt: Long = 0, 23 | 24 | var isLike: Boolean = false, // 记录是否喜欢 25 | ) : Parcelable { 26 | override fun equals(other: Any?): Boolean { 27 | (other as? Comment)?.let { 28 | return it.id == this.id 29 | } 30 | return false 31 | } 32 | } -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/fast/IMCustomEditText.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.fast 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.appcompat.widget.AppCompatEditText 6 | 7 | /** 8 | * Create by lzan13 2021/06/01 9 | * 描述:自定义输入框,限制选择 10 | */ 11 | class IMCustomEditText @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatEditText(context, attrs, defStyleAttr) { 12 | 13 | override fun onSelectionChanged(start: Int, end: Int) { 14 | 15 | val text: CharSequence? = text 16 | if (text != null) { 17 | if (start !== text.length || end !== text.length) { 18 | setSelection(text.length, text.length) 19 | return 20 | } 21 | } 22 | super.onSelectionChanged(start, end) 23 | } 24 | } -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/fast/IMCustomEditText.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.fast 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import androidx.appcompat.widget.AppCompatEditText 6 | 7 | /** 8 | * Create by lzan13 2021/06/01 9 | * 描述:自定义输入框,限制选择 10 | */ 11 | class IMCustomEditText @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : AppCompatEditText(context, attrs, defStyleAttr) { 12 | 13 | override fun onSelectionChanged(start: Int, end: Int) { 14 | 15 | val text: CharSequence? = text 16 | if (text != null) { 17 | if (start !== text.length || end !== text.length) { 18 | setSelection(text.length, text.length) 19 | return 20 | } 21 | } 22 | super.onSelectionChanged(start, end) 23 | } 24 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Profession.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | import androidx.room.Entity 5 | import androidx.room.Ignore 6 | import androidx.room.PrimaryKey 7 | 8 | import com.google.gson.annotations.SerializedName 9 | 10 | import kotlinx.parcelize.Parcelize 11 | 12 | /** 13 | * Create by lzan13 on 2020/7/30 16:05 14 | * 描述:职业对象数据 Bean 15 | */ 16 | @Entity 17 | @Parcelize 18 | data class Profession( 19 | @PrimaryKey 20 | @SerializedName("_id") 21 | var id: String="", 22 | var title: String = "", 23 | var desc: String = "" 24 | ) : Parcelable { 25 | @Ignore 26 | constructor() : this("") 27 | 28 | override fun equals(other: Any?): Boolean { 29 | (other as? Profession)?.let { 30 | return it.id == this.id 31 | } 32 | return false 33 | } 34 | } -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/bean/IMUser.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.bean 2 | 3 | import android.os.Parcelable 4 | import kotlinx.parcelize.Parcelize 5 | 6 | 7 | /** 8 | * Create by lzan13 on 2019/5/23 09:50 9 | * 10 | * 描述:定义 IM 内部联系人实体类,用来获取头像昵称等简单属性进行展示 11 | */ 12 | @Parcelize 13 | data class IMUser( 14 | var id: String, // 账户 id 15 | var username: String = "", // 用户名 16 | var nickname: String = "", // 昵称 17 | var avatar: String = "", // 头像 18 | var gender: Int = 2, // 性别 19 | var identity: Int = 9, // 用户 身份 20 | var signature: String = "", // 签名 21 | ) : Parcelable { 22 | override fun equals(other: Any?): Boolean { 23 | (other as? IMUser)?.let { 24 | return it.id == this.id 25 | } 26 | return false 27 | } 28 | 29 | override fun hashCode(): Int { 30 | return id.hashCode() 31 | } 32 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_thumb.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmimage/src/main/java/com/vmloft/develop/library/image/display/DisplayItemDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.image.display 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | import com.vmloft.develop.library.base.BItemDelegate 6 | import com.vmloft.develop.library.image.IMGLoader 7 | import com.vmloft.develop.library.image.databinding.DisplayItemDelegateBinding 8 | 9 | 10 | /** 11 | * Create by lzan13 on 2020/02/15 17:56 12 | * 描述:展示图片Item 13 | */ 14 | class DisplayItemDelegate : BItemDelegate() { 15 | 16 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = DisplayItemDelegateBinding.inflate(inflater, parent, false) 17 | 18 | override fun onBindView(holder: BItemHolder, item: String) { 19 | IMGLoader.loadCover(holder.binding.displayItemIV, item,thumbExt = "") 20 | } 21 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_share.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_video.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_chat.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmpush/src/main/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_filter.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Applet.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2022/05/23 06:19 11 | * 描述:程序数据 Bean 12 | */ 13 | @Parcelize 14 | data class Applet( 15 | @SerializedName("_id") 16 | var id: String = "", // id 17 | var title: String = "", // 标题 18 | var content: String = "", // 内容 19 | var tips: String = "", // 提示 20 | var isNeedVIP: Boolean = false, // 需要 VIP 资格 21 | var type: Int = 0, // 类型 0-H5 1-小应用 2-小游戏 22 | var appId: String = "", // appId 23 | var cover: Attachment = Attachment(), // 封面 24 | var body: Attachment = Attachment(), // 程序体 25 | var url: String = "", // H5 地址 26 | var versionCode: Int = 1, // 版本号 27 | var versionName: String = "0.0.1", // 版本名 28 | ) : Parcelable { 29 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/widget_unread_layout.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 8 | 9 | 20 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/ic_more.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgCallSendDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.im.bean.IMMessage 7 | import com.vmloft.develop.library.im.databinding.ImItemMsgCallSendDelegateBinding 8 | 9 | /** 10 | * Create by lzan13 on 2021/01/05 17:56 11 | * 描述:展示通话记录消息 Item 12 | */ 13 | class MsgCallSendDelegate(listener: BItemLongListener) : MsgCommonDelegate(longListener = listener) { 14 | 15 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgCallSendDelegateBinding.inflate(inflater, parent, false) 16 | 17 | override fun onBindView(holder: BItemHolder, item: IMMessage) { 18 | super.onBindView(holder, item) 19 | 20 | holder.binding.imMsgContentTV.text = item.body 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_msg_bubble_triangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_msg_bubble_triangle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Version.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | import androidx.room.Entity 5 | import androidx.room.Ignore 6 | import androidx.room.PrimaryKey 7 | 8 | import com.google.gson.annotations.SerializedName 9 | 10 | import kotlinx.parcelize.Parcelize 11 | 12 | /** 13 | * Create by lzan13 on 2020/7/30 16:04 14 | * 描述:版本对象数据 Bean 15 | */ 16 | @Entity 17 | @Parcelize 18 | data class Version( 19 | @PrimaryKey 20 | @SerializedName("_id") 21 | var id: String = "", 22 | var platform: Int = 0, 23 | var title: String = "版本升级", 24 | var desc: String = "暂无更新", 25 | var url: String = "", 26 | var negativeBtn:String = "暂不升级", 27 | var positiveBtn:String = "马上升级", 28 | var versionCode: Int = 1, 29 | var versionName: String = "0.0.1", 30 | var force: Boolean = false, 31 | ) : Parcelable { 32 | @Ignore 33 | constructor() : this("") 34 | } -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/bean/IMSignal.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.bean 2 | 3 | import org.json.JSONObject 4 | 5 | /** 6 | * Create by lzan13 on 2022/8/10 22:11 7 | * 描述:信令消息 bean 8 | */ 9 | data class IMSignal( 10 | var action: String = "", // 指令 11 | ) : IMBMsg() { 12 | 13 | /** 14 | * 转为字符串 15 | */ 16 | override fun toString(): String { 17 | val jsonObj = JSONObject() 18 | 19 | if (id.isNotEmpty()) jsonObj.put("id", id) 20 | if (from.isNotEmpty()) jsonObj.put("from", from) 21 | if (to.isNotEmpty()) jsonObj.put("to", to) 22 | jsonObj.put("chatType", chatType) 23 | if (action.isNotEmpty()) jsonObj.put("action", action) 24 | if (extend.isNotEmpty()) jsonObj.put("extend", extend) 25 | if (localId.isNotEmpty()) jsonObj.put("localId", localId) 26 | if (time > 0) jsonObj.put("time", time) 27 | 28 | return jsonObj.toString() 29 | } 30 | } -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgTextSendDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.im.bean.IMMessage 7 | import com.vmloft.develop.library.im.databinding.ImItemMsgTextSendDelegateBinding 8 | 9 | /** 10 | * Create by lzan13 on 2021/01/05 17:56 11 | * 描述:展示文本消息 Item 12 | */ 13 | class MsgTextSendDelegate(listener: BItemLongListener? = null) : MsgCommonDelegate(longListener = listener) { 14 | 15 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgTextSendDelegateBinding.inflate(inflater, parent, false) 16 | 17 | override fun onBindView(holder: BItemHolder, item: IMMessage) { 18 | super.onBindView(holder, item) 19 | 20 | holder.binding.imMsgContentTV.text = item.body 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/shape_unread_common_bg.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 7 | 8 | 9 | 10 | 11 | 12 | 17 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /vmbase/src/main/res/drawable/selector_circle_common_border.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgCallReceiveDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.im.bean.IMMessage 7 | import com.vmloft.develop.library.im.databinding.ImItemMsgCallReceiveDelegateBinding 8 | 9 | /** 10 | * Create by lzan13 on 2021/01/05 17:56 11 | * 描述:展示通话记录消息 Item 12 | */ 13 | class MsgCallReceiveDelegate(listener: BItemLongListener) : MsgCommonDelegate(longListener = listener) { 14 | 15 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgCallReceiveDelegateBinding.inflate(inflater, parent, false) 16 | 17 | override fun onBindView(holder: BItemHolder, item: IMMessage) { 18 | super.onBindView(holder, item) 19 | 20 | holder.binding.imMsgContentTV.text = item.body 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgTextReceiveDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.im.bean.IMMessage 7 | import com.vmloft.develop.library.im.databinding.ImItemMsgTextReceiveDelegateBinding 8 | 9 | /** 10 | * Create by lzan13 on 2021/01/05 17:56 11 | * 描述:展示文本消息 Item 12 | */ 13 | class MsgTextReceiveDelegate(listener: BItemLongListener? = null) : MsgCommonDelegate(longListener = listener) { 14 | 15 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgTextReceiveDelegateBinding.inflate(inflater, parent, false) 16 | 17 | override fun onBindView(holder: BItemHolder, item: IMMessage) { 18 | super.onBindView(holder, item) 19 | holder.binding.imMsgContentTV.text = item.body 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /vmqr/src/main/java/com/vmloft/develop/library/qr/QRCodeScanLauncher.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.qr 2 | 3 | import android.content.Context 4 | import android.content.Intent 5 | import androidx.activity.result.ActivityResultCaller 6 | import androidx.activity.result.contract.ActivityResultContract 7 | import com.vmloft.develop.library.base.BResultLauncher 8 | 9 | /** 10 | * Create by lzan13 on 2022/3/10 11 | * 描述:二维码扫描解析启动器 12 | */ 13 | class QRCodeScanLauncher(caller: ActivityResultCaller) : BResultLauncher(caller, QRCodeScanContract()) { 14 | } 15 | 16 | /** 17 | * 二维码扫描解析跳转协议 18 | */ 19 | class QRCodeScanContract : ActivityResultContract() { 20 | override fun createIntent(context: Context, input: Int?): Intent { 21 | return Intent(context, QRCodeScanActivity::class.java) 22 | } 23 | 24 | override fun parseResult(resultCode: Int, intent: Intent?): String { 25 | return intent?.getStringExtra("result") ?: "" 26 | } 27 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/layout/activity_web.xml: -------------------------------------------------------------------------------- 1 | 2 | 10 | 11 | 12 | 13 | 21 | 22 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_comment.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/GiftDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Gift 6 | 7 | /** 8 | * Create by lzan13 on 2020/8/9 14:41 9 | * 描述:职业数据 Dao 10 | */ 11 | @Dao 12 | interface GiftDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg gift: Gift) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(gift: Gift) 24 | 25 | /** 26 | * 清空数据 27 | */ 28 | @Query("DELETE FROM gift") 29 | suspend fun clear() 30 | 31 | // @Update 32 | // suspend fun update(gift: Gift) 33 | 34 | /** 35 | * 查询指定数据 36 | */ 37 | @Query("SELECT * FROM gift WHERE id = :id") 38 | suspend fun query(id: String): Gift? 39 | 40 | /** 41 | * 查询全部数据 42 | */ 43 | @Query("SELECT * FROM gift") 44 | suspend fun all(): List 45 | } -------------------------------------------------------------------------------- /vmimage/src/main/java/com/vmloft/develop/library/image/IMGGlideModule.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.image 2 | 3 | import android.content.Context 4 | import android.util.Log 5 | 6 | import com.bumptech.glide.GlideBuilder 7 | import com.bumptech.glide.annotation.GlideModule 8 | import com.bumptech.glide.load.engine.cache.ExternalPreferredCacheDiskCacheFactory 9 | import com.bumptech.glide.module.AppGlideModule 10 | 11 | import com.vmloft.develop.library.base.common.CConstants 12 | 13 | /** 14 | * Create by lzan13 on 2020/04/06 17:56 15 | * 描述:GlideModele 实现 16 | */ 17 | @GlideModule 18 | class IMGGlideModule : AppGlideModule() { 19 | override fun applyOptions(context: Context, builder: GlideBuilder) { 20 | // super.applyOptions(context, builder); 21 | val size = 256 * 1024 * 1024 22 | val dir = CConstants.cacheImageDir 23 | builder.setDiskCache(ExternalPreferredCacheDiskCacheFactory(context, dir, size.toLong())) 24 | builder.setLogLevel(Log.ERROR) 25 | } 26 | 27 | } -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/room/ItemRoomApplyUserDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.room 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.base.BItemDelegate 7 | import com.vmloft.develop.library.data.bean.User 8 | import com.vmloft.develop.library.image.IMGLoader 9 | import com.vmloft.develop.library.im.databinding.ImItemRoomApplyUserDelegateBinding 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/05 17:56 13 | * 描述:申请上麦 Item 14 | */ 15 | class ItemRoomApplyUserDelegate(listener: BItemListener) : BItemDelegate(listener) { 16 | 17 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemRoomApplyUserDelegateBinding.inflate(inflater, parent, false) 18 | 19 | override fun onBindView(holder: BItemHolder, item: User) { 20 | IMGLoader.loadAvatar(holder.binding.imApplyAvatarIV, item.avatar) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/room/ItemRoomApplyUserDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.room 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.vmloft.develop.library.base.BItemDelegate 7 | import com.vmloft.develop.library.data.bean.User 8 | import com.vmloft.develop.library.image.IMGLoader 9 | import com.vmloft.develop.library.im.databinding.ImItemRoomApplyUserDelegateBinding 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/05 17:56 13 | * 描述:申请上麦 Item 14 | */ 15 | class ItemRoomApplyUserDelegate(listener: BItemListener) : BItemDelegate(listener) { 16 | 17 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemRoomApplyUserDelegateBinding.inflate(inflater, parent, false) 18 | 19 | override fun onBindView(holder: BItemHolder, item: User) { 20 | IMGLoader.loadAvatar(holder.binding.imApplyAvatarIV, item.avatar) 21 | } 22 | } 23 | -------------------------------------------------------------------------------- /vmbase/src/main/java/com/vmloft/develop/library/base/BResultLauncher.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.base 2 | 3 | import androidx.activity.result.ActivityResultCallback 4 | import androidx.activity.result.ActivityResultCaller 5 | import androidx.activity.result.ActivityResultLauncher 6 | import androidx.activity.result.contract.ActivityResultContract 7 | 8 | /** 9 | * Create by lzan13 on 2022/3/10 10 | * 描述:对 Android ActivityResultContract 进行简单封装 11 | */ 12 | open class BResultLauncher(caller: ActivityResultCaller, contract: ActivityResultContract) { 13 | 14 | private var launcher: ActivityResultLauncher 15 | private var callback: ActivityResultCallback? = null 16 | 17 | 18 | init { 19 | launcher = caller.registerForActivityResult(contract) { 20 | callback?.onActivityResult(it) 21 | } 22 | } 23 | 24 | fun launch(input: I, callback: ActivityResultCallback) { 25 | this.callback = callback 26 | launcher.launch(input) 27 | } 28 | } 29 | 30 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgCallSendDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.hyphenate.chat.EMMessage 7 | import com.hyphenate.chat.EMTextMessageBody 8 | import com.vmloft.develop.library.im.databinding.ImItemMsgCallSendDelegateBinding 9 | 10 | /** 11 | * Create by lzan13 on 2021/01/05 17:56 12 | * 描述:展示通话记录消息 Item 13 | */ 14 | class MsgCallSendDelegate(listener: BItemLongListener) : MsgCommonDelegate(longListener = listener) { 15 | 16 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgCallSendDelegateBinding.inflate(inflater, parent, false) 17 | 18 | override fun onBindView(holder: BItemHolder, item: EMMessage) { 19 | super.onBindView(holder, item) 20 | 21 | holder.binding.imMsgContentTV.text = (item.body as EMTextMessageBody).message 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgTextSendDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.hyphenate.chat.EMMessage 7 | import com.hyphenate.chat.EMTextMessageBody 8 | 9 | import com.vmloft.develop.library.im.databinding.ImItemMsgTextSendDelegateBinding 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/05 17:56 13 | * 描述:展示文本消息 Item 14 | */ 15 | class MsgTextSendDelegate(listener: BItemLongListener? = null) : MsgCommonDelegate(longListener = listener) { 16 | 17 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgTextSendDelegateBinding.inflate(inflater, parent, false) 18 | 19 | override fun onBindView(holder: BItemHolder, item: EMMessage) { 20 | super.onBindView(holder, item) 21 | 22 | holder.binding.imMsgContentTV.text = (item.body as EMTextMessageBody).message 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/router/JSONServiceImpl.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.router 2 | 3 | import android.content.Context 4 | 5 | import com.alibaba.android.arouter.facade.annotation.Route 6 | import com.alibaba.android.arouter.facade.service.SerializationService 7 | 8 | import com.vmloft.develop.library.common.utils.JsonUtils 9 | 10 | import java.lang.reflect.Type 11 | 12 | /** 13 | * Create by lzan13 on 2020/4/12 13:16 14 | * 描述:自定义序列化实现 15 | */ 16 | @Route(path = "/App/JsonServiceImpl") 17 | class JSONServiceImpl : SerializationService { 18 | override fun json2Object(input: String, clazz: Class): T { 19 | return JsonUtils.fromJson(input,clazz)!! 20 | } 21 | 22 | override fun init(context: Context) { } 23 | 24 | override fun object2Json(instance: Any): String { 25 | return JsonUtils.toJson(instance) 26 | } 27 | 28 | override fun parseObject(input: String, clazz: Type): T { 29 | return JsonUtils.fromJson(input, clazz)!! 30 | } 31 | } -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_logout.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgCallReceiveDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.hyphenate.chat.EMMessage 7 | import com.hyphenate.chat.EMTextMessageBody 8 | 9 | import com.vmloft.develop.library.im.databinding.ImItemMsgCallReceiveDelegateBinding 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/05 17:56 13 | * 描述:展示通话记录消息 Item 14 | */ 15 | class MsgCallReceiveDelegate(listener: BItemLongListener) : MsgCommonDelegate(longListener = listener) { 16 | 17 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgCallReceiveDelegateBinding.inflate(inflater, parent, false) 18 | 19 | override fun onBindView(holder: BItemHolder, item: EMMessage) { 20 | super.onBindView(holder, item) 21 | 22 | holder.binding.imMsgContentTV.text = (item.body as EMTextMessageBody).message 23 | } 24 | } 25 | -------------------------------------------------------------------------------- /vmimem/src/main/java/com/vmloft/develop/library/im/chat/msg/MsgTextReceiveDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.chat.msg 2 | 3 | import android.view.LayoutInflater 4 | import android.view.ViewGroup 5 | 6 | import com.hyphenate.chat.EMMessage 7 | import com.hyphenate.chat.EMTextMessageBody 8 | 9 | import com.vmloft.develop.library.im.databinding.ImItemMsgTextReceiveDelegateBinding 10 | 11 | /** 12 | * Create by lzan13 on 2021/01/05 17:56 13 | * 描述:展示文本消息 Item 14 | */ 15 | class MsgTextReceiveDelegate(listener: BItemLongListener? = null) : MsgCommonDelegate(longListener = listener) { 16 | 17 | override fun initVB(inflater: LayoutInflater, parent: ViewGroup) = ImItemMsgTextReceiveDelegateBinding.inflate(inflater, parent, false) 18 | 19 | override fun onBindView(holder: BItemHolder, item: EMMessage) { 20 | super.onBindView(holder, item) 21 | holder.binding.imMsgContentTV.text = (item.body as EMTextMessageBody).message 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /vmpush/src/develop/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 5 | 6 | 7 | 8 | 13 | 14 | 17 | 18 | 22 | 23 | 26 | 27 | 28 | -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/db/IMDataConverter.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.db 2 | 3 | import androidx.room.TypeConverter 4 | 5 | import com.vmloft.develop.library.common.utils.JsonUtils 6 | import com.vmloft.develop.library.data.bean.Attachment 7 | 8 | /** 9 | * Create by lzan13 on 2021/7/11 10 | * 描述:数据转换器,主要是为了解决 Room 保存嵌套对象内部数据问题 11 | */ 12 | class IMDataConverter { 13 | 14 | // 附件 15 | @TypeConverter 16 | fun attachmentsToJson(list: List): String { 17 | return JsonUtils.toJson(list) 18 | } 19 | 20 | @TypeConverter 21 | fun jsonToAttachmentList(json: String): List? { 22 | return JsonUtils.fromJson>(json) 23 | } 24 | 25 | // 礼物中的附件 26 | @TypeConverter 27 | fun attachmentToJson(data: Attachment): String { 28 | return JsonUtils.toJson(data) 29 | } 30 | 31 | @TypeConverter 32 | fun jsonToAttachment(json: String): Attachment? { 33 | return JsonUtils.fromJson(json, Attachment::class.java) 34 | } 35 | 36 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/item_publish_category_spinner.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 21 | 22 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_password_open.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_picture_album.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_scan.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 13 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_password.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmimage/src/main/res/layout/activity_display_single.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 15 | 16 | 17 | 18 | 24 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/api/GiftAPI.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.api 2 | 3 | import com.vmloft.develop.library.data.bean.* 4 | import com.vmloft.develop.library.request.RPaging 5 | import com.vmloft.develop.library.request.RResponse 6 | 7 | import retrofit2.http.* 8 | 9 | /** 10 | * Create by lzan13 on 2020-02-13 17:35 11 | * 描述:一些通用相关 API 网络接口 12 | */ 13 | interface GiftAPI { 14 | 15 | /** 16 | * 赠送礼物 17 | */ 18 | @FormUrlEncoded 19 | @POST("v1/gift/give") 20 | suspend fun giftGive(@Field("userId") userId: String, @Field("giftId") giftId: String, @Field("count") count: Int): RResponse 21 | 22 | /** 23 | * 获取礼物列表 24 | */ 25 | @GET("v1/gift") 26 | suspend fun giftList(@Query("status") status: Int = 1): RResponse> 27 | 28 | /** 29 | * ------------------ 礼物记录相关 ---------------------- 30 | */ 31 | /** 32 | * 获取收到的礼物列表 33 | */ 34 | @GET("v1/giftRelation") 35 | suspend fun giftRelationList(@Query("user") userId: String): RResponse> 36 | 37 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/MatchDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Match 6 | 7 | /** 8 | * Create by lzan13 on 2021/7/3 14:41 9 | * 描述:匹配数据数据 Dao,这里主要是缓存自己的匹配数据 10 | */ 11 | @Dao 12 | interface MatchDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg match: Match) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(match: Match) 24 | 25 | /** 26 | * 清空数据 27 | */ 28 | @Query("DELETE FROM match") 29 | suspend fun clear() 30 | 31 | /** 32 | * 更新数据 33 | */ 34 | // @Update 35 | // suspend fun update(match: Match) 36 | 37 | /** 38 | * 查询指定数据 39 | */ 40 | @Query("SELECT * FROM match WHERE id = :id") 41 | suspend fun query(id: String): Match? 42 | 43 | /** 44 | * 查询全部数据 45 | */ 46 | @Query("SELECT * FROM match") 47 | suspend fun all(): List 48 | } -------------------------------------------------------------------------------- /vmim/src/main/java/com/vmloft/develop/library/im/core/AckTimer.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.im.core 2 | 3 | import io.socket.client.Ack 4 | import java.util.* 5 | 6 | /** 7 | * Create by lzan13 on 2022/8/11 8 | * 描述:Ack 定时器 9 | */ 10 | abstract class AckTimer(val timeout: Long = 5000) : Ack { 11 | private var timer: Timer? = null 12 | private var called = false 13 | 14 | init { 15 | startTimer() 16 | } 17 | 18 | fun startTimer() { 19 | timer = Timer() 20 | timer?.schedule(object : TimerTask() { 21 | override fun run() { 22 | if (called) return 23 | called = true 24 | cancelTimer() 25 | call(-1, "timeout") 26 | } 27 | }, timeout) 28 | } 29 | 30 | fun cancelTimer() { 31 | timer?.cancel() 32 | timer = null 33 | } 34 | 35 | override fun call(vararg args: Any) { 36 | callback(args[0] as Int, args[1]) 37 | } 38 | 39 | /** 40 | * 结果回调 41 | */ 42 | abstract fun callback(code: Int, obj: Any) 43 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/values/strings.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 图片保存成功 4 | 图片保存失败 5 | 6 | 你有新的消息,请注意查看 7 | 8 | 9 | 加载中... 10 | 请稍等... 11 | ~ 到底了呢 ~ 12 | 13 | 14 | 保存 15 | 提交 16 | 取消 17 | 确定 18 | 完成 19 | 发布 20 | 同意 21 | 不同意 22 | 我知道了 23 | 跳过 24 | 25 | 26 | 请输入... 27 | 输入内容不能为空 28 | -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # You can control the set of applied configuration files using the 3 | # proguardFiles setting in build.gradle. 4 | # 5 | # For more details, see 6 | # http://developer.android.com/guide/developing/tools/proguard.html 7 | 8 | # If your project uses WebView with JS, uncomment the following 9 | # and specify the fully qualified class name to the JavaScript interface 10 | # class: 11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 12 | # public *; 13 | #} 14 | 15 | # Uncomment this to preserve the line number information for 16 | # debugging stack traces. 17 | #-keepattributes SourceFile,LineNumberTable 18 | 19 | # If you keep the line number information, uncomment this to 20 | # hide the original source file name. 21 | #-renamesourcefileattribute SourceFile 22 | 23 | ### 自身项目混淆配置 24 | ### 通过 proguard 等混淆/优化工具处理 apk 时,proguard 可能会将 R.java 删除,如果遇到这个问题,请添加如下配置 25 | -keep public class com.vmloft.develop.app.template.R$*{ 26 | public static final int *; 27 | } 28 | -keep class com.vmloft.develop.app.template.**{*;} 29 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/ConfigDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Config 6 | 7 | /** 8 | * Create by lzan13 on 2021/7/3 14:41 9 | * 描述:配置数据数据 Dao 10 | */ 11 | @Dao 12 | interface ConfigDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg config: Config) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(config: Config) 24 | 25 | /** 26 | * 清空数据 27 | */ 28 | @Query("DELETE FROM config") 29 | suspend fun clear() 30 | 31 | /** 32 | * 更新数据 33 | */ 34 | // @Update 35 | // suspend fun update(match: Config) 36 | 37 | /** 38 | * 查询指定数据 39 | */ 40 | @Query("SELECT * FROM config WHERE alias = :alias") 41 | suspend fun query(alias: String): Config? 42 | 43 | /** 44 | * 查询全部数据 45 | */ 46 | @Query("SELECT * FROM config") 47 | suspend fun all(): List 48 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/VersionDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Version 6 | 7 | /** 8 | * Create by lzan13 on 2021/7/3 14:41 9 | * 描述:版本检查数据 Dao 10 | */ 11 | @Dao 12 | interface VersionDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg version: Version) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(version: Version) 24 | 25 | /** 26 | * 清空数据 27 | */ 28 | @Query("DELETE FROM version") 29 | suspend fun clear() 30 | 31 | /** 32 | * 更新数据 33 | */ 34 | // @Update 35 | // suspend fun update(version: Version) 36 | 37 | /** 38 | * 查询指定数据 39 | */ 40 | @Query("SELECT * FROM version WHERE id = :id") 41 | suspend fun query(id: String): Version? 42 | 43 | /** 44 | * 查询全部数据 45 | */ 46 | @Query("SELECT * FROM version") 47 | suspend fun all(): List 48 | } -------------------------------------------------------------------------------- /vmbase/src/main/res/layout/widget_common_empty_status_view.xml: -------------------------------------------------------------------------------- 1 | 2 | 11 | 12 | 17 | 18 | 27 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/CategoryDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Category 6 | 7 | /** 8 | * Create by lzan13 on 2020/8/9 14:41 9 | * 描述:分类数据 Dao 10 | */ 11 | @Dao 12 | interface CategoryDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg category: Category) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(category: Category) 24 | 25 | /** 26 | * 清空数据 27 | */ 28 | @Query("DELETE FROM category") 29 | suspend fun clear() 30 | 31 | /** 32 | * 更新数据 33 | */ 34 | // @Update 35 | // suspend fun update(category: Category) 36 | 37 | /** 38 | * 查询指定数据 39 | */ 40 | @Query("SELECT * FROM category WHERE id = :id") 41 | suspend fun query(id: String): Category? 42 | 43 | /** 44 | * 查询全部数据 45 | */ 46 | @Query("SELECT * FROM category") 47 | suspend fun all(): List 48 | } -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/ui/trade/GoldDescActivity.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.ui.trade 2 | 3 | import com.alibaba.android.arouter.facade.annotation.Route 4 | 5 | import com.vmloft.develop.app.template.R 6 | import com.vmloft.develop.app.template.common.Constants 7 | import com.vmloft.develop.app.template.databinding.ActivityGoldDescBinding 8 | import com.vmloft.develop.app.template.router.AppRouter 9 | import com.vmloft.develop.library.base.BActivity 10 | import com.vmloft.develop.library.base.router.CRouter 11 | 12 | /** 13 | * Create by lzan13 on 2021/8/11 14 | * 描述:金币相关界面 15 | */ 16 | @Route(path = AppRouter.appGoldDesc) 17 | class GoldDescActivity: BActivity() { 18 | 19 | override fun initVB() = ActivityGoldDescBinding.inflate(layoutInflater) 20 | 21 | override fun initUI() { 22 | super.initUI() 23 | setTopTitle(R.string.gold_desc) 24 | 25 | mBinding.goFeedbackTV.setOnClickListener { CRouter.go(AppRouter.appFeedback, Constants.FeedbackType.opinion) } 26 | } 27 | 28 | override fun initData() { 29 | 30 | } 31 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Order.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2020/7/30 16:04 11 | * 描述:订单对象数据 Bean 12 | */ 13 | @Parcelize 14 | data class Order( 15 | @SerializedName("_id") 16 | var id: String = "", 17 | var owner: String = "", // 订单所属用户 18 | var price: Int = 0, // 订单价格 19 | var realPrice: Int = 0, // 实际价格 20 | var commoditys: List = mutableListOf(), // 包含的商品 21 | var status: Int = 0, // 订单状态 0-待支付 1-支付成功 2-已关闭 22 | var title: String = "", // 订单标题 23 | var payType: Int = 0, // 支付类型 0-微信 1-支付宝,支付成功才会有 24 | var remarks: String = "", // 订单备注 25 | var extend: String = "", // 其他扩展 26 | var createdAt: Long = 0, 27 | var updatedAt: Long = 0, 28 | ) : Parcelable { 29 | 30 | override fun equals(other: Any?): Boolean { 31 | (other as? Order)?.let { 32 | return it.id == this.id 33 | } 34 | return false 35 | } 36 | } -------------------------------------------------------------------------------- /vmimage/src/main/res/layout/activity_display_multi.xml: -------------------------------------------------------------------------------- 1 | 2 | 9 | 10 | 16 | 17 | 18 | 19 | 25 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2022 lzan13 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /vmads/src/googlePlay/AndroidManifest.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 18 | 19 | 22 | 25 | 26 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/api/BlacklistAPI.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.api 2 | 3 | import com.vmloft.develop.library.data.bean.* 4 | import com.vmloft.develop.library.request.RPaging 5 | import com.vmloft.develop.library.request.RResponse 6 | 7 | import retrofit2.http.* 8 | 9 | /** 10 | * Create by lzan13 on 2020/04/07 17:35 11 | * 描述:黑名单相关 API 接口 12 | */ 13 | interface BlacklistAPI { 14 | 15 | /** 16 | * 拉黑 17 | */ 18 | @FormUrlEncoded 19 | @POST("v1/blacklist") 20 | suspend fun blacklist(@Field("id") id: String): RResponse 21 | 22 | /** 23 | * 取消拉黑 24 | */ 25 | @FormUrlEncoded 26 | @POST("v1/blacklist/cancel") 27 | suspend fun cancel(@Field("id") id: String): RResponse 28 | 29 | /** 30 | * 获取拉黑列表 31 | * @param page 32 | * @param limit 33 | * @param type 关系类型 0-我拉黑的 1-拉黑我的 2-互相拉黑 34 | */ 35 | @GET("v1/blacklist") 36 | suspend fun getBlacklist( 37 | @Query("type") type: Int, 38 | @Query("page") page: Int, 39 | @Query("limit") limit: Int, 40 | ): RResponse> 41 | 42 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Match.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | import androidx.room.Entity 5 | import androidx.room.Ignore 6 | import androidx.room.PrimaryKey 7 | 8 | import com.google.gson.annotations.SerializedName 9 | 10 | import kotlinx.parcelize.Parcelize 11 | 12 | /** 13 | * Create by lzan13 on 2020/7/30 16:15 14 | * 描述:喜欢数据 Bean 15 | */ 16 | @Entity 17 | @Parcelize 18 | data class Match( 19 | @PrimaryKey 20 | @SerializedName("_id") 21 | var id: String = "", 22 | var user: User = User(), 23 | var content: String = "", // 匹配内容 24 | var emotion: Int = 0, // 心情 0-开心 1-平淡 2-难过 3-愤怒 25 | var gender: Int = 2, // 性别 0-女 1-男 2-神秘 26 | var type: Int = 0, // 类型 0-心情匹配 1-急速聊天 2-心情树洞 27 | 28 | var filterGender: Int = -1, // 过滤方式,这个只是自己本地过滤配置 29 | ) : Parcelable { 30 | @Ignore 31 | constructor() : this("") 32 | 33 | override fun equals(other: Any?): Boolean { 34 | (other as? Match)?.let { 35 | return it.id == this.id || it.user == this.user 36 | } 37 | return false 38 | } 39 | } -------------------------------------------------------------------------------- /vmim/src/main/res/drawable/im_ic_avatar_midlife.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /vmim/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 21 | 22 | 26 | 27 | 31 | 32 | -------------------------------------------------------------------------------- /vmimage/src/main/java/com/vmloft/develop/library/image/BlurTransformation.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.image 2 | 3 | import android.graphics.Bitmap 4 | 5 | import com.bumptech.glide.load.Key 6 | import com.bumptech.glide.load.engine.bitmap_recycle.BitmapPool 7 | import com.bumptech.glide.load.resource.bitmap.BitmapTransformation 8 | 9 | import com.vmloft.develop.library.common.BuildConfig 10 | import com.vmloft.develop.library.tools.utils.bitmap.VMBlur.stackBlurBitmap 11 | 12 | import java.security.MessageDigest 13 | 14 | /** 15 | * Create by lzan13 on 2020/04/06 17:56 16 | * 描述:使用 RenderScript 模糊图片 17 | */ 18 | class BlurTransformation : BitmapTransformation() { 19 | private val id = "${BuildConfig.LIBRARY_PACKAGE_NAME}.glide.BlurTransformation" 20 | 21 | override fun transform(pool: BitmapPool, toTransform: Bitmap, outWidth: Int, outHeight: Int): Bitmap { 22 | val blurBitmap = stackBlurBitmap(toTransform, 15, 10, false) 23 | return blurBitmap!! 24 | } 25 | 26 | override fun updateDiskCacheKey(messageDigest: MessageDigest) { 27 | messageDigest.update(id.toByteArray(Key.CHARSET)) 28 | } 29 | } -------------------------------------------------------------------------------- /vmimem/src/main/res/values/styles.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 9 | 10 | 11 | 12 | 16 | 17 | 21 | 22 | 26 | 27 | 31 | 32 | -------------------------------------------------------------------------------- /vmcommon/src/main/java/com/vmloft/develop/library/common/widget/refresh/DoubleCircleFooter.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.common.widget.refresh 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.LayoutInflater 6 | 7 | import com.scwang.smart.refresh.layout.api.RefreshFooter 8 | import com.scwang.smart.refresh.layout.simple.SimpleComponent 9 | 10 | import com.vmloft.develop.library.common.databinding.WidgetCommonFooterDoubleCircleBinding 11 | 12 | /** 13 | * Create by lzan13 on 2021/9/17 14 | * 描述:自定义上拉加载更多样式 15 | */ 16 | class DoubleCircleFooter @JvmOverloads constructor( 17 | context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0, 18 | ) : SimpleComponent(context, attrs, defStyleAttr), RefreshFooter { 19 | val mBinding = WidgetCommonFooterDoubleCircleBinding.inflate(LayoutInflater.from(context), this, true) 20 | 21 | override fun setNoMoreData(noMore: Boolean): Boolean { 22 | mBinding.commonLoadingView.visibility = if (noMore) GONE else VISIBLE 23 | mBinding.commonNoMoreTV.visibility = if (noMore) VISIBLE else GONE 24 | return true 25 | } 26 | } -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/db/ProfessionDao.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.db 2 | 3 | import androidx.room.* 4 | 5 | import com.vmloft.develop.library.data.bean.Profession 6 | 7 | /** 8 | * Create by lzan13 on 2020/8/9 14:41 9 | * 描述:职业数据 Dao 10 | */ 11 | @Dao 12 | interface ProfessionDao { 13 | /** 14 | * 插入数据,如果已存在则会覆盖 15 | */ 16 | @Insert(onConflict = OnConflictStrategy.REPLACE) 17 | suspend fun insert(vararg profession: Profession) 18 | 19 | /** 20 | * 删除指定数据 21 | */ 22 | @Delete 23 | suspend fun delete(profession: Profession) 24 | 25 | /** 26 | * 清空数据库 27 | */ 28 | @Query("DELETE FROM profession") 29 | suspend fun clear() 30 | 31 | /** 32 | * 更新数据 33 | */ 34 | // @Update 35 | // suspend fun update(profession: Profession) 36 | 37 | /** 38 | * 查询指定数据 39 | */ 40 | @Query("SELECT * FROM profession WHERE id = :id") 41 | suspend fun query(id: String): Profession? 42 | 43 | /** 44 | * 查询全部数据 45 | */ 46 | @Query("SELECT * FROM profession") 47 | suspend fun all(): List 48 | } -------------------------------------------------------------------------------- /vmimem/src/main/res/drawable/im_ic_avatar_midlife.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | 15 | 16 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/api/RelationAPI.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.api 2 | 3 | import com.vmloft.develop.library.data.bean.User 4 | import com.vmloft.develop.library.request.RPaging 5 | import com.vmloft.develop.library.request.RResponse 6 | 7 | import retrofit2.http.* 8 | 9 | /** 10 | * Create by lzan13 on 2020-02-13 17:35 11 | * 描述:用户关系相关 API 接口 12 | */ 13 | interface RelationAPI { 14 | 15 | /** 16 | * 关注 17 | */ 18 | @FormUrlEncoded 19 | @POST("v1/relation") 20 | suspend fun follow(@Field("id") id: String): RResponse 21 | 22 | /** 23 | * 取消关注 24 | */ 25 | @FormUrlEncoded 26 | @POST("v1/relation/cancelFollow") 27 | suspend fun cancelFollow(@Field("id") id: String): RResponse 28 | 29 | /** 30 | * 获取关注列表 31 | * @param page 32 | * @param limit 33 | * @param type 关系类型 0-我关注的 1-关注我的 2-互相关注 34 | */ 35 | @GET("v1/relation") 36 | suspend fun relationList( 37 | @Query("type") type: Int, 38 | @Query("page") page: Int, 39 | @Query("limit") limit: Int, 40 | ): RResponse> 41 | 42 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_me.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_top.xml: -------------------------------------------------------------------------------- 1 | 6 | 10 | 11 | -------------------------------------------------------------------------------- /vmcommon/src/main/res/drawable/ic_game.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /vmdata/src/main/java/com/vmloft/develop/library/data/bean/Feedback.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.library.data.bean 2 | 3 | import android.os.Parcelable 4 | 5 | import com.google.gson.annotations.SerializedName 6 | 7 | import kotlinx.parcelize.Parcelize 8 | 9 | /** 10 | * Create by lzan13 on 2021/11/22 11 | * 描述:反馈数据 bean 12 | */ 13 | @Parcelize 14 | data class Feedback( 15 | @SerializedName("_id") 16 | var id: String = "", 17 | var owner: User = User(), // type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // 反馈用户,可能为空 18 | var contact: String = "", // type: String }, // 联系方式,可以使手机号,可以是邮箱 19 | var content: String = "", // type: String, required: true }, // 反馈内容 20 | var remark: String = "", // type: String }, // 备注信息,可填写处理之后的说明 21 | var user: User = User(), // type: mongoose.Schema.Types.ObjectId, ref: 'User' }, // 相关用户 22 | var post: Post = Post(), // type: mongoose.Schema.Types.ObjectId, ref: 'Post' }, // 相关帖子 23 | var status: Int = 0, // 处理状态 0-待处理 1-处理中 2-处理完成 24 | var attachments: MutableList = mutableListOf(), // 附件信息 25 | var type: Int = 0, // 反馈类型 0-意见建议 1-广告 2-政治敏感 3-色情低俗 4-血腥暴力 5-不文明 6-涉嫌诈骗 7-其他 26 | ) : Parcelable { 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/vmloft/develop/app/template/common/Constants.kt: -------------------------------------------------------------------------------- 1 | package com.vmloft.develop.app.template.common 2 | 3 | /** 4 | * Create by lzan13 on 2020-02-18 14:43 5 | * 常量类 6 | */ 7 | object Constants { 8 | 9 | // App 层事件总线 Key 10 | object Event { 11 | const val finishPrev = "finishPrev" // 结束上一个界面 12 | const val createPost = "createPost" // 创建帖子 13 | const val createComment = "createComment" // 创建评论 14 | const val shieldPost = "shieldPost" // 屏蔽帖子 15 | const val orderStatus = "orderStatus" // 订单状态更新 16 | const val videoReward = "videoReward" // 金币任务奖励 17 | } 18 | 19 | /** 20 | * 反馈类型 21 | */ 22 | object FeedbackType { 23 | const val opinion = 0 // 意见建议 24 | const val ads = 1 // 广告引流 25 | const val sensitivity = 2 // 政治敏感 26 | const val illegal = 3 // 违法违规 27 | const val pornVulgar = 4 // 色情低俗 28 | const val violence = 5 // 血腥暴力 29 | const val guide = 6 // 诱导信息 30 | const val uncivilized = 7 // 谩骂攻击 31 | const val fraud = 8 // 涉嫌诈骗 32 | const val uncomfortable = 9 // 引人不适 33 | const val other = 10 // 其它 34 | } 35 | } --------------------------------------------------------------------------------