├── 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 |
--------------------------------------------------------------------------------
/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 | }
--------------------------------------------------------------------------------