├── app ├── .gitignore ├── src │ ├── main │ │ ├── java │ │ │ └── com │ │ │ │ └── nan │ │ │ │ └── xarch │ │ │ │ ├── eventbus │ │ │ │ ├── core │ │ │ │ │ ├── EmptyMessage.kt │ │ │ │ │ ├── EventLiveData.kt │ │ │ │ │ ├── EventObserverWrapper.kt │ │ │ │ │ └── MutableLiveData.java │ │ │ │ └── XEventBus.kt │ │ │ │ ├── network │ │ │ │ ├── base │ │ │ │ │ ├── IService.kt │ │ │ │ │ └── BaseResponse.kt │ │ │ │ ├── INetworkService.kt │ │ │ │ ├── NetworkApi.kt │ │ │ │ └── interceptor │ │ │ │ │ ├── CommonRequestInterceptor.kt │ │ │ │ │ └── CommonResponseInterceptor.kt │ │ │ │ ├── bean │ │ │ │ ├── BannerBean.kt │ │ │ │ ├── LoadError.kt │ │ │ │ ├── GoodsBean.kt │ │ │ │ ├── CatagoryBean.kt │ │ │ │ ├── exception │ │ │ │ │ ├── GlobalException.kt │ │ │ │ │ └── NetworkException.kt │ │ │ │ ├── Tab.kt │ │ │ │ ├── VideoBean.kt │ │ │ │ └── User.kt │ │ │ │ ├── item │ │ │ │ ├── Test1ViewData.kt │ │ │ │ ├── Test2ViewData.kt │ │ │ │ ├── CatagoryListViewData.kt │ │ │ │ ├── GoodsViewData.kt │ │ │ │ ├── VideoViewData.kt │ │ │ │ ├── BannerViewData.kt │ │ │ │ ├── LargeVideoViewData.kt │ │ │ │ ├── CatagoryViewData.kt │ │ │ │ ├── LoadMoreViewData.kt │ │ │ │ ├── GoodsViewDelegate.kt │ │ │ │ ├── VideoViewDelegate.kt │ │ │ │ ├── LargeVideoViewDelegate.kt │ │ │ │ ├── Test2ViewDelegate.kt │ │ │ │ ├── CatagoryViewDelegate.kt │ │ │ │ ├── Test1ViewDelegate.kt │ │ │ │ ├── CatagoryListViewDelegate.kt │ │ │ │ ├── BannerViewDelegate.kt │ │ │ │ └── LoadMoreViewDelegate.kt │ │ │ │ ├── base │ │ │ │ ├── IGetPageName.kt │ │ │ │ ├── list │ │ │ │ │ ├── multitype │ │ │ │ │ │ ├── ViewHolderDelegate.kt │ │ │ │ │ │ ├── ViewHolderInflater.kt │ │ │ │ │ │ ├── ItemViewBinder.kt │ │ │ │ │ │ ├── DefaultLinker.kt │ │ │ │ │ │ ├── Type.kt │ │ │ │ │ │ ├── DelegateNotFoundException.kt │ │ │ │ │ │ ├── JavaClassLinker.kt │ │ │ │ │ │ ├── OneToManyFlow.kt │ │ │ │ │ │ ├── KotlinClassLinker.kt │ │ │ │ │ │ ├── Linker.kt │ │ │ │ │ │ ├── MutableTypes.kt │ │ │ │ │ │ ├── ClassLinkerBridge.kt │ │ │ │ │ │ ├── OneToManyBuilder.kt │ │ │ │ │ │ ├── Types.kt │ │ │ │ │ │ ├── ViewDelegate.kt │ │ │ │ │ │ └── OneToManyEndpoint.kt │ │ │ │ │ ├── base │ │ │ │ │ │ ├── BaseViewData.kt │ │ │ │ │ │ ├── BaseAdapter.kt │ │ │ │ │ │ ├── BaseRecyclerViewModel.kt │ │ │ │ │ │ └── BaseItemViewDelegate.kt │ │ │ │ │ ├── loadmore │ │ │ │ │ │ └── LoadMoreRecyclerView.kt │ │ │ │ │ └── pullrefresh │ │ │ │ │ │ └── PullRefreshLayout.kt │ │ │ │ ├── BaseViewModel.kt │ │ │ │ ├── BaseFragment.kt │ │ │ │ └── BaseActivity.kt │ │ │ │ ├── module │ │ │ │ ├── gold │ │ │ │ │ ├── GoldViewModel.kt │ │ │ │ │ └── GoldFragment.kt │ │ │ │ ├── main │ │ │ │ │ └── MainViewModel.kt │ │ │ │ ├── mine │ │ │ │ │ ├── MineViewModel.kt │ │ │ │ │ └── MineFragment.kt │ │ │ │ ├── about │ │ │ │ │ ├── AboutViewModel.kt │ │ │ │ │ └── AboutActivity.kt │ │ │ │ ├── smallvideo │ │ │ │ │ ├── SmallVideoViewModel.kt │ │ │ │ │ └── SmallVideoFragment.kt │ │ │ │ ├── home │ │ │ │ │ ├── HomeViewModel.kt │ │ │ │ │ └── HomeFragment.kt │ │ │ │ ├── acgn │ │ │ │ │ ├── AcgnFragment.kt │ │ │ │ │ └── AcgnViewModel.kt │ │ │ │ └── discovery │ │ │ │ │ └── DiscoveryFragment.kt │ │ │ │ ├── constant │ │ │ │ ├── VideoType.kt │ │ │ │ ├── EventName.kt │ │ │ │ ├── ErrorCode.kt │ │ │ │ ├── PageState.kt │ │ │ │ ├── Key.kt │ │ │ │ ├── TabId.kt │ │ │ │ ├── PageName.kt │ │ │ │ └── LoadMoreState.kt │ │ │ │ ├── widget │ │ │ │ ├── TabIndicatorView.kt │ │ │ │ ├── SettingItemView.kt │ │ │ │ ├── GridItemDecoration.kt │ │ │ │ ├── NavigationView.kt │ │ │ │ └── RoundAngleImageView.java │ │ │ │ ├── persistence │ │ │ │ └── database │ │ │ │ │ ├── XDatabase.kt │ │ │ │ │ └── dao │ │ │ │ │ └── UserDao.kt │ │ │ │ ├── util │ │ │ │ ├── Logger.kt │ │ │ │ ├── reflect │ │ │ │ │ └── ReflectArgument.java │ │ │ │ ├── NetworkHelper.kt │ │ │ │ ├── Extensions.kt │ │ │ │ └── GlobalActivityManager.kt │ │ │ │ └── XArchApplication.kt │ │ ├── res │ │ │ ├── drawable-xhdpi │ │ │ │ ├── btn_acgn.png │ │ │ │ ├── btn_gold.png │ │ │ │ ├── btn_home.png │ │ │ │ ├── btn_mine.png │ │ │ │ ├── icon_cat.png │ │ │ │ ├── icon_up.png │ │ │ │ ├── icon_back.png │ │ │ │ ├── icon_empty.png │ │ │ │ ├── icon_game.png │ │ │ │ ├── icon_girl.png │ │ │ │ ├── icon_learn.png │ │ │ │ ├── icon_more.png │ │ │ │ ├── icon_movie.png │ │ │ │ ├── icon_music.png │ │ │ │ ├── icon_user.png │ │ │ │ ├── btn_discovery.png │ │ │ │ ├── icon_history.png │ │ │ │ ├── icon_setting.png │ │ │ │ ├── btn_small_video.png │ │ │ │ ├── icon_collection.png │ │ │ │ ├── icon_no_network.png │ │ │ │ ├── icon_photography.png │ │ │ │ ├── icon_play_count.png │ │ │ │ ├── icon_subscribe.png │ │ │ │ ├── btn_acgn_selected.png │ │ │ │ ├── btn_gold_selected.png │ │ │ │ ├── btn_home_selected.png │ │ │ │ ├── btn_mine_selected.png │ │ │ │ ├── icon_bodybuilding.png │ │ │ │ ├── icon_network_error.png │ │ │ │ ├── icon_video_duration.png │ │ │ │ ├── btn_discovery_selected.png │ │ │ │ └── btn_small_video_selected.png │ │ │ ├── drawable-xxhdpi │ │ │ │ ├── icon_up.png │ │ │ │ ├── btn_acgn.png │ │ │ │ ├── btn_gold.png │ │ │ │ ├── btn_home.png │ │ │ │ ├── btn_mine.png │ │ │ │ ├── icon_back.png │ │ │ │ ├── icon_cat.png │ │ │ │ ├── icon_empty.png │ │ │ │ ├── icon_game.png │ │ │ │ ├── icon_girl.png │ │ │ │ ├── icon_learn.png │ │ │ │ ├── icon_more.png │ │ │ │ ├── icon_movie.png │ │ │ │ ├── icon_music.png │ │ │ │ ├── icon_user.png │ │ │ │ ├── icon_history.png │ │ │ │ ├── icon_setting.png │ │ │ │ ├── btn_discovery.png │ │ │ │ ├── btn_small_video.png │ │ │ │ ├── icon_collection.png │ │ │ │ ├── icon_no_network.png │ │ │ │ ├── icon_play_count.png │ │ │ │ ├── icon_subscribe.png │ │ │ │ ├── btn_acgn_selected.png │ │ │ │ ├── btn_gold_selected.png │ │ │ │ ├── btn_home_selected.png │ │ │ │ ├── btn_mine_selected.png │ │ │ │ ├── icon_bodybuilding.png │ │ │ │ ├── icon_photography.png │ │ │ │ ├── icon_network_error.png │ │ │ │ ├── icon_video_duration.png │ │ │ │ ├── btn_discovery_selected.png │ │ │ │ └── btn_small_video_selected.png │ │ │ ├── mipmap-hdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-mdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── drawable-xxxhdpi │ │ │ │ ├── btn_acgn.png │ │ │ │ ├── btn_gold.png │ │ │ │ ├── btn_home.png │ │ │ │ ├── btn_mine.png │ │ │ │ ├── icon_back.png │ │ │ │ ├── icon_cat.png │ │ │ │ ├── icon_game.png │ │ │ │ ├── icon_girl.png │ │ │ │ ├── icon_more.png │ │ │ │ ├── icon_up.png │ │ │ │ ├── icon_user.png │ │ │ │ ├── icon_empty.png │ │ │ │ ├── icon_learn.png │ │ │ │ ├── icon_movie.png │ │ │ │ ├── icon_music.png │ │ │ │ ├── btn_discovery.png │ │ │ │ ├── icon_history.png │ │ │ │ ├── icon_setting.png │ │ │ │ ├── icon_subscribe.png │ │ │ │ ├── btn_small_video.png │ │ │ │ ├── icon_collection.png │ │ │ │ ├── icon_no_network.png │ │ │ │ ├── icon_photography.png │ │ │ │ ├── icon_play_count.png │ │ │ │ ├── btn_acgn_selected.png │ │ │ │ ├── btn_gold_selected.png │ │ │ │ ├── btn_home_selected.png │ │ │ │ ├── btn_mine_selected.png │ │ │ │ ├── icon_bodybuilding.png │ │ │ │ ├── icon_network_error.png │ │ │ │ ├── icon_video_duration.png │ │ │ │ ├── btn_discovery_selected.png │ │ │ │ └── btn_small_video_selected.png │ │ │ ├── mipmap-xhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── mipmap-xxxhdpi │ │ │ │ ├── ic_launcher.png │ │ │ │ └── ic_launcher_round.png │ │ │ ├── values │ │ │ │ ├── ids.xml │ │ │ │ ├── dimens.xml │ │ │ │ ├── attrs.xml │ │ │ │ ├── themes.xml │ │ │ │ ├── strings.xml │ │ │ │ └── colors.xml │ │ │ ├── drawable │ │ │ │ ├── btn_acgn_unselected.xml │ │ │ │ ├── btn_gold_unselected.xml │ │ │ │ ├── btn_home_unselected.xml │ │ │ │ ├── btn_mine_unselected.xml │ │ │ │ ├── btn_discovery_unselected.xml │ │ │ │ ├── btn_small_video_unselected.xml │ │ │ │ ├── bg_error_action.xml │ │ │ │ ├── bg_goods_item.xml │ │ │ │ ├── bg_video_item.xml │ │ │ │ ├── bg_catagory_list_item.xml │ │ │ │ ├── selector_btn_acgn.xml │ │ │ │ ├── selector_btn_gold.xml │ │ │ │ ├── selector_btn_home.xml │ │ │ │ ├── selector_btn_mine.xml │ │ │ │ ├── item_selector.xml │ │ │ │ ├── selector_icon_back.xml │ │ │ │ ├── bg_video_item_cover.xml │ │ │ │ ├── selector_btn_discovery.xml │ │ │ │ ├── selector_btn_small_video.xml │ │ │ │ ├── item_selector_dark.xml │ │ │ │ └── fg_video_item_cover.xml │ │ │ ├── mipmap-anydpi-v26 │ │ │ │ ├── ic_launcher.xml │ │ │ │ └── ic_launcher_round.xml │ │ │ ├── color │ │ │ │ └── selector_bottom_bar_title_color.xml │ │ │ ├── xml │ │ │ │ ├── network_security_config_test.xml │ │ │ │ └── network_security_config.xml │ │ │ ├── layout │ │ │ │ ├── fragment_small_video.xml │ │ │ │ ├── item_catagory_list.xml │ │ │ │ ├── fragment_acgn.xml │ │ │ │ ├── fragment_home.xml │ │ │ │ ├── fragment_discovery.xml │ │ │ │ ├── fragment_gold.xml │ │ │ │ ├── item_test2.xml │ │ │ │ ├── view_recycler_header.xml │ │ │ │ ├── activity_about.xml │ │ │ │ ├── item_banner.xml │ │ │ │ ├── view_recycler_footer.xml │ │ │ │ ├── item_test1.xml │ │ │ │ ├── item_catagory.xml │ │ │ │ ├── view_setting_item.xml │ │ │ │ ├── view_x_recycler.xml │ │ │ │ ├── view_navigation.xml │ │ │ │ ├── view_tab_indicator.xml │ │ │ │ ├── activity_main.xml │ │ │ │ ├── item_goods.xml │ │ │ │ └── view_prompt.xml │ │ │ └── drawable-v24 │ │ │ │ └── ic_launcher_foreground.xml │ │ └── AndroidManifest.xml │ ├── test │ │ └── java │ │ │ └── com │ │ │ └── nan │ │ │ └── xarch │ │ │ └── ExampleUnitTest.kt │ └── androidTest │ │ └── java │ │ └── com │ │ └── nan │ │ └── xarch │ │ └── ExampleInstrumentedTest.kt └── proguard-rules.pro ├── settings.gradle ├── art ├── 二次元.png ├── 发现.png ├── 封面.jpeg ├── 我的.png └── 首页.png ├── dep.sh ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── .gitignore ├── gradle.properties ├── schemas └── com.nan.xarch.persistence.database.XDatabase │ └── 1.json ├── gradlew.bat └── config.gradle /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build -------------------------------------------------------------------------------- /settings.gradle: -------------------------------------------------------------------------------- 1 | rootProject.name = "XArch" 2 | include ':app' 3 | -------------------------------------------------------------------------------- /art/二次元.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/art/二次元.png -------------------------------------------------------------------------------- /art/发现.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/art/发现.png -------------------------------------------------------------------------------- /art/封面.jpeg: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/art/封面.jpeg -------------------------------------------------------------------------------- /art/我的.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/art/我的.png -------------------------------------------------------------------------------- /art/首页.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/art/首页.png -------------------------------------------------------------------------------- /dep.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | ./gradlew :app:dependencies | grep '^[+|\\\n]' > .dep.txt 4 | -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.jar: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/gradle/wrapper/gradle-wrapper.jar -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/eventbus/core/EmptyMessage.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.eventbus.core 2 | 3 | object EmptyMessage { 4 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/base/IService.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network.base 2 | 3 | interface IService { 4 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_acgn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_acgn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_gold.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_mine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_mine.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_up.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_up.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_game.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_girl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_learn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_learn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_movie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_music.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_user.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_acgn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_acgn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_gold.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_mine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_mine.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_game.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_girl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_learn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_learn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_movie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_music.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_user.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_acgn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_acgn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_gold.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_gold.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_home.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_home.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_mine.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_mine.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_back.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_back.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_cat.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_cat.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_game.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_game.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_girl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_girl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_more.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_more.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_up.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_user.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_user.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_discovery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_history.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_history.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_empty.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_empty.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_learn.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_learn.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_movie.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_movie.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_music.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_music.png -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/BannerBean.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | data class BannerBean( 4 | val images: List 5 | ) 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_small_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_small_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_collection.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_no_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_no_network.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_photography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_photography.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_play_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_play_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_subscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_subscribe.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_discovery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_small_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_small_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_collection.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_no_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_no_network.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_play_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_play_count.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_subscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_subscribe.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_discovery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_discovery.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_history.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_history.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_setting.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_setting.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_subscribe.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_subscribe.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-hdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-hdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-mdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-mdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/values/ids.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_acgn_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_acgn_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_gold_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_gold_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_home_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_home_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_bodybuilding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_bodybuilding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_network_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_network_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_acgn_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_acgn_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_gold_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_gold_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_home_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_home_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_bodybuilding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_bodybuilding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_photography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_photography.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_small_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_small_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_collection.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_collection.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_no_network.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_no_network.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_photography.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_photography.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_play_count.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_play_count.png -------------------------------------------------------------------------------- /app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/icon_video_duration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/icon_video_duration.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_network_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_network_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/icon_video_duration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/icon_video_duration.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_acgn_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_acgn_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_gold_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_gold_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_home_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_home_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_mine_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_mine_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_bodybuilding.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_bodybuilding.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_network_error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_network_error.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/icon_video_duration.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/icon_video_duration.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_discovery_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_discovery_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_discovery_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_discovery_selected.png -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea 5 | .DS_Store 6 | /build 7 | /captures 8 | .externalNativeBuild 9 | .cxx 10 | local.properties 11 | -------------------------------------------------------------------------------- /app/src/main/res/drawable-xhdpi/btn_small_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xhdpi/btn_small_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxhdpi/btn_small_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxhdpi/btn_small_video_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_discovery_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_discovery_selected.png -------------------------------------------------------------------------------- /app/src/main/res/drawable-xxxhdpi/btn_small_video_selected.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/huannan/XArch/HEAD/app/src/main/res/drawable-xxxhdpi/btn_small_video_selected.png -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/LoadError.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | 5 | object LoadError : ArrayList>() { 6 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/Test1ViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | 5 | class Test1ViewData(data: String) : BaseViewData(data) { 6 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/Test2ViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | 5 | class Test2ViewData(data: String) : BaseViewData(data) { 6 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/GoodsBean.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | data class GoodsBean( 4 | val title: String, 5 | val image: String, 6 | val price: Int, 7 | val like: Long, 8 | ) 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_acgn_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_gold_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_home_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_mine_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_discovery_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/btn_small_video_unselected.xml: -------------------------------------------------------------------------------- 1 | 2 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/CatagoryBean.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | import androidx.annotation.DrawableRes 4 | 5 | data class CatagoryBean( 6 | @DrawableRes 7 | val imageRes: Int, 8 | val title: String 9 | ) 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/CatagoryListViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | 5 | class CatagoryListViewData(data: List) : BaseViewData>(data) { 6 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/GoodsViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.bean.GoodsBean 5 | 6 | class GoodsViewData(data: GoodsBean) : BaseViewData(data) { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/VideoViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.bean.VideoBean 5 | 6 | class VideoViewData(data: VideoBean) : BaseViewData(data) { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/BannerViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.bean.BannerBean 5 | 6 | class BannerViewData(data: BannerBean) : BaseViewData(data) { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/LargeVideoViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.bean.VideoBean 5 | 6 | class LargeVideoViewData(data: VideoBean) : BaseViewData(data) { 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/IGetPageName.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base 2 | 3 | import com.nan.xarch.constant.PageName 4 | 5 | /** 6 | * 获取页面名称通用接口 7 | */ 8 | interface IGetPageName { 9 | 10 | @PageName 11 | fun getPageName(): String 12 | 13 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/CatagoryViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.bean.CatagoryBean 5 | 6 | class CatagoryViewData(data: CatagoryBean) : BaseViewData(data) { 7 | } -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_error_action.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/item/LoadMoreViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.item 2 | 3 | import com.nan.xarch.base.list.base.BaseViewData 4 | import com.nan.xarch.constant.LoadMoreState 5 | 6 | class LoadMoreViewData(@LoadMoreState loadMoreState: Int) : BaseViewData(loadMoreState) { 7 | } -------------------------------------------------------------------------------- /gradle/wrapper/gradle-wrapper.properties: -------------------------------------------------------------------------------- 1 | #Tue Sep 07 10:46:54 CST 2021 2 | distributionBase=GRADLE_USER_HOME 3 | distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip 4 | distributionPath=wrapper/dists 5 | zipStorePath=wrapper/dists 6 | zipStoreBase=GRADLE_USER_HOME 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_goods_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/exception/GlobalException.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean.exception 2 | 3 | class GlobalException private constructor(message: String) : RuntimeException(message) { 4 | companion object { 5 | fun of(message: String) = GlobalException(message) 6 | } 7 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/base/BaseResponse.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network.base 2 | 3 | /** 4 | * 网络数据返回基类 5 | */ 6 | data class BaseResponse( 7 | var code: Int = 0, 8 | val msg: String? = null, 9 | val redirect: String? = null, 10 | val value: T? = null 11 | ) 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_catagory_list_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/list/multitype/ViewHolderDelegate.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base.list.multitype 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | 5 | /** 6 | * @author Drakeet Xu 7 | */ 8 | abstract class ViewHolderDelegate : ItemViewDelegate() 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/list/multitype/ViewHolderInflater.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base.list.multitype 2 | 3 | import androidx.recyclerview.widget.RecyclerView 4 | 5 | /** 6 | * @author Drakeet Xu 7 | */ 8 | abstract class ViewHolderInflater : ItemViewBinder() 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/module/gold/GoldViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.module.gold 2 | 3 | import com.nan.xarch.base.BaseViewModel 4 | import com.nan.xarch.constant.PageName 5 | 6 | class GoldViewModel : BaseViewModel() { 7 | 8 | @PageName 9 | override fun getPageName() = PageName.GOLD 10 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/module/main/MainViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.module.main 2 | 3 | import com.nan.xarch.base.BaseViewModel 4 | import com.nan.xarch.constant.PageName 5 | 6 | class MainViewModel : BaseViewModel() { 7 | 8 | @PageName 9 | override fun getPageName() = PageName.HOME 10 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/module/mine/MineViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.module.mine 2 | 3 | import com.nan.xarch.base.BaseViewModel 4 | import com.nan.xarch.constant.PageName 5 | 6 | class MineViewModel : BaseViewModel() { 7 | 8 | @PageName 9 | override fun getPageName() = PageName.MINE 10 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/module/about/AboutViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.module.about 2 | 3 | import com.nan.xarch.base.BaseViewModel 4 | import com.nan.xarch.constant.PageName 5 | 6 | class AboutViewModel : BaseViewModel() { 7 | 8 | @PageName 9 | override fun getPageName() = PageName.ABOUT 10 | } -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/color/selector_bottom_bar_title_color.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_acgn.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_gold.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_mine.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/Tab.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | import com.nan.xarch.base.BaseFragment 4 | import com.nan.xarch.constant.TabId 5 | import kotlin.reflect.KClass 6 | 7 | data class Tab( 8 | @TabId 9 | val id: String, 10 | val title: String, 11 | val icon: Int, 12 | val fragmentClz: KClass> 13 | ) -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_selector.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_icon_back.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bg_video_item_cover.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_discovery.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_btn_small_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/item_selector_dark.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/VideoBean.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean 2 | 3 | import com.nan.xarch.constant.VideoType 4 | 5 | data class VideoBean( 6 | val id: String, 7 | val title: String, 8 | val coverImg: String, 9 | val authorId: String, 10 | val authorName: String, 11 | val playCount: Long, 12 | @VideoType 13 | val type: Int, 14 | ) 15 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/fg_video_item_cover.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 9 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/VideoType.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.IntDef 4 | 5 | @IntDef( 6 | VideoType.NORMAL, 7 | VideoType.LARGE, 8 | ) 9 | @Retention(AnnotationRetention.SOURCE) 10 | annotation class VideoType { 11 | companion object { 12 | const val NORMAL = 1 13 | const val LARGE = 2 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/INetworkService.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network 2 | 3 | import com.nan.xarch.bean.VideoBean 4 | import com.nan.xarch.network.base.BaseResponse 5 | import retrofit2.http.GET 6 | import retrofit2.http.Query 7 | 8 | interface INetworkService { 9 | 10 | @GET("videodetail") 11 | suspend fun requestVideoDetail(@Query("id") id: String): BaseResponse 12 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/EventName.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.StringDef 4 | 5 | @StringDef(EventName.REFRESH_HOME_LIST, EventName.TEST) 6 | @Retention(AnnotationRetention.SOURCE) 7 | annotation class EventName { 8 | companion object { 9 | const val REFRESH_HOME_LIST = "refresh_home_list" 10 | const val TEST = "test" 11 | } 12 | } 13 | -------------------------------------------------------------------------------- /app/src/test/java/com/nan/xarch/ExampleUnitTest.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch 2 | 3 | import org.junit.Test 4 | 5 | import org.junit.Assert.* 6 | 7 | /** 8 | * Example local unit test, which will execute on the development machine (host). 9 | * 10 | * See [testing documentation](http://d.android.com/tools/testing). 11 | */ 12 | class ExampleUnitTest { 13 | @Test 14 | fun addition_isCorrect() { 15 | assertEquals(4, 2 + 2) 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/NetworkApi.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network 2 | 3 | import com.nan.xarch.network.base.BaseNetworkApi 4 | 5 | /** 6 | * 网络请求具体实现 7 | * 需要部署服务端:https://github.com/huannan/XArchServer 8 | */ 9 | object NetworkApi : BaseNetworkApi("http://172.16.47.112:8080/XArchServer/") { 10 | 11 | suspend fun requestVideoDetail(id: String) = getResult { 12 | service.requestVideoDetail(id) 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/bean/exception/NetworkException.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.bean.exception 2 | 3 | class NetworkException private constructor(val code: Int, message: String) : RuntimeException(message) { 4 | 5 | override fun toString(): String { 6 | return "exception code is $code msg is $message" 7 | } 8 | 9 | companion object { 10 | fun of(code: Int, message: String) = NetworkException(code, message) 11 | } 12 | 13 | } -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config_test.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 11 | 12 | 13 | 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/ErrorCode.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.IntDef 4 | 5 | @IntDef(ErrorCode.OK, ErrorCode.UNAUTHORIZED, ErrorCode.CUSTOM_FIRST, ErrorCode.VALUE_IS_NULL) 6 | @Retention(AnnotationRetention.SOURCE) 7 | annotation class ErrorCode { 8 | companion object { 9 | const val OK = 200 10 | const val UNAUTHORIZED = 401 11 | const val CUSTOM_FIRST = 600 12 | const val VALUE_IS_NULL = CUSTOM_FIRST + 1 13 | } 14 | } -------------------------------------------------------------------------------- /app/src/main/res/values/dimens.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 86dp 4 | 15dp 5 | 0.7dp 6 | 24dp 7 | 5dp 8 | 12dp 9 | 10dp 10 | 1dp 11 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/PageState.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.IntDef 4 | 5 | @IntDef(PageState.NORMAL, PageState.LOADING, PageState.LOAD_ERROR, PageState.NO_NETWORK, PageState.EMPTY) 6 | @Retention(AnnotationRetention.SOURCE) 7 | annotation class PageState { 8 | companion object { 9 | const val NORMAL = 0 10 | const val LOADING = 1 11 | const val LOAD_ERROR = 2 12 | const val NO_NETWORK = 3 13 | const val EMPTY = 4 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/Key.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.StringDef 4 | 5 | @StringDef( 6 | Key.XXX, 7 | Key.ACCOUNT_XXX, 8 | ) 9 | @Retention(AnnotationRetention.SOURCE) 10 | annotation class Key { 11 | companion object { 12 | // 用户无关,一般情况下无需清除,注意不能加上account_前缀,参考XKeyValue.from() 13 | const val XXX = "xxx" 14 | 15 | // 用户相关,需要清除,统一加上account_前缀,自动选择正确的mmkv对象,参考XKeyValue.from() 16 | const val ACCOUNT_XXX = "account_xxx" 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /app/src/main/res/xml/network_security_config.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/eventbus/core/EventLiveData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.eventbus.core 2 | 3 | import androidx.lifecycle.LifecycleOwner 4 | import androidx.lifecycle.Observer 5 | 6 | class EventLiveData : MutableLiveData() { 7 | 8 | fun observe(owner: LifecycleOwner, sticky: Boolean, observer: Observer) { 9 | observe(owner, wrapObserver(sticky, observer)) 10 | } 11 | 12 | private fun wrapObserver(sticky: Boolean, observer: Observer): Observer { 13 | return EventObserverWrapper(this, sticky, observer) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/interceptor/CommonRequestInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network.interceptor 2 | 3 | import android.os.Build 4 | import okhttp3.Interceptor 5 | import okhttp3.Response 6 | 7 | class CommonRequestInterceptor : Interceptor { 8 | override fun intercept(chain: Interceptor.Chain): Response { 9 | val request = chain.request() 10 | val builder = request.newBuilder() 11 | // 这里添加公共请求头 12 | builder.addHeader("brand", Build.BRAND) 13 | builder.addHeader("model", Build.MODEL) 14 | return chain.proceed(builder.build()) 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/widget/TabIndicatorView.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.widget 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.LayoutInflater 6 | import androidx.constraintlayout.widget.ConstraintLayout 7 | import com.nan.xarch.databinding.ViewTabIndicatorBinding 8 | 9 | class TabIndicatorView @JvmOverloads constructor( 10 | context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 11 | ) : ConstraintLayout(context, attrs, defStyleAttr) { 12 | 13 | val viewBinding = ViewTabIndicatorBinding.inflate(LayoutInflater.from(context), this, true) 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/TabId.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.StringDef 4 | 5 | @StringDef( 6 | TabId.HOME, 7 | TabId.ACGN, 8 | TabId.SMALL_VIDEO, 9 | TabId.GOLD, 10 | TabId.MINE, 11 | TabId.DISCOVERY, 12 | ) 13 | @Retention(AnnotationRetention.SOURCE) 14 | annotation class TabId { 15 | companion object { 16 | const val HOME = "home" 17 | const val ACGN = "acgn" 18 | const val SMALL_VIDEO = "small_video" 19 | const val GOLD = "gold" 20 | const val MINE = "mine" 21 | const val DISCOVERY = "discovery" 22 | } 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/network/interceptor/CommonResponseInterceptor.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.network.interceptor 2 | 3 | import com.nan.xarch.network.base.BaseNetworkApi 4 | import com.nan.xarch.util.d 5 | import okhttp3.Interceptor 6 | import okhttp3.Response 7 | 8 | class CommonResponseInterceptor : Interceptor { 9 | 10 | override fun intercept(chain: Interceptor.Chain): Response { 11 | val startTime = System.currentTimeMillis() 12 | val request = chain.request() 13 | val response = chain.proceed(request) 14 | d(BaseNetworkApi.TAG, "url=${request.url}, requestTime=${System.currentTimeMillis() - startTime}ms") 15 | return response 16 | } 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/BaseViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base 2 | 3 | import androidx.lifecycle.ViewModel 4 | import io.reactivex.disposables.CompositeDisposable 5 | import io.reactivex.disposables.Disposable 6 | 7 | /** 8 | * ViewModel基类 9 | */ 10 | abstract class BaseViewModel : ViewModel(), IGetPageName { 11 | 12 | private val compositeDisposable = CompositeDisposable() 13 | 14 | override fun onCleared() { 15 | compositeDisposable.dispose() 16 | super.onCleared() 17 | } 18 | 19 | /** 20 | * 添加Disposable 21 | */ 22 | protected fun addDisposable(disposable: Disposable) { 23 | compositeDisposable.add(disposable) 24 | } 25 | 26 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/PageName.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.StringDef 4 | 5 | @StringDef( 6 | PageName.MAIN, 7 | PageName.HOME, 8 | PageName.ACGN, 9 | PageName.SMALL_VIDEO, 10 | PageName.GOLD, 11 | PageName.MINE, 12 | PageName.ABOUT, 13 | PageName.DISCOVERY, 14 | ) 15 | @Retention(AnnotationRetention.SOURCE) 16 | annotation class PageName { 17 | companion object { 18 | const val MAIN = "main" 19 | const val HOME = "home" 20 | const val ACGN = "acgn" 21 | const val SMALL_VIDEO = "small_video" 22 | const val GOLD = "gold" 23 | const val MINE = "mine" 24 | const val ABOUT = "about" 25 | const val DISCOVERY = "discovery" 26 | } 27 | } -------------------------------------------------------------------------------- /app/src/androidTest/java/com/nan/xarch/ExampleInstrumentedTest.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch 2 | 3 | import androidx.test.platform.app.InstrumentationRegistry 4 | import androidx.test.ext.junit.runners.AndroidJUnit4 5 | 6 | import org.junit.Test 7 | import org.junit.runner.RunWith 8 | 9 | import org.junit.Assert.* 10 | 11 | /** 12 | * Instrumented test, which will execute on an Android device. 13 | * 14 | * See [testing documentation](http://d.android.com/tools/testing). 15 | */ 16 | @RunWith(AndroidJUnit4::class) 17 | class ExampleInstrumentedTest { 18 | @Test 19 | fun useAppContext() { 20 | // Context of the app under test. 21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext 22 | assertEquals("com.nan.xarch", appContext.packageName) 23 | } 24 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_small_video.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/item_catagory_list.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 15 | 16 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/constant/LoadMoreState.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.constant 2 | 3 | import androidx.annotation.IntDef 4 | 5 | @IntDef(LoadMoreState.GONE, LoadMoreState.LOADING, LoadMoreState.ERROR, LoadMoreState.NO_NETWORK, LoadMoreState.NO_MORE) 6 | @Retention(AnnotationRetention.SOURCE) 7 | annotation class LoadMoreState { 8 | companion object { 9 | /** 10 | * 隐藏 11 | */ 12 | const val GONE = 0 13 | 14 | /** 15 | * 正在加载 16 | */ 17 | const val LOADING = 1 18 | 19 | /** 20 | * 加载异常 21 | */ 22 | const val ERROR = 2 23 | 24 | /** 25 | * 无网络 26 | */ 27 | const val NO_NETWORK = 3 28 | 29 | /** 30 | * 没有更多 31 | */ 32 | const val NO_MORE = 4 33 | } 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/list/multitype/ItemViewBinder.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base.list.multitype 2 | 3 | import android.content.Context 4 | import android.view.LayoutInflater 5 | import android.view.ViewGroup 6 | import androidx.recyclerview.widget.RecyclerView 7 | 8 | /** 9 | * This is a compatible version of [ItemViewDelegate]. 10 | * @see ItemViewDelegate 11 | * @author Drakeet Xu 12 | */ 13 | abstract class ItemViewBinder : ItemViewDelegate() { 14 | 15 | final override fun onCreateViewHolder(inflater: LayoutInflater, context: Context, parent: ViewGroup): VH { 16 | return onCreateViewHolder(context, LayoutInflater.from(context), parent) 17 | } 18 | 19 | abstract fun onCreateViewHolder(context: Context, inflater: LayoutInflater, parent: ViewGroup): VH 20 | } 21 | -------------------------------------------------------------------------------- /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 -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/base/list/base/BaseViewData.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.base.list.base 2 | 3 | import com.nan.xarch.item.CatagoryViewData 4 | import com.nan.xarch.item.GoodsViewData 5 | import com.nan.xarch.item.VideoViewData 6 | 7 | /** 8 | * 将具体数据类型再套一层BaseViewData以实现更多Item布局类型 9 | * 重写equals和hashCode是为后面的DiffUtil作准备 10 | */ 11 | open class BaseViewData(var value: T) { 12 | 13 | override fun equals(other: Any?): Boolean { 14 | if (other is BaseViewData<*>) { 15 | return value?.equals(other.value) ?: false 16 | } 17 | return false 18 | } 19 | 20 | override fun hashCode(): Int { 21 | return value?.hashCode() ?: 0 22 | } 23 | 24 | fun isGridViewData(): Boolean { 25 | return this is VideoViewData || this is CatagoryViewData || this is GoodsViewData 26 | } 27 | } 28 | -------------------------------------------------------------------------------- /app/src/main/java/com/nan/xarch/module/smallvideo/SmallVideoViewModel.kt: -------------------------------------------------------------------------------- 1 | package com.nan.xarch.module.smallvideo 2 | 3 | import androidx.lifecycle.MutableLiveData 4 | import androidx.lifecycle.viewModelScope 5 | import com.nan.xarch.base.BaseViewModel 6 | import com.nan.xarch.bean.VideoBean 7 | import com.nan.xarch.constant.PageName 8 | import com.nan.xarch.network.NetworkApi 9 | import kotlinx.coroutines.launch 10 | 11 | class SmallVideoViewModel : BaseViewModel() { 12 | 13 | val helloWorldLiveData = MutableLiveData>() 14 | 15 | fun requestVideoDetail(id: String) { 16 | viewModelScope.launch { 17 | val result = NetworkApi.requestVideoDetail(id) 18 | helloWorldLiveData.value = result 19 | } 20 | } 21 | 22 | @PageName 23 | override fun getPageName() = PageName.SMALL_VIDEO 24 | } -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_acgn.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_home.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_discovery.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 16 | 17 | -------------------------------------------------------------------------------- /app/src/main/res/layout/fragment_gold.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 |