├── .gitignore ├── .idea ├── codeStyles │ └── Project.xml ├── gradle.xml ├── misc.xml ├── modules.xml ├── runConfigurations.xml └── vcs.xml ├── README.md ├── app ├── .gitignore ├── bilimiao-0.4.1(无启动图版).apk ├── build.gradle ├── debug │ ├── app-debug.apk │ └── output.json ├── proguard-rules.pro ├── release │ ├── app-release.apk │ └── output.json └── src │ ├── androidTest │ └── java │ │ └── com │ │ └── a10miaomiao │ │ └── bilimiao │ │ └── ExampleInstrumentedTest.java │ ├── main │ ├── AndroidManifest.xml │ ├── assets │ │ └── region.json │ ├── ic_add-web.png │ ├── ic_back-web.png │ ├── ic_close-web.png │ ├── ic_more-web.png │ ├── ic_ok-web.png │ ├── ic_to_left-web.png │ ├── ic_to_right-web.png │ ├── java │ │ └── com │ │ │ └── a10miaomiao │ │ │ └── bilimiao │ │ │ ├── SplashActivity.kt │ │ │ ├── activitys │ │ │ ├── AboutActivity.kt │ │ │ ├── BiliBangumiInfoActivity.kt │ │ │ ├── DanmakuActivity.kt │ │ │ ├── DanmakuDetailsActivity.kt │ │ │ ├── DiliInfoActivity.kt │ │ │ ├── DownloadActivity.kt │ │ │ ├── EditPreventKeywordActivity.kt │ │ │ ├── H5PlayerActivity.kt │ │ │ ├── InfoActivity.kt │ │ │ ├── MainActivity.kt │ │ │ ├── PhotoActivity.kt │ │ │ ├── PlayerActivity.kt │ │ │ ├── RankActivity.kt │ │ │ ├── RegionTypeDetailsActivity.kt │ │ │ ├── SearchActivity.kt │ │ │ ├── SelectorDateActivity.kt │ │ │ ├── SettingActivity.kt │ │ │ ├── ThemePickerActivity.kt │ │ │ ├── UpperChannelVideoListActivity.kt │ │ │ ├── UpperDetailActivity.kt │ │ │ ├── UpperVideoListActivity.kt │ │ │ └── VideoInfoActivity.kt │ │ │ ├── adapter │ │ │ ├── BangumiEpisodesAdapter.kt │ │ │ ├── BangumiRankAdapter.kt │ │ │ ├── DanmakuAdapter.kt │ │ │ ├── DownloadAdapter.kt │ │ │ ├── EditPreventKeywordAdapter.kt │ │ │ ├── HomeRegionItemAdapter.kt │ │ │ ├── PagerAdapter.kt │ │ │ ├── RankOrdersAdapter.kt │ │ │ ├── RegionPagerAdapter.kt │ │ │ ├── RegionTypeDetailsAdapter.kt │ │ │ ├── SearchBoxHistoryAdapter.kt │ │ │ ├── ThemePickerAdapter.kt │ │ │ ├── UpperChannelAdapter.kt │ │ │ ├── UpperChannelVideoListAdapter.kt │ │ │ ├── UpperVideoListAdapter.kt │ │ │ ├── VideoPagesAdapter.kt │ │ │ ├── VideoRankAdapter.kt │ │ │ ├── helper │ │ │ │ ├── EndlessRecyclerOnScrollListener.java │ │ │ │ └── RecyclerOnScrollListener.kt │ │ │ └── search │ │ │ │ ├── BangumiResultAdapter.kt │ │ │ │ ├── DiliResultAdapter.kt │ │ │ │ ├── MovieResultsAdapter.kt │ │ │ │ ├── SearchResultAdapter.kt │ │ │ │ └── UpperResultAdapter.kt │ │ │ ├── base │ │ │ ├── BaseActivity.kt │ │ │ ├── BaseFragment.kt │ │ │ └── LazyLoadFragment.java │ │ │ ├── db │ │ │ ├── DownloadDB.kt │ │ │ ├── KeyWordDB.kt │ │ │ └── PreventUpperDB.kt │ │ │ ├── dialog │ │ │ ├── DownloadDialog.kt │ │ │ ├── EditDialog.kt │ │ │ ├── QueryUserDialog.kt │ │ │ └── SearchBoxFragment.kt │ │ │ ├── entity │ │ │ ├── AnimeDetailsInfo.kt │ │ │ ├── AudioDetailsInfo.kt │ │ │ ├── BangumiEpisodesInfo.kt │ │ │ ├── BangumiRankInfo.kt │ │ │ ├── CvDetailsInfo.kt │ │ │ ├── DanmakuInfo.kt │ │ │ ├── DetailsInfo.kt │ │ │ ├── DiliAnimeInfo.kt │ │ │ ├── DownEntryInfo.kt │ │ │ ├── DownloadInfo.kt │ │ │ ├── EpDetailsInfo.kt │ │ │ ├── HomeRegionInfo.kt │ │ │ ├── LiveDetailsInfo.kt │ │ │ ├── MiaoAdInfo.kt │ │ │ ├── RegionTypeDetailsInfo.kt │ │ │ ├── RegionTypesInfo.java │ │ │ ├── SearchArchiveInfo.java │ │ │ ├── SearchBangumiInfo.java │ │ │ ├── SearchDiliInfo.kt │ │ │ ├── SearchDiliInfo2.kt │ │ │ ├── SearchMovieInfo.java │ │ │ ├── SearchUpperInfo.java │ │ │ ├── SubmitVideosInfo.kt │ │ │ ├── ThemePickerInfo.kt │ │ │ ├── UpperChannelInfo.kt │ │ │ ├── UpperChannelVideoInfo.kt │ │ │ ├── VideoDetailsInfo.kt │ │ │ ├── VideoRankInfo.kt │ │ │ └── client │ │ │ │ ├── ClientDownInfo.kt │ │ │ │ ├── DownIndexInfo.kt │ │ │ │ └── EntryInfo.kt │ │ │ ├── fragments │ │ │ ├── EditPreventKeywordFragments.kt │ │ │ ├── PreventUpperFragments.kt │ │ │ ├── RegionTypeDetailsFragment.kt │ │ │ ├── SelectorDateFragment.kt │ │ │ ├── SettingPreferenceFragment.kt │ │ │ ├── download │ │ │ │ ├── DownloadedFragment.kt │ │ │ │ └── DownloadingFragment.kt │ │ │ ├── rank │ │ │ │ ├── BangumiRankFragment.kt │ │ │ │ └── VideoRankFragment.kt │ │ │ └── search │ │ │ │ ├── BangumiResultFragment.kt │ │ │ │ ├── DiliResultFragment.kt │ │ │ │ ├── MovieResultsFragment.kt │ │ │ │ ├── SearchResultFragment.kt │ │ │ │ └── UpperResultFragment.kt │ │ │ ├── media │ │ │ ├── BiliDanmukuParser.java │ │ │ ├── CompressionTools.java │ │ │ ├── MyMediaController.kt │ │ │ ├── OutlineTextView.java │ │ │ ├── ScreenResolution.java │ │ │ ├── VideoPlayerView.java │ │ │ ├── VideoSource.kt │ │ │ └── callback │ │ │ │ ├── DanmakuSwitchListener.java │ │ │ │ ├── MediaController.kt │ │ │ │ ├── MediaPlayerListener.java │ │ │ │ └── VideoBackListener.java │ │ │ ├── netword │ │ │ ├── ApiHelper.java │ │ │ ├── BiliApiService.kt │ │ │ ├── DownloadManager.kt │ │ │ └── MiaoHttp.kt │ │ │ ├── service │ │ │ └── DownloadService.kt │ │ │ ├── utils │ │ │ ├── AnimationUtil.java │ │ │ ├── BiliClientDownHelper.kt │ │ │ ├── BiliDanmukuCompressionTools.java │ │ │ ├── ConstantUtil.kt │ │ │ ├── DisplayUtil.kt │ │ │ ├── FileUtil.kt │ │ │ ├── IntentHandlerUtil.kt │ │ │ ├── KeyboardUtil.kt │ │ │ ├── LogUtil.kt │ │ │ ├── NumberUtil.java │ │ │ ├── SelectorDateUtil.kt │ │ │ ├── SettingUtil.kt │ │ │ ├── StatusBarUtil.java │ │ │ ├── SystemBarHelper.java │ │ │ ├── TextUtil.kt │ │ │ ├── ThemeHelper.kt │ │ │ └── ViewUtils.java │ │ │ ├── views │ │ │ ├── DividerItemDecoration.java │ │ │ ├── LoadMoreView.kt │ │ │ ├── QualityPopupWindow.kt │ │ │ ├── RankOrdersPopupWindow.kt │ │ │ ├── RankOrdersView.kt │ │ │ └── UpperHeaderView.kt │ │ │ └── widget │ │ │ ├── DatePickerView.kt │ │ │ ├── DropDownMenu.kt │ │ │ ├── MonthPickerView.java │ │ │ ├── MySpannableTextView.java │ │ │ ├── ScaleImageView.java │ │ │ ├── SelectView.kt │ │ │ └── VideoPlayerView.kt │ ├── res │ │ ├── anim │ │ │ ├── activity_out_anim.xml │ │ │ ├── activity_start_anim.xml │ │ │ ├── pophidden_operation_anim.xml │ │ │ ├── pophidden_operation_anim_left.xml │ │ │ ├── popshow_operation_anim_down.xml │ │ │ └── popshow_operation_anim_left.xml │ │ ├── drawable │ │ │ ├── bili_default_image_tv.9.png │ │ │ ├── bili_player_back_button.png │ │ │ ├── bili_player_danmaku_is_closed.png │ │ │ ├── bili_player_danmaku_is_open.png │ │ │ ├── bili_player_play_can_pause.png │ │ │ ├── bili_player_play_can_play.png │ │ │ ├── black_badge.xml │ │ │ ├── gradient.xml │ │ │ ├── ic_add_white_24dp.xml │ │ │ ├── ic_arrow_back_white_24dp.xml │ │ │ ├── ic_arrow_drop_down_24dp.xml │ │ │ ├── ic_arrow_drop_up_24dp.xml │ │ │ ├── ic_back_24dp.xml │ │ │ ├── ic_category_clip_video.png │ │ │ ├── ic_category_t1.png │ │ │ ├── ic_category_t11.png │ │ │ ├── ic_category_t119.png │ │ │ ├── ic_category_t129.png │ │ │ ├── ic_category_t13.png │ │ │ ├── ic_category_t155.png │ │ │ ├── ic_category_t160.png │ │ │ ├── ic_category_t165.png │ │ │ ├── ic_category_t167.png │ │ │ ├── ic_category_t181.png │ │ │ ├── ic_category_t23.png │ │ │ ├── ic_category_t3.png │ │ │ ├── ic_category_t36.png │ │ │ ├── ic_category_t4.png │ │ │ ├── ic_category_t5.png │ │ │ ├── ic_check_white_24dp.xml │ │ │ ├── ic_close_white_24dp.xml │ │ │ ├── ic_download_white.xml │ │ │ ├── ic_fab_play.png │ │ │ ├── ic_home_more_download.png │ │ │ ├── ic_home_more_prevent.png │ │ │ ├── ic_home_more_rank.png │ │ │ ├── ic_info_danmakus.png │ │ │ ├── ic_info_views.png │ │ │ ├── ic_keyboard_arrow_left_black_24dp.xml │ │ │ ├── ic_launcher.png │ │ │ ├── ic_link_black_24dp.xml │ │ │ ├── ic_lock_open_white_24dp.xml │ │ │ ├── ic_more_vert_grey_24dp.xml │ │ │ ├── ic_movie_pay_area_limit.png │ │ │ ├── ic_navigate_next_black_24dp.xml │ │ │ ├── ic_play_circle_outline_black_24dp.png │ │ │ ├── ic_player_locked_2.png │ │ │ ├── ic_player_media_quality_medium.png │ │ │ ├── ic_region_ad.png │ │ │ ├── ic_region_dh.png │ │ │ ├── ic_region_dsj.png │ │ │ ├── ic_region_dy.png │ │ │ ├── ic_region_fj.png │ │ │ ├── ic_region_fj_domestic.png │ │ │ ├── ic_region_gc.png │ │ │ ├── ic_region_kj.png │ │ │ ├── ic_region_sh.png │ │ │ ├── ic_region_ss.png │ │ │ ├── ic_region_wd.png │ │ │ ├── ic_region_yl.png │ │ │ ├── ic_region_ys.png │ │ │ ├── ic_region_yx.png │ │ │ ├── ic_region_yy.png │ │ │ ├── ic_search_24dp.xml │ │ │ ├── ic_search_bg_24dp.xml │ │ │ ├── ic_search_white.xml │ │ │ ├── ic_subtitles_black_24dp.png │ │ │ ├── ic_tv_play.png │ │ │ ├── ic_tv_stop.png │ │ │ ├── ic_unfold_more_black_24dp.xml │ │ │ ├── ico_user_default.png │ │ │ ├── icon_up.png │ │ │ ├── layer_progress.xml │ │ │ ├── selector_pick_item.xml │ │ │ ├── shape_semicircle_left.xml │ │ │ ├── shape_semicircle_right.xml │ │ │ └── videoplayer_erect_icon_round.png │ │ ├── layout │ │ │ ├── activity_about.xml │ │ │ ├── activity_danmaku.xml │ │ │ ├── activity_danmaku_details.xml │ │ │ ├── activity_dili_info.xml │ │ │ ├── activity_download.xml │ │ │ ├── activity_edit_prevent_keyword.xml │ │ │ ├── activity_h5_player.xml │ │ │ ├── activity_info.xml │ │ │ ├── activity_main.xml │ │ │ ├── activity_photo.xml │ │ │ ├── activity_player.xml │ │ │ ├── activity_region_details.xml │ │ │ ├── activity_search.xml │ │ │ ├── activity_selector_date.xml │ │ │ ├── activity_setting.xml │ │ │ ├── activity_splash.xml │ │ │ ├── activity_theme_picker.xml │ │ │ ├── activity_uper_deyail_info.xml │ │ │ ├── activity_uper_video_list.xml │ │ │ ├── activity_video_info.xml │ │ │ ├── content_video_info.xml │ │ │ ├── dialog_download.xml │ │ │ ├── dialog_edit_name.xml │ │ │ ├── dialog_search_box.xml │ │ │ ├── dialog_user.xml │ │ │ ├── fragment_download.xml │ │ │ ├── fragment_edit_prevent_keyword.xml │ │ │ ├── fragment_prevent_upper.xml │ │ │ ├── fragment_rank_all.xml │ │ │ ├── fragment_rank_bangumi.xml │ │ │ ├── fragment_region_details.xml │ │ │ ├── fragment_search_result.xml │ │ │ ├── fragment_search_result_upper.xml │ │ │ ├── fragment_selector_date.xml │ │ │ ├── include_title_bar.xml │ │ │ ├── item_bangumi_episodes.xml │ │ │ ├── item_danmakiu.xml │ │ │ ├── item_download.xml │ │ │ ├── item_home_region.xml │ │ │ ├── item_prevent_keyword.xml │ │ │ ├── item_rank_bangumi.xml │ │ │ ├── item_rank_orders.xml │ │ │ ├── item_rank_video.xml │ │ │ ├── item_region_details.xml │ │ │ ├── item_search_bangumi.xml │ │ │ ├── item_search_box_history.xml │ │ │ ├── item_search_upper.xml │ │ │ ├── item_theme_picker.xml │ │ │ ├── item_uper_channel.xml │ │ │ ├── item_uper_video_list.xml │ │ │ ├── layout_date_picker.xml │ │ │ ├── layout_list_null.xml │ │ │ ├── layout_load_more.xml │ │ │ ├── layout_media_controller.xml │ │ │ ├── layout_month_picker.xml │ │ │ ├── layout_quality.xml │ │ │ ├── layout_select_view.xml │ │ │ ├── layout_selectlist.xml │ │ │ └── layout_upper_header.xml │ │ ├── menu │ │ │ ├── add.xml │ │ │ ├── close.xml │ │ │ ├── danmaku.xml │ │ │ ├── main.xml │ │ │ ├── selector.xml │ │ │ ├── upper.xml │ │ │ └── video_info.xml │ │ ├── values-v19 │ │ │ └── styles.xml │ │ ├── values-v21 │ │ │ ├── styles.xml │ │ │ └── theme.xml │ │ ├── values │ │ │ ├── colors.xml │ │ │ ├── dimens.xml │ │ │ ├── strings.xml │ │ │ ├── styles.xml │ │ │ └── theme.xml │ │ └── xml │ │ │ ├── preference_setting.xml │ │ │ └── provider_paths.xml │ └── shape_launch-web.png │ └── test │ └── java │ └── com │ └── a10miaomiao │ └── bilimiao │ └── ExampleUnitTest.java ├── build.gradle ├── gradle.properties ├── gradle └── wrapper │ ├── gradle-wrapper.jar │ └── gradle-wrapper.properties ├── gradlew ├── gradlew.bat └── settings.gradle /.gitignore: -------------------------------------------------------------------------------- 1 | *.iml 2 | .gradle 3 | /local.properties 4 | /.idea/workspace.xml 5 | /.idea/libraries 6 | .DS_Store 7 | /build 8 | /captures 9 | .externalNativeBuild 10 | -------------------------------------------------------------------------------- /.idea/codeStyles/Project.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 15 | 16 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | -------------------------------------------------------------------------------- /.idea/gradle.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 18 | 19 | -------------------------------------------------------------------------------- /.idea/misc.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 17 | 27 | 28 | 29 | 30 | 31 | 32 | 34 | -------------------------------------------------------------------------------- /.idea/modules.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | -------------------------------------------------------------------------------- /.idea/runConfigurations.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 11 | 12 | -------------------------------------------------------------------------------- /.idea/vcs.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # 已废弃 2 | ## 已经转移到[bilimiao2](https://github.com/10miaomiao/bilimiao2) 3 | 4 | 5 | ## bilimiao 6 | 7 | ### Download apk 8 | * [去酷安下载](https://www.coolapk.com/apk/164982) 9 | 10 | ### Instructions 11 | * 如果你有任何意见,bug,问题都可以给我提Issuse,我会第一时间关注并解决. 12 | * 后期会抽时间来重构该项目,让整体架构更清晰。 13 | 14 | ### Thanks to the open source project 15 | * [RxJava](https://github.com/ReactiveX/RxJava) 16 | * [RxAndroid](https://github.com/ReactiveX/RxAndroid) 17 | * [RxLifecycle](https://github.com/trello/RxLifecycle) 18 | * [okhttp](https://github.com/square/okhttp) 19 | * [okhttputils](https://github.com/hongyangAndroid/okhttputils) 20 | * [glide](https://github.com/bumptech/glide) 21 | * [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper) 22 | * [bilibili-sdk-go](https://github.com/WhiteBlue/bilibili-sdk-go) 23 | * [rclayout](https://github.com/GcsSloop/rclayout) 24 | * [SearchDialog](https://github.com/wenwenwen888/SearchDialog) 25 | 26 | ### About me 27 | * B站 [10喵喵](https://space.bilibili.com/6789810/) 28 | 29 | ### License 30 | Copyright 2017 10miaomiao 31 | 32 | Licensed under the Apache License, Version 2.0 (the "License"); you may not use this file except in compliance with the License. You may obtain a copy of the License at 33 | 34 | http://www.apache.org/licenses/LICENSE-2.0 35 | 36 | Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. 37 | -------------------------------------------------------------------------------- /app/.gitignore: -------------------------------------------------------------------------------- 1 | /build 2 | -------------------------------------------------------------------------------- /app/bilimiao-0.4.1(无启动图版).apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/bilimiao-0.4.1(无启动图版).apk -------------------------------------------------------------------------------- /app/debug/app-debug.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/debug/app-debug.apk -------------------------------------------------------------------------------- /app/debug/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":6},"path":"app-debug.apk","properties":{"packageId":"com.a10miaomiao.bilimiao","split":"","minSdkVersion":"15"}}] -------------------------------------------------------------------------------- /app/proguard-rules.pro: -------------------------------------------------------------------------------- 1 | # Add project specific ProGuard rules here. 2 | # By default, the flags in this file are appended to flags specified 3 | # in D:\Android\sdk/tools/proguard/proguard-android.txt 4 | # You can edit the include path and order by changing the proguardFiles 5 | # directive in build.gradle. 6 | # 7 | # For more details, see 8 | # http://developer.android.com/guide/developing/tools/proguard.html 9 | 10 | # Add any project specific keep options here: 11 | 12 | # If your project uses WebView with JS, uncomment the following 13 | # and specify the fully qualified class name to the JavaScript interface 14 | # class: 15 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview { 16 | # public *; 17 | #} 18 | -------------------------------------------------------------------------------- /app/release/app-release.apk: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/release/app-release.apk -------------------------------------------------------------------------------- /app/release/output.json: -------------------------------------------------------------------------------- 1 | [{"outputType":{"type":"APK"},"apkInfo":{"type":"MAIN","splits":[],"versionCode":29,"versionName":"1.3.1.1","enabled":true,"outputFile":"app-release.apk","fullName":"release","baseName":"release"},"path":"app-release.apk","properties":{}}] -------------------------------------------------------------------------------- /app/src/androidTest/java/com/a10miaomiao/bilimiao/ExampleInstrumentedTest.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao; 2 | 3 | import android.content.Context; 4 | import android.support.test.InstrumentationRegistry; 5 | import android.support.test.runner.AndroidJUnit4; 6 | 7 | import org.junit.Test; 8 | import org.junit.runner.RunWith; 9 | 10 | import static org.junit.Assert.*; 11 | 12 | /** 13 | * Instrumentation test, which will execute on an Android device. 14 | * 15 | * @see Testing documentation 16 | */ 17 | @RunWith(AndroidJUnit4.class) 18 | public class ExampleInstrumentedTest { 19 | @Test 20 | public void useAppContext() throws Exception { 21 | // Context of the app under test. 22 | Context appContext = InstrumentationRegistry.getTargetContext(); 23 | 24 | assertEquals("com.a10miaomiao.bilimiao", appContext.getPackageName()); 25 | } 26 | } 27 | -------------------------------------------------------------------------------- /app/src/main/ic_add-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_add-web.png -------------------------------------------------------------------------------- /app/src/main/ic_back-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_back-web.png -------------------------------------------------------------------------------- /app/src/main/ic_close-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_close-web.png -------------------------------------------------------------------------------- /app/src/main/ic_more-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_more-web.png -------------------------------------------------------------------------------- /app/src/main/ic_ok-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_ok-web.png -------------------------------------------------------------------------------- /app/src/main/ic_to_left-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_to_left-web.png -------------------------------------------------------------------------------- /app/src/main/ic_to_right-web.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/ic_to_right-web.png -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/SplashActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao 2 | 3 | import android.content.Intent 4 | import android.os.Bundle 5 | import com.a10miaomiao.bilimiao.activitys.MainActivity 6 | import com.trello.rxlifecycle.components.RxActivity 7 | import rx.Observable 8 | import rx.android.schedulers.AndroidSchedulers 9 | import java.util.concurrent.TimeUnit 10 | 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/8/31. 14 | */ 15 | class SplashActivity: RxActivity(){ 16 | override fun onCreate(savedInstanceState: Bundle?) { 17 | super.onCreate(savedInstanceState) 18 | setContentView(R.layout.activity_splash) 19 | Observable.timer(500, TimeUnit.MILLISECONDS) 20 | .compose(bindToLifecycle()) 21 | .observeOn(AndroidSchedulers.mainThread()) 22 | .subscribe { aLong -> 23 | startActivity(Intent(this@SplashActivity, MainActivity::class.java)) 24 | this@SplashActivity.finish() 25 | } 26 | 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/activitys/BiliBangumiInfoActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.activitys 2 | 3 | import android.os.Bundle 4 | import com.a10miaomiao.bilimiao.R 5 | import com.a10miaomiao.bilimiao.adapter.VideoPagesAdapter 6 | import com.a10miaomiao.bilimiao.base.BaseActivity 7 | import com.a10miaomiao.bilimiao.entity.DiliAnimeInfo 8 | import com.a10miaomiao.bilimiao.entity.VideoDetailsInfo 9 | import com.a10miaomiao.bilimiao.utils.ConstantUtil 10 | 11 | class BiliBangumiInfoActivity : BaseActivity() { 12 | override var layoutResID = R.layout.activity_dili_info 13 | private var info: DiliAnimeInfo? = null 14 | val pages = ArrayList() 15 | val pagesAdapter = VideoPagesAdapter(pages) 16 | 17 | val id by lazy { 18 | intent.extras.getString(ConstantUtil.ID) 19 | } 20 | 21 | override fun initViews(savedInstanceState: Bundle?) { 22 | 23 | loadData() 24 | } 25 | 26 | override fun initToolBar() { 27 | 28 | } 29 | 30 | private fun loadData(){ 31 | 32 | } 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/activitys/DownloadActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.activitys 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.design.widget.TabLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import com.a10miaomiao.bilimiao.adapter.PagerAdapter 9 | import com.a10miaomiao.bilimiao.base.BaseActivity 10 | import com.a10miaomiao.bilimiao.fragments.download.DownloadedFragment 11 | import com.a10miaomiao.bilimiao.fragments.download.DownloadingFragment 12 | import kotlinx.android.synthetic.main.activity_download.* 13 | 14 | 15 | /** 16 | * Created by 10喵喵 on 2018/1/11. 17 | */ 18 | class DownloadActivity : BaseActivity() { 19 | override var layoutResID = R.layout.activity_download 20 | 21 | val mAdapter by lazy { 22 | PagerAdapter(supportFragmentManager) 23 | } 24 | 25 | override fun initViews(savedInstanceState: Bundle?) { 26 | mAdapter.titles.addAll(arrayListOf("下载中","已完成")) 27 | mAdapter.fragments.addAll(arrayListOf( 28 | DownloadingFragment(), 29 | DownloadedFragment() 30 | )) 31 | 32 | vp_view.adapter = mAdapter //给ViewPager设置适配器 33 | tabs.apply { 34 | tabMode = TabLayout.MODE_FIXED 35 | setupWithViewPager(vp_view)//将TabLayout和ViewPager关联起来。 36 | setTabsFromPagerAdapter(mAdapter)//给Tabs设置适配器 37 | } 38 | } 39 | 40 | override fun initToolBar() { 41 | toolbar.title = "下载姬(测试版)" 42 | toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp) 43 | toolbar.setNavigationOnClickListener { 44 | finish() 45 | } 46 | } 47 | 48 | companion object { 49 | fun launch(activity: Activity) { 50 | val mIntent = Intent(activity, DownloadActivity::class.java) 51 | activity.startActivity(mIntent) 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/activitys/EditPreventKeywordActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.activitys 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.design.widget.TabLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import com.a10miaomiao.bilimiao.adapter.PagerAdapter 9 | import com.a10miaomiao.bilimiao.base.BaseActivity 10 | import com.a10miaomiao.bilimiao.fragments.EditPreventKeywordFragments 11 | import com.a10miaomiao.bilimiao.fragments.PreventUpperFragments 12 | import kotlinx.android.synthetic.main.activity_edit_prevent_keyword.* 13 | 14 | /** 15 | * Created by 10喵喵 on 2017/10/24. 16 | */ 17 | class EditPreventKeywordActivity : BaseActivity() { 18 | override var layoutResID = R.layout.activity_edit_prevent_keyword 19 | 20 | 21 | override fun initViews(savedInstanceState: Bundle?) { 22 | val mAdapter = PagerAdapter(supportFragmentManager) 23 | mAdapter.titles.addAll(arrayListOf( 24 | "关键字","up主" 25 | )) 26 | mAdapter.fragments.addAll(arrayListOf( 27 | EditPreventKeywordFragments(), 28 | PreventUpperFragments() 29 | )) 30 | tabs.tabMode = TabLayout.LAYOUT_MODE_CLIP_BOUNDS 31 | vp_view.adapter = mAdapter//给ViewPager设置适配器 32 | tabs.setupWithViewPager(vp_view)//将TabLayout和ViewPager关联起来。 33 | tabs.setTabsFromPagerAdapter(mAdapter)//给Tabs设置适配器 34 | } 35 | 36 | override fun initToolBar() { 37 | toolbar.title = "屏蔽设置" 38 | toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp) 39 | toolbar.setNavigationOnClickListener({ finish() }) 40 | } 41 | 42 | 43 | companion object { 44 | fun launch(activity: Activity) { 45 | val mIntent = Intent(activity, EditPreventKeywordActivity::class.java) 46 | activity.startActivity(mIntent) 47 | } 48 | } 49 | 50 | } 51 | 52 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/activitys/RankActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.activitys 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.support.design.widget.TabLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import com.a10miaomiao.bilimiao.adapter.PagerAdapter 9 | import com.a10miaomiao.bilimiao.base.BaseActivity 10 | import com.a10miaomiao.bilimiao.fragments.rank.BangumiRankFragment 11 | import com.a10miaomiao.bilimiao.fragments.rank.VideoRankFragment 12 | import com.a10miaomiao.bilimiao.netword.BiliApiService 13 | import kotlinx.android.synthetic.main.activity_edit_prevent_keyword.* 14 | 15 | /** 16 | * Created by 10喵喵 on 2017/11/30. 17 | */ 18 | class RankActivity : BaseActivity(){ 19 | override var layoutResID = R.layout.activity_edit_prevent_keyword 20 | 21 | override fun initViews(savedInstanceState: Bundle?) { 22 | val mAdapter = PagerAdapter(supportFragmentManager) 23 | mAdapter.titles.addAll(arrayListOf( 24 | "全站榜","原创榜","新番榜","新人榜" 25 | )) 26 | 27 | mAdapter.fragments.addAll(arrayListOf( 28 | VideoRankFragment.newInstance(BiliApiService::getRankAll), 29 | VideoRankFragment.newInstance(BiliApiService::getRankOrigin), 30 | BangumiRankFragment(), 31 | VideoRankFragment.newInstance(BiliApiService::getRankRookie) 32 | )) 33 | tabs.tabMode = TabLayout.LAYOUT_MODE_CLIP_BOUNDS 34 | vp_view.adapter = mAdapter//给ViewPager设置适配器 35 | tabs.setupWithViewPager(vp_view)//将TabLayout和ViewPager关联起来。 36 | tabs.setTabsFromPagerAdapter(mAdapter)//给Tabs设置适配器 37 | } 38 | 39 | override fun initToolBar() { 40 | toolbar.title = "排行榜" 41 | toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp) 42 | toolbar.setNavigationOnClickListener({ finish() }) 43 | } 44 | 45 | 46 | companion object { 47 | fun launch(activity: Activity) { 48 | val mIntent = Intent(activity, RankActivity::class.java) 49 | activity.startActivity(mIntent) 50 | } 51 | } 52 | 53 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/activitys/SettingActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.activitys 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import com.a10miaomiao.bilimiao.R 7 | import com.a10miaomiao.bilimiao.base.BaseActivity 8 | import com.a10miaomiao.bilimiao.fragments.SettingPreferenceFragment 9 | import com.a10miaomiao.bilimiao.utils.ConstantUtil 10 | import kotlinx.android.synthetic.main.include_title_bar.* 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/10/3. 14 | */ 15 | class SettingActivity : BaseActivity() { 16 | override var layoutResID = R.layout.activity_setting 17 | //val select_items = arrayOf("哔哩哔哩", "哔哩哔哩(play版)", "哔哩哔哩概念版", "哔哩哔哩白") 18 | val select_items = arrayOf("哔哩哔哩", "哔哩哔哩(play版)", "哔哩哔哩概念版") 19 | 20 | override fun initViews(savedInstanceState: Bundle?) { 21 | var fragment = SettingPreferenceFragment() 22 | fragment.arguments = intent.extras 23 | fragmentManager.beginTransaction() 24 | .replace(R.id.prefs_frame, fragment) 25 | .commit() 26 | } 27 | 28 | 29 | override fun initToolBar() { 30 | toolbar.title = "设置" 31 | toolbar.setNavigationIcon(R.drawable.ic_arrow_back_white_24dp) 32 | toolbar.setNavigationOnClickListener { 33 | finish() 34 | } 35 | } 36 | 37 | companion object { 38 | fun launch(activity: Activity) { 39 | val mIntent = Intent(activity, SettingActivity::class.java) 40 | mIntent.putExtra(ConstantUtil.DO, 0) 41 | activity.startActivity(mIntent) 42 | } 43 | 44 | fun selectPalyer(activity: Activity) { 45 | val mIntent = Intent(activity, SettingActivity::class.java) 46 | mIntent.putExtra(ConstantUtil.DO, 1) 47 | activity.startActivity(mIntent) 48 | } 49 | } 50 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/BangumiEpisodesAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.BangumiEpisodesInfo 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.BaseViewHolder 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/10/26. 10 | */ 11 | class BangumiEpisodesAdapter(list : List) : 12 | BaseQuickAdapter(R.layout.item_bangumi_episodes,list){ 13 | override fun convert(helper: BaseViewHolder?, item: BangumiEpisodesInfo?) { 14 | helper?.setText(R.id.tv_title,"${item?.index} ${item?.index_title}") 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/BangumiRankAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.util.TypedValue 4 | import android.widget.TextView 5 | import com.a10miaomiao.bilimiao.R 6 | import com.a10miaomiao.bilimiao.entity.BangumiRankInfo 7 | import com.bumptech.glide.Glide 8 | import com.bumptech.glide.load.engine.DiskCacheStrategy 9 | import com.chad.library.adapter.base.BaseQuickAdapter 10 | import com.chad.library.adapter.base.BaseViewHolder 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/12/2. 14 | */ 15 | class BangumiRankAdapter(list : List) 16 | : BaseQuickAdapter(R.layout.item_rank_bangumi,list) { 17 | override fun convert(helper: BaseViewHolder?, item: BangumiRankInfo.BangumiInfo?) { 18 | Glide.with(mContext) 19 | .load(item?.cover) 20 | .centerCrop() 21 | .diskCacheStrategy(DiskCacheStrategy.ALL) 22 | .placeholder(R.drawable.bili_default_image_tv) 23 | .dontAnimate() 24 | .into(helper?.getView(R.id.item_img)) 25 | 26 | helper?.setText(R.id.item_title,item?.title) 27 | if(item?.is_finish == 1)//是否完结 28 | helper?.setText(R.id.item_count, "已完结,全${item?.newest_ep_index}话") 29 | else 30 | helper?.setText(R.id.item_count, "连载中,更新至第${item?.newest_ep_index}话") 31 | helper?.setText(R.id.item_details, "综合评分:${item?.pts}") 32 | 33 | var sort_num = helper!!.getView(R.id.item_sort_num) 34 | sort_num.text = item!!.sort_num.toString() 35 | sort_num.setTextColor( 36 | if(item!!.sort_num <= 3) { 37 | val typedValue = TypedValue() 38 | mContext.theme.resolveAttribute(android.R.attr.colorPrimary, typedValue, true) 39 | mContext.resources.getColor(typedValue.resourceId) 40 | }else 41 | mContext.resources.getColor(R.color.text_black) 42 | ) 43 | 44 | } 45 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/DanmakuAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.DanmakuInfo 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.BaseViewHolder 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/11/1. 10 | */ 11 | class DanmakuAdapter(list: List) : 12 | BaseQuickAdapter(R.layout.item_danmakiu,list) { 13 | override fun convert(helper: BaseViewHolder?, item: DanmakuInfo.DanmakuItem?) { 14 | helper?.setText(R.id.item_text,item!!.text) 15 | helper?.setText(R.id.item_mode,item!!.modeStr) 16 | helper?.setText(R.id.item_time,item!!.timeStr) 17 | } 18 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/EditPreventKeywordAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.chad.library.adapter.base.BaseQuickAdapter 5 | import com.chad.library.adapter.base.BaseViewHolder 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/10/24. 9 | */ 10 | class EditPreventKeywordAdapter(list: List) : 11 | BaseQuickAdapter(R.layout.item_prevent_keyword,list) { 12 | override fun convert(helper: BaseViewHolder?, item: String?) { 13 | helper?.setText(R.id.tv_keyword, item) 14 | } 15 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/HomeRegionItemAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.HomeRegionInfo 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.BaseViewHolder 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/9/16. 10 | */ 11 | class HomeRegionItemAdapter(list: List) 12 | : BaseQuickAdapter(R.layout.item_home_region, list) { 13 | 14 | override fun convert(helper: BaseViewHolder, item: HomeRegionInfo) { 15 | helper.setImageResource(R.id.item_icon, item.icon!!) 16 | helper.setText(R.id.item_title, item.name) 17 | } 18 | 19 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/PagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.support.v4.app.Fragment 4 | import android.support.v4.app.FragmentManager 5 | import android.support.v4.app.FragmentStatePagerAdapter 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/12/1. 9 | */ 10 | class PagerAdapter(fm: FragmentManager) : FragmentStatePagerAdapter(fm) { 11 | val titles = ArrayList() 12 | val fragments = ArrayList() 13 | 14 | override fun getItem(position: Int) = fragments[position] 15 | override fun getCount() = fragments.size 16 | override fun getPageTitle(position: Int) = titles[position] 17 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/RankOrdersAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.util.TypedValue 4 | import android.widget.TextView 5 | import com.a10miaomiao.bilimiao.R 6 | import com.a10miaomiao.bilimiao.utils.ThemeHelper 7 | import com.a10miaomiao.bilimiao.utils.log 8 | import com.chad.library.adapter.base.BaseQuickAdapter 9 | import com.chad.library.adapter.base.BaseViewHolder 10 | import kotlinx.android.synthetic.main.fragment_region_details.* 11 | 12 | 13 | /** 14 | * Created by 10喵喵 on 2017/11/23. 15 | */ 16 | class RankOrdersAdapter(list: List) : BaseQuickAdapter(R.layout.item_rank_orders, list) { 17 | 18 | constructor(list: Array) : this(list.toList()) 19 | 20 | var checkItemPosition = 0 21 | set(value) { 22 | field = value 23 | notifyDataSetChanged() 24 | } 25 | 26 | override fun convert(helper: BaseViewHolder?, item: String?) { 27 | var text = helper!!.getView(R.id.text) 28 | text.text = item 29 | text.setTextColor( 30 | if(helper.position == checkItemPosition) 31 | mContext.resources.getColor(ThemeHelper.getColorAccent(mContext)) 32 | else 33 | mContext.resources.getColor(R.color.text_black) 34 | ) 35 | } 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/RegionPagerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.support.v4.app.Fragment 4 | import android.support.v4.app.FragmentManager 5 | import android.support.v4.app.FragmentStatePagerAdapter 6 | import com.a10miaomiao.bilimiao.entity.RegionTypesInfo 7 | import com.a10miaomiao.bilimiao.fragments.RegionTypeDetailsFragment 8 | import com.a10miaomiao.bilimiao.fragments.SelectorDateFragment 9 | import rx.Observable 10 | 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/9/18. 14 | */ 15 | class RegionPagerAdapter(fm: FragmentManager 16 | ,var id: Int 17 | ,var titles: List 18 | ,var childrens: List): FragmentStatePagerAdapter(fm) { 19 | private val fragments = ArrayList() 20 | 21 | init{ 22 | if(titles[0] == "设置时间") 23 | fragments.add(SelectorDateFragment()) 24 | Observable.from(childrens) 25 | .subscribe({ childrenBean -> fragments.add(RegionTypeDetailsFragment.newInstance(childrenBean.tid)) }) 26 | } 27 | 28 | override fun getItem(position: Int): Fragment { 29 | return fragments[position] 30 | } 31 | 32 | override fun getCount(): Int { 33 | return fragments.size 34 | } 35 | 36 | override fun getPageTitle(position: Int): CharSequence { 37 | return titles[position] 38 | } 39 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/RegionTypeDetailsAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.RegionTypeDetailsInfo 5 | import com.a10miaomiao.bilimiao.utils.NumberUtil 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.load.engine.DiskCacheStrategy 8 | import com.chad.library.adapter.base.BaseQuickAdapter 9 | import com.chad.library.adapter.base.BaseViewHolder 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/9/19. 13 | */ 14 | class RegionTypeDetailsAdapter (list: List): 15 | BaseQuickAdapter(R.layout.item_region_details,list){ 16 | 17 | override fun convert(helper: BaseViewHolder?, item: RegionTypeDetailsInfo.Result?) { 18 | // itemViewHolder.mVideoTitle.setText(archiveBean.getTitle()); 19 | // itemViewHolder.mVideoPlayNum.setText(converString(archiveBean.getPlay())); 20 | // itemViewHolder.mVideoReviewNum.setText(NumberUtil.converString(archiveBean.getVideo_review())); 21 | // itemViewHolder.mUserName.setText(archiveBean.getAuthor()); 22 | // itemViewHolder.mDuration.setText(NumberUtil.converDuration(archiveBean.getDuration())); 23 | // mVideoPic = $(R.id.item_img); 24 | // mVideoTitle = $(R.id.item_title); 25 | // mVideoPlayNum = $(R.id.item_play); 26 | // mVideoReviewNum = $(R.id.item_review); 27 | // mUserName = $(R.id.item_user_name); 28 | // mDuration = $(R.id.item_duration); 29 | Glide.with(mContext) 30 | .load("http:${item?.pic}") 31 | .centerCrop() 32 | .diskCacheStrategy(DiskCacheStrategy.ALL) 33 | .placeholder(R.drawable.bili_default_image_tv) 34 | .dontAnimate() 35 | .into(helper?.getView(R.id.item_img)) 36 | 37 | helper?.setText(R.id.item_title,item?.title) 38 | helper?.setText(R.id.item_play, converString(item?.play!!)) 39 | helper?.setText(R.id.item_review,NumberUtil.converString(item?.video_review!!)) 40 | helper?.setText(R.id.item_user_name,item?.author) 41 | helper?.setText(R.id.item_duration,NumberUtil.converDuration(item?.duration!!)) 42 | } 43 | 44 | private fun converString(s: String): String { 45 | try { 46 | return NumberUtil.converString(s.toInt()) 47 | } catch (e: NumberFormatException) { 48 | return s 49 | } 50 | } 51 | 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/SearchBoxHistoryAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.widget.TextView 4 | import com.a10miaomiao.bilimiao.R 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.BaseViewHolder 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/12/10. 10 | */ 11 | class SearchBoxHistoryAdapter(list: List) 12 | : BaseQuickAdapter(R.layout.item_search_box_history, list) { 13 | 14 | var isHis = true 15 | 16 | override fun convert(helper: BaseViewHolder?, item: String?) { 17 | var item_tv = helper!!.getView(R.id.tv_item_search_history) 18 | item_tv.text = item!! 19 | if(isHis){ 20 | val drawable = mContext.resources.getDrawable(R.drawable.ic_history_24dp) 21 | drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)//这一步必须要做,否则不会显示 22 | item_tv.setCompoundDrawables(drawable,null,null,null) 23 | }else { 24 | val drawable = mContext.resources.getDrawable(R.drawable.ic_search_24dp) 25 | drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)//这一步必须要做,否则不会显示 26 | item_tv.setCompoundDrawables(drawable, null, null, null) 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/ThemePickerAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.widget.TextView 4 | import com.a10miaomiao.bilimiao.R 5 | import com.a10miaomiao.bilimiao.entity.ThemePickerInfo 6 | import com.chad.library.adapter.base.BaseQuickAdapter 7 | import com.chad.library.adapter.base.BaseViewHolder 8 | 9 | /** 10 | * Created by 10喵喵 on 2017/12/25. 11 | */ 12 | class ThemePickerAdapter(list: List) : BaseQuickAdapter(R.layout.item_theme_picker, list) { 13 | override fun convert(helper: BaseViewHolder?, item: ThemePickerInfo?) { 14 | var item_color = helper!!.getView(R.id.item_color) 15 | var item_name = helper!!.getView(R.id.item_name) 16 | var item_is_selected = helper!!.getView(R.id.item_is_selected) 17 | var color = mContext.resources.getColor(item!!.color) 18 | item_color.setBackgroundColor(color) 19 | item_name.text = item!!.name 20 | item_name.setTextColor(color) 21 | if (item.isSelected) { 22 | item_is_selected.text = "使用中" 23 | item_is_selected.setTextColor(color) 24 | }else{ 25 | item_is_selected.text = "使用" 26 | item_is_selected.setTextColor( mContext.resources.getColor(R.color.text_black)) 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/UpperChannelAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.UpperChannelInfo 5 | import com.bumptech.glide.Glide 6 | import com.bumptech.glide.load.engine.DiskCacheStrategy 7 | import com.chad.library.adapter.base.BaseQuickAdapter 8 | import com.chad.library.adapter.base.BaseViewHolder 9 | 10 | /** 11 | * Created by 10喵喵 on 2017/10/29. 12 | */ 13 | class UpperChannelAdapter(list : List) : 14 | BaseQuickAdapter(R.layout.item_uper_channel,list){ 15 | override fun convert(helper: BaseViewHolder?, item: UpperChannelInfo.UperChannelData?) { 16 | helper?.setText(R.id.item_title,item!!.name) 17 | helper?.setText(R.id.item_count,"${item!!.count}个投稿") 18 | 19 | Glide.with(mContext) 20 | .load(item!!.cover) 21 | .centerCrop() 22 | .diskCacheStrategy(DiskCacheStrategy.ALL) 23 | .placeholder(R.drawable.bili_default_image_tv) 24 | .dontAnimate() 25 | .into(helper?.getView(R.id.item_img)) 26 | } 27 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/UpperChannelVideoListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.UpperChannelVideoInfo 5 | import com.a10miaomiao.bilimiao.utils.NumberUtil 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.load.engine.DiskCacheStrategy 8 | import com.chad.library.adapter.base.BaseQuickAdapter 9 | import com.chad.library.adapter.base.BaseViewHolder 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/10/31. 13 | */ 14 | class UpperChannelVideoListAdapter(list : List) : 15 | BaseQuickAdapter(R.layout.item_uper_video_list,list){ 16 | override fun convert(helper: BaseViewHolder?, item: UpperChannelVideoInfo.VideoArchives?) { 17 | Glide.with(mContext) 18 | .load(item?.pic) 19 | .centerCrop() 20 | .diskCacheStrategy(DiskCacheStrategy.ALL) 21 | .placeholder(R.drawable.bili_default_image_tv) 22 | .dontAnimate() 23 | .into(helper?.getView(R.id.item_img)) 24 | 25 | helper?.setText(R.id.item_title,item?.title) 26 | helper?.setText(R.id.item_play, NumberUtil.converString(item!!.stat.view)) 27 | helper?.setText(R.id.item_review, NumberUtil.converString(item!!.stat.danmaku)) 28 | helper?.setText(R.id.item_ctime, NumberUtil.converCTime(item?.pubdate)) 29 | helper?.setText(R.id.item_duration, NumberUtil.converDuration(item!!.duration)) 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/UpperVideoListAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.SubmitVideosInfo 5 | import com.a10miaomiao.bilimiao.utils.NumberUtil 6 | import com.a10miaomiao.bilimiao.utils.NumberUtil.converCTime 7 | import com.bumptech.glide.Glide 8 | import com.bumptech.glide.load.engine.DiskCacheStrategy 9 | import com.chad.library.adapter.base.BaseQuickAdapter 10 | import com.chad.library.adapter.base.BaseViewHolder 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/10/30. 14 | */ 15 | class UpperVideoListAdapter(list : List) : 16 | BaseQuickAdapter(R.layout.item_uper_video_list,list){ 17 | override fun convert(helper: BaseViewHolder?, item: SubmitVideosInfo.VideoInfo?) { 18 | Glide.with(mContext) 19 | .load("http:${item?.pic}") 20 | .centerCrop() 21 | .diskCacheStrategy(DiskCacheStrategy.ALL) 22 | .placeholder(R.drawable.bili_default_image_tv) 23 | .dontAnimate() 24 | .into(helper?.getView(R.id.item_img)) 25 | 26 | helper?.setText(R.id.item_title,item?.title) 27 | helper?.setText(R.id.item_play, NumberUtil.converString(item?.play!!)) 28 | helper?.setText(R.id.item_review, NumberUtil.converString(item?.video_review!!)) 29 | helper?.setText(R.id.item_ctime,converCTime(item?.created)) 30 | helper?.setText(R.id.item_duration, item?.length) 31 | } 32 | 33 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/VideoPagesAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.VideoDetailsInfo 5 | import com.chad.library.adapter.base.BaseQuickAdapter 6 | import com.chad.library.adapter.base.BaseViewHolder 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/11/3. 10 | */ 11 | class VideoPagesAdapter(list : List) : 12 | BaseQuickAdapter(R.layout.item_bangumi_episodes,list){ 13 | override fun convert(helper: BaseViewHolder?, item: VideoDetailsInfo.VideoPageInfo?) { 14 | helper?.setText(R.id.tv_title, item?.title) 15 | } 16 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/VideoRankAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter 2 | 3 | import android.widget.TextView 4 | import com.a10miaomiao.bilimiao.R 5 | import com.a10miaomiao.bilimiao.entity.VideoRankInfo 6 | import com.a10miaomiao.bilimiao.utils.NumberUtil 7 | import com.a10miaomiao.bilimiao.utils.ThemeHelper 8 | import com.bumptech.glide.Glide 9 | import com.bumptech.glide.load.engine.DiskCacheStrategy 10 | import com.chad.library.adapter.base.BaseQuickAdapter 11 | import com.chad.library.adapter.base.BaseViewHolder 12 | 13 | /** 14 | * Created by 10喵喵 on 2017/12/2. 15 | */ 16 | class VideoRankAdapter(list: List) 17 | : BaseQuickAdapter(R.layout.item_rank_video, list) { 18 | override fun convert(helper: BaseViewHolder?, item: VideoRankInfo.VideoInfo?) { 19 | Glide.with(mContext) 20 | .load(item?.pic) 21 | .centerCrop() 22 | .diskCacheStrategy(DiskCacheStrategy.ALL) 23 | .placeholder(R.drawable.bili_default_image_tv) 24 | .dontAnimate() 25 | .into(helper?.getView(R.id.item_img)) 26 | 27 | helper?.setText(R.id.item_title, item?.title) 28 | // helper?.setText(R.id.item_play, converString(item?.play!!)) 29 | // helper?.setText(R.id.item_review, NumberUtil.converString(item?.video_review!!)) 30 | helper?.setText(R.id.item_user_name, item?.author) 31 | helper?.setText(R.id.item_duration, item?.duration!!) 32 | var sort_num = helper!!.getView(R.id.item_sort_num) 33 | sort_num.text = item!!.sort_num.toString() 34 | sort_num.setTextColor( 35 | if(item!!.sort_num <= 3) { 36 | val color = ThemeHelper.getColorAccent(mContext) 37 | mContext.resources.getColor(color) 38 | }else 39 | mContext.resources.getColor(R.color.text_black) 40 | ) 41 | helper?.setText(R.id.item_pts, "综合评分:${item!!.pts}") 42 | } 43 | 44 | private fun converString(s: String): String { 45 | try { 46 | return NumberUtil.converString(s.toInt()) 47 | } catch (e: NumberFormatException) { 48 | return s 49 | } 50 | } 51 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/helper/EndlessRecyclerOnScrollListener.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.helper; 2 | 3 | import android.support.v7.widget.LinearLayoutManager; 4 | import android.support.v7.widget.RecyclerView; 5 | 6 | 7 | /** 8 | * Created by hcc on 16/8/7 21:18 9 | * 100332338@qq.com 10 | *

11 | * 自定义RecylcerView上拉加载处理 12 | */ 13 | public abstract class EndlessRecyclerOnScrollListener extends RecyclerView.OnScrollListener { 14 | 15 | private int previousTotal = 0; 16 | 17 | private boolean loading = true; 18 | 19 | private int currentPage = 1; 20 | 21 | private LinearLayoutManager mLinearLayoutManager; 22 | 23 | private int span = 0; 24 | 25 | protected EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager) { 26 | this.mLinearLayoutManager = linearLayoutManager; 27 | } 28 | 29 | protected EndlessRecyclerOnScrollListener(LinearLayoutManager linearLayoutManager, int a) { 30 | this.mLinearLayoutManager = linearLayoutManager; 31 | span = a; 32 | } 33 | 34 | 35 | @Override 36 | public void onScrolled(RecyclerView recyclerView, int dx, int dy) { 37 | 38 | super.onScrolled(recyclerView, dx, dy); 39 | 40 | if (dy == 0) { 41 | return; 42 | } 43 | 44 | int visibleItemCount = recyclerView.getChildCount(); 45 | int totalItemCount = mLinearLayoutManager.getItemCount(); 46 | int lastCompletelyVisiableItemPosition 47 | = mLinearLayoutManager.findLastCompletelyVisibleItemPosition(); 48 | 49 | if (loading) { 50 | if (totalItemCount > previousTotal) { 51 | loading = false; 52 | previousTotal = totalItemCount; 53 | } 54 | } 55 | if (!loading && (visibleItemCount > 0) && 56 | (lastCompletelyVisiableItemPosition >= totalItemCount - 1 - span)) { 57 | currentPage++; 58 | onLoadMore(currentPage); 59 | loading = true; 60 | } 61 | } 62 | 63 | 64 | public void refresh() { 65 | loading = true; 66 | previousTotal = 0; 67 | currentPage = 1; 68 | } 69 | 70 | 71 | public abstract void onLoadMore(int currentPage); 72 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/helper/RecyclerOnScrollListener.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.helper 2 | 3 | import android.support.v7.widget.LinearLayoutManager 4 | import android.support.v7.widget.RecyclerView 5 | 6 | /** 7 | * Created by 10喵喵 on 2017/10/4. 8 | */ 9 | abstract class RecyclerOnScrollListener(var mLinearLayoutManager: LinearLayoutManager,var span: Int) 10 | : RecyclerView.OnScrollListener() { 11 | 12 | abstract fun onLoadMore() 13 | 14 | override fun onScrolled(recyclerView: RecyclerView, dx: Int, dy: Int) { 15 | super.onScrolled(recyclerView, dx, dy) 16 | if (dy == 0) { 17 | return 18 | } 19 | 20 | val visibleItemCount = recyclerView!!.getChildCount() 21 | val totalItemCount = mLinearLayoutManager.getItemCount() 22 | val lastCompletelyVisiableItemPosition = mLinearLayoutManager.findLastCompletelyVisibleItemPosition() 23 | 24 | if ( visibleItemCount > 0 && lastCompletelyVisiableItemPosition >= totalItemCount - 1 - span) { 25 | onLoadMore() 26 | } 27 | } 28 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/search/BangumiResultAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.search 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.SearchBangumiInfo 5 | import com.bumptech.glide.Glide 6 | import com.bumptech.glide.load.engine.DiskCacheStrategy 7 | import com.chad.library.adapter.base.BaseQuickAdapter 8 | import com.chad.library.adapter.base.BaseViewHolder 9 | 10 | /** 11 | * Created by 10喵喵 on 2017/11/8. 12 | */ 13 | class BangumiResultAdapter(list : List) 14 | : BaseQuickAdapter(R.layout.item_search_bangumi,list) { 15 | override fun convert(helper: BaseViewHolder?, item: SearchBangumiInfo.DataBean.ItemsBean?) { 16 | Glide.with(mContext) 17 | .load(item?.cover) 18 | .centerCrop() 19 | .diskCacheStrategy(DiskCacheStrategy.ALL) 20 | .placeholder(R.drawable.bili_default_image_tv) 21 | .dontAnimate() 22 | .into(helper?.getView(R.id.item_img)) 23 | 24 | helper?.setText(R.id.item_title,item?.title) 25 | if(item?.finish == 1)//是否完结 26 | helper?.setText(R.id.item_count, "${item?.newest_season},${item?.total_count}话全") 27 | else 28 | helper?.setText(R.id.item_count, "${item?.newest_season},更新至第${item?.total_count}话全") 29 | helper?.setText(R.id.item_details, item?.cat_desc) 30 | 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/search/DiliResultAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.search 2 | 3 | import android.view.View 4 | import com.a10miaomiao.bilimiao.R 5 | import com.a10miaomiao.bilimiao.entity.SearchDiliInfo 6 | import com.a10miaomiao.bilimiao.entity.SearchDiliInfo2 7 | import com.bumptech.glide.Glide 8 | import com.bumptech.glide.load.engine.DiskCacheStrategy 9 | import com.chad.library.adapter.base.BaseQuickAdapter 10 | import com.chad.library.adapter.base.BaseViewHolder 11 | 12 | class DiliResultAdapter(list : List) 13 | : BaseQuickAdapter(R.layout.item_search_bangumi,list) { 14 | override fun convert(helper: BaseViewHolder, item: SearchDiliInfo) { 15 | Glide.with(mContext) 16 | .load(item.suoluetudizhi) 17 | .centerCrop() 18 | .diskCacheStrategy(DiskCacheStrategy.ALL) 19 | .placeholder(R.drawable.bili_default_image_tv) 20 | .dontAnimate() 21 | .into(helper.getView(R.id.item_img)) 22 | 23 | helper.setText(R.id.item_title,item.typename) 24 | if (item.biaoqian.isEmpty()) 25 | helper.setVisible(R.id.item_count, false) 26 | else{ 27 | helper.setVisible(R.id.item_count, true) 28 | helper.setText(R.id.item_count, item.biaoqian) 29 | } 30 | helper.setText(R.id.item_details, item.description) 31 | } 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/search/MovieResultsAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.search 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.SearchMovieInfo 5 | import com.bumptech.glide.Glide 6 | import com.bumptech.glide.load.engine.DiskCacheStrategy 7 | import com.chad.library.adapter.base.BaseQuickAdapter 8 | import com.chad.library.adapter.base.BaseViewHolder 9 | 10 | /** 11 | * Created by 10喵喵 on 2018/2/13. 12 | */ 13 | class MovieResultsAdapter(list : List) 14 | : BaseQuickAdapter(R.layout.item_search_bangumi,list) { 15 | override fun convert(helper: BaseViewHolder?, item: SearchMovieInfo.DataBean.ItemsBean?) { 16 | Glide.with(mContext) 17 | .load(item?.cover) 18 | .centerCrop() 19 | .diskCacheStrategy(DiskCacheStrategy.ALL) 20 | .placeholder(R.drawable.bili_default_image_tv) 21 | .dontAnimate() 22 | .into(helper?.getView(R.id.item_img)) 23 | helper?.setText(R.id.item_title,item?.title) 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/search/SearchResultAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.search 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.SearchArchiveInfo 5 | import com.a10miaomiao.bilimiao.utils.NumberUtil 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.load.engine.DiskCacheStrategy 8 | import com.chad.library.adapter.base.BaseQuickAdapter 9 | import com.chad.library.adapter.base.BaseViewHolder 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/11/7. 13 | */ 14 | class SearchResultAdapter(list : List) 15 | : BaseQuickAdapter(R.layout.item_region_details,list) { 16 | override fun convert(helper: BaseViewHolder?, item: SearchArchiveInfo.DataBean.ItemsBean.ArchiveBean?) { 17 | Glide.with(mContext) 18 | .load(item?.cover) 19 | .centerCrop() 20 | .diskCacheStrategy(DiskCacheStrategy.ALL) 21 | .placeholder(R.drawable.bili_default_image_tv) 22 | .dontAnimate() 23 | .into(helper?.getView(R.id.item_img)) 24 | 25 | helper?.setText(R.id.item_title,item?.title) 26 | helper?.setText(R.id.item_play, NumberUtil.converString(item?.play!!)) 27 | helper?.setText(R.id.item_review, NumberUtil.converString(item?.danmaku!!)) 28 | helper?.setText(R.id.item_user_name,item?.author) 29 | helper?.setText(R.id.item_duration, item?.duration!!) 30 | } 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/adapter/search/UpperResultAdapter.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.adapter.search 2 | 3 | import com.a10miaomiao.bilimiao.R 4 | import com.a10miaomiao.bilimiao.entity.SearchUpperInfo 5 | import com.a10miaomiao.bilimiao.utils.NumberUtil 6 | import com.bumptech.glide.Glide 7 | import com.bumptech.glide.load.engine.DiskCacheStrategy 8 | import com.chad.library.adapter.base.BaseQuickAdapter 9 | import com.chad.library.adapter.base.BaseViewHolder 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/11/8. 13 | */ 14 | class UpperResultAdapter(list : List) 15 | : BaseQuickAdapter(R.layout.item_search_upper,list) { 16 | override fun convert(helper: BaseViewHolder?, item: SearchUpperInfo.DataBean.ItemsBean?) { 17 | Glide.with(mContext) 18 | .load(item?.cover) 19 | .centerCrop() 20 | .diskCacheStrategy(DiskCacheStrategy.ALL) 21 | .placeholder(R.drawable.bili_default_image_tv) 22 | .dontAnimate() 23 | .into(helper?.getView(R.id.item_avatar_view)) 24 | 25 | helper?.setText(R.id.item_user_name,item?.title) 26 | helper?.setText(R.id.item_user_fans,"粉丝:" +NumberUtil.converString(item?.fans!!)) 27 | helper?.setText(R.id.item_user_videos,"视频数:" +NumberUtil.converString(item?.archives!!)) 28 | helper?.setText(R.id.item_user_details,item?.sign) 29 | 30 | // if(item?.finish == 1)//是否完结 31 | // helper?.setText(R.id.item_count, "${item?.newest_season},${item?.total_count}话全") 32 | // else 33 | // helper?.setText(R.id.item_count, "${item?.newest_season},更新至第${item?.total_count}话全") 34 | // helper?.setText(R.id.item_details, item?.cat_desc) 35 | } 36 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/base/BaseActivity.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.base 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.os.Bundle 6 | import android.widget.Toast 7 | import com.a10miaomiao.bilimiao.utils.ThemeHelper 8 | import com.trello.rxlifecycle.components.support.RxAppCompatActivity 9 | 10 | 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/9/16. 14 | */ 15 | abstract class BaseActivity : RxAppCompatActivity() { 16 | abstract var layoutResID: Int 17 | var activity : Activity 18 | set(v){} 19 | get() = this 20 | 21 | var _theme = 0 22 | 23 | override fun onCreate(savedInstanceState: Bundle?) { 24 | super.onCreate(savedInstanceState) 25 | _theme = ThemeHelper.getThemeId(this) 26 | setTheme(_theme) 27 | setContentView(layoutResID) 28 | initViews(savedInstanceState) 29 | initToolBar() 30 | } 31 | 32 | abstract fun initViews(savedInstanceState: Bundle?) 33 | 34 | abstract fun initToolBar() 35 | 36 | fun toast(text: String) { 37 | Toast.makeText(this, text, Toast.LENGTH_LONG) 38 | .show() 39 | } 40 | 41 | override fun onResume() { 42 | super.onResume() 43 | if (_theme != ThemeHelper.getThemeId(activity)) { 44 | val intent = intent 45 | overridePendingTransition(0, 0)//不设置进入退出动画 46 | intent.addFlags(Intent.FLAG_ACTIVITY_NO_ANIMATION) 47 | finish() 48 | overridePendingTransition(0, 0) 49 | startActivity(intent) 50 | } 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/base/BaseFragment.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.base; 2 | 3 | import android.app.Activity 4 | import android.content.Context 5 | import android.os.Bundle 6 | import android.view.LayoutInflater 7 | import android.view.View 8 | import android.view.ViewGroup 9 | import com.a10miaomiao.bilimiao.utils.log 10 | 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/7/31. 14 | */ 15 | 16 | abstract class BaseFragment : LazyLoadFragment(){ 17 | private var rootView: View? = null 18 | protected var mActivity: Activity? = null 19 | protected abstract var layoutResId : Int 20 | 21 | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View { 22 | if (rootView == null) { 23 | rootView = inflater!!.inflate(layoutResId, container, false) 24 | initView(rootView) 25 | initData(savedInstanceState) 26 | //initListener() 27 | }else{ 28 | val parent = rootView?.parent as ViewGroup 29 | parent?.removeView(rootView) 30 | } 31 | return rootView!! 32 | } 33 | 34 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 35 | super.onViewCreated(view, savedInstanceState) 36 | finishCreateView(savedInstanceState) 37 | } 38 | 39 | abstract fun finishCreateView(savedInstanceState: Bundle?) 40 | 41 | /**StateView的根布局,默认是整个界面,如果需要变换可以重写此方法 */ 42 | fun getStateViewRoot(): View? { 43 | return rootView 44 | } 45 | 46 | override fun onAttach(context: Context) { 47 | super.onAttach(context) 48 | mActivity = context as Activity 49 | } 50 | 51 | open fun initView(view : View?){ 52 | 53 | } 54 | /** 55 | * 初始化数据 56 | */ 57 | open fun initData(savedInstanceState: Bundle?) { 58 | 59 | } 60 | 61 | override fun onFragmentFirstVisible() { 62 | //当第一次可见的时候,加载数据 63 | loadData() 64 | } 65 | 66 | //加载数据 67 | open fun loadData(){ 68 | 69 | } 70 | 71 | override fun onDestroy() { 72 | super.onDestroy() 73 | 74 | rootView = null 75 | } 76 | 77 | } 78 | 79 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/dialog/EditDialog.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.dialog 2 | 3 | import android.os.Bundle 4 | import android.support.v4.app.DialogFragment 5 | import android.view.* 6 | import com.a10miaomiao.bilimiao.R 7 | import com.a10miaomiao.bilimiao.utils.KeyboardUtil 8 | import kotlinx.android.synthetic.main.dialog_edit_name.* 9 | 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/10/23. 13 | */ 14 | class EditDialog : DialogFragment() { 15 | 16 | 17 | var onFinishInput : ((text : String) -> Unit)? = null 18 | 19 | override fun onCreate(savedInstanceState: Bundle?) { 20 | super.onCreate(savedInstanceState) 21 | setStyle(DialogFragment.STYLE_NO_FRAME, R.style.DialogStyle2) 22 | } 23 | 24 | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, 25 | savedInstanceState: Bundle?): View { 26 | val view = inflater!!.inflate(R.layout.dialog_edit_name, container,false) 27 | return view 28 | } 29 | 30 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 31 | btn_ok.setOnClickListener { 32 | KeyboardUtil.closeKeyboard(activity!!, et_content) 33 | dismiss() 34 | onFinishInput?.invoke(et_content.text.toString()) 35 | } 36 | dialog.setOnDismissListener { 37 | KeyboardUtil.closeKeyboard(activity!!, et_content) 38 | } 39 | view_search_outside.setOnClickListener { 40 | KeyboardUtil.closeKeyboard(activity!!, et_content) 41 | dismiss() 42 | } 43 | if(arguments!!.containsKey("hint")){ 44 | et_content.hint = arguments!!.getString("hint") 45 | } 46 | //et_content.setText(name) 47 | // var ea: Editable = et_content.text 48 | // et_content.setSelection(0, ea.length) 49 | } 50 | 51 | override fun onStart() { 52 | super.onStart() 53 | initDialog() 54 | } 55 | 56 | private fun initDialog() { 57 | val window = dialog.window 58 | val metrics = resources.displayMetrics 59 | val width = metrics.widthPixels //DialogSearch的宽 60 | window.setLayout(width, WindowManager.LayoutParams.MATCH_PARENT) 61 | window.setGravity(Gravity.BOTTOM) 62 | KeyboardUtil.openKeyboard(activity!!, et_content) 63 | } 64 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/dialog/QueryUserDialog.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.dialog 2 | 3 | import android.os.Bundle 4 | import android.support.v4.app.DialogFragment 5 | import android.view.LayoutInflater 6 | import android.view.View 7 | import android.view.ViewGroup 8 | import android.view.WindowManager 9 | import com.a10miaomiao.bilimiao.R 10 | import com.a10miaomiao.bilimiao.utils.IntentHandlerUtil 11 | import kotlinx.android.synthetic.main.dialog_user.* 12 | 13 | /** 14 | * Created by 10喵喵 on 2017/11/4. 15 | */ 16 | class QueryUserDialog : DialogFragment() { 17 | private val hash by lazy { 18 | arguments!!.getString("hash") 19 | } 20 | private var uid: String? = null 21 | 22 | override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, 23 | savedInstanceState: Bundle?): View { 24 | val view = inflater!!.inflate(R.layout.dialog_user, container) 25 | return view 26 | } 27 | 28 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) { 29 | loadData() 30 | btn_view.setOnClickListener { 31 | if (uid != null) { 32 | IntentHandlerUtil.openWithPlayer(activity!!, IntentHandlerUtil.TYPE_AUTHOR, uid.toString()) 33 | } 34 | dismiss() 35 | } 36 | 37 | } 38 | 39 | private fun loadData() { 40 | 41 | } 42 | 43 | override fun onStart() { 44 | super.onStart() 45 | initDialog() 46 | } 47 | 48 | private fun initDialog() { 49 | val window = dialog.window 50 | window.setLayout(WindowManager.LayoutParams.MATCH_PARENT, WindowManager.LayoutParams.WRAP_CONTENT) 51 | } 52 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/AudioDetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import com.a10miaomiao.bilimiao.netword.BiliApiService 4 | import com.a10miaomiao.bilimiao.netword.MiaoHttp 5 | import com.a10miaomiao.bilimiao.utils.log 6 | import org.json.JSONException 7 | import org.json.JSONObject 8 | import org.json.JSONTokener 9 | 10 | /** 11 | * Created by 10喵喵 on 2017/11/11. 12 | */ 13 | class AudioDetailsInfo(aid: String) : DetailsInfo(aid) { 14 | override var aidType = "au" 15 | // var audio_url = "" 16 | override fun get() { 17 | MiaoHttp.newStringClient( 18 | url = BiliApiService.getAudioInfo(aid), 19 | onResponse = { 20 | val jsonParser = JSONTokener(it) 21 | try { 22 | val jsonObject = (jsonParser.nextValue() as JSONObject) 23 | if (jsonObject.getInt("code") == 0) { 24 | val data = jsonObject.getJSONObject("data") 25 | pic = data.getString("cover") 26 | title = data.getString("title") 27 | // audio_url = if (urls.length() > 0) urls.getString(0) else "获取失败" 28 | onResponse?.invoke(this@AudioDetailsInfo) 29 | } else { 30 | onError?.invoke(Exception(), jsonObject.getString("msg")) 31 | } 32 | } catch (e: JSONException) { 33 | e.printStackTrace() 34 | onError?.invoke(e, "视频信息解析失败或无该au号") 35 | } catch (e: ClassCastException) { 36 | onError?.invoke(e, "解析失败 -2") 37 | } 38 | }, 39 | onError = { 40 | onError?.invoke(it, "无法连接到御坂网络") 41 | } 42 | ) 43 | } 44 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/BangumiEpisodesInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/26. 5 | */ 6 | data class BangumiEpisodesInfo( 7 | var av_id: String, 8 | var danmaku: Int, 9 | var index_title: String, 10 | var index: String 11 | ) 12 | /* 13 | public string av_id { get; set; } 14 | public int danmaku { get; set; } 15 | public string index_title { get; set; } 16 | public bool inLocal { get; set; } 17 | public string index { get; set; } 18 | public int orderindex { get; set; } 19 | public int episode_status { get; set; } 20 | public string episode_id { get; set; } 21 | public string badge { get; set; }*/ -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/BangumiRankInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/12/2. 5 | */ 6 | data class BangumiRankInfo ( 7 | var code: Int, 8 | var message: String, 9 | var result: Result 10 | ){ 11 | data class Result( 12 | var note: String, 13 | var list: List 14 | ) 15 | data class BangumiInfo( 16 | var season_id: String, 17 | var title: String, 18 | var cover: String, 19 | var pts: Int,//分数 20 | var is_finish: Int,//是否完结 1否 21 | var newest_ep_index: String, 22 | var sort_num: Int = 0 23 | ) 24 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/CvDetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import com.a10miaomiao.bilimiao.netword.BiliApiService 4 | import com.a10miaomiao.bilimiao.netword.MiaoHttp 5 | import com.a10miaomiao.bilimiao.utils.log 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/12/9. 9 | */ 10 | class CvDetailsInfo(aid: String) : DetailsInfo(aid) { 11 | override var aidType = "cv" 12 | override fun get() { 13 | MiaoHttp.newStringClient( 14 | url = BiliApiService.getCvInfo(aid), 15 | onResponse = { 16 | var a = "" 17 | var n = it.indexOf(a) 18 | var m = it.indexOf("", n) 19 | if (n != -1 && m != -1) { 20 | title = it.substring(n + a.length, m) 21 | a = "banner_url: \"" 22 | n = it.indexOf(a) 23 | m = it.indexOf("\",", n) 24 | log(m,n) 25 | if (n != -1 && m != -1) { 26 | pic = it.substring(n+ a.length, m) 27 | }else{ 28 | onError?.invoke(Exception(), "该专栏不存在或专栏没有封面") 29 | return@newStringClient 30 | } 31 | } else { 32 | onError?.invoke(Exception(), "解析失败") 33 | return@newStringClient 34 | } 35 | onResponse?.invoke(this@CvDetailsInfo) 36 | }, 37 | onError = { 38 | onError?.invoke(it, "无法连接到御坂网络") 39 | } 40 | ) 41 | } 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/DetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/5. 5 | */ 6 | abstract class DetailsInfo(var aid: String){ 7 | var title: String? = null 8 | abstract var aidType: String 9 | var pic: String? = null 10 | var onResponse: ((info: DetailsInfo) -> Unit)? = null 11 | var onError: ((e: kotlin.Throwable ,msg: String) -> Unit)? = null 12 | 13 | abstract fun get() 14 | 15 | // constructor(source: Parcel) : this(source.readString()) { 16 | // title = source.readString() 17 | // aidType = source.readString() 18 | // pic = source.readString() 19 | // } 20 | // 21 | // override fun writeToParcel(dest: Parcel?, flags: Int) { 22 | // dest?.writeString(this.aid) 23 | // dest?.writeString(this.title) 24 | // dest?.writeString(this.aidType) 25 | // dest?.writeString(this.pic) 26 | // } 27 | // 28 | // override fun describeContents(): Int { 29 | // return 0 30 | // } 31 | 32 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/DiliAnimeInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | 4 | //data class DiliAnimeInfo ( 5 | // var title: String, 6 | // var cover: String, 7 | // var update: String, 8 | // var age: String, 9 | // var region: String, 10 | // var tags: String, 11 | // var view: Int, 12 | // var introduction: String 13 | //) 14 | 15 | //"id": "2628", 16 | //"typename": "进击的巨人II", 17 | //"typedir": "/anime/kyojin2", 18 | //"suoluetudizhi": "http://www.dilidili.wang/uploads/allimg/160427/1_1502023841.jpg", 19 | //"diqu": "日本", 20 | //"niandai": "2017年4月", 21 | //"biaoqian": "热血|动作|奇幻", 22 | //"description": "人类曾一度惨遭巨人捕食而崩溃,濒临灭绝。幸存下来的人们为了防止巨人入侵住进了三层巨大的防护墙,在这隔绝的环境里享受了一百年的和平。不过作为“和平”的代价,人类失去了到墙壁的外面的“自由”,如同圈养的畜牲一般,安稳地生活着。主人公艾伦·耶格尔对还没见过的墙外世界抱有兴趣,同时也对人类失去的 “自由”抱", 23 | //"leixingtuijian": "热血", 24 | //"duoji_info": [ 25 | //{ 26 | // "id": "272", 27 | // "typename": "进击!巨人中学校", 28 | // "name": "第三季" 29 | //}, 30 | //{ 31 | // "id": "3142", 32 | // "typename": "进击的巨人第三季", 33 | // "name": "巨人中学校" 34 | //}, 35 | //{ 36 | // "id": "3366", 37 | // "typename": "飞翔吧!训练兵团", 38 | // "name": "飞翔吧!训练兵团" 39 | //} 40 | //] 41 | 42 | data class DiliAnimeInfo ( 43 | var id: String, 44 | var typename: String, 45 | var typedir: String, 46 | var suoluetudizhi: String, 47 | var niandai: String, 48 | var diqu: String, 49 | var biaoqian: String, 50 | var description: String, 51 | var leixingtuijian: String 52 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/DownEntryInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import android.os.Parcel 4 | import android.os.Parcelable 5 | 6 | /** 7 | * Created by 10喵喵 on 2018/2/12. 8 | */ 9 | data class DownEntryInfo ( 10 | var av_id: String, 11 | var ep_id: String? = null, 12 | var cid: String, 13 | var title: String, 14 | var cover: String, 15 | var season_id: String? = null, 16 | var index: Int = 0, 17 | var season_title: String? = null, 18 | var season_cover: String? = null, 19 | var video_type: String 20 | ): Parcelable{ 21 | constructor(parcel: Parcel) : this( 22 | parcel.readString(), 23 | parcel.readString(), 24 | parcel.readString(), 25 | parcel.readString(), 26 | parcel.readString(), 27 | parcel.readString(), 28 | parcel.readInt(), 29 | parcel.readString(), 30 | parcel.readString(), 31 | parcel.readString()) { 32 | } 33 | 34 | override fun writeToParcel(parcel: Parcel, flags: Int) { 35 | parcel.writeString(av_id) 36 | parcel.writeString(ep_id) 37 | parcel.writeString(cid) 38 | parcel.writeString(title) 39 | parcel.writeString(cover) 40 | parcel.writeString(season_id) 41 | parcel.writeInt(index) 42 | parcel.writeString(season_title) 43 | parcel.writeString(season_cover) 44 | parcel.writeString(video_type) 45 | } 46 | 47 | override fun describeContents(): Int { 48 | return 0 49 | } 50 | 51 | companion object CREATOR : Parcelable.Creator { 52 | override fun createFromParcel(parcel: Parcel): DownEntryInfo { 53 | return DownEntryInfo(parcel) 54 | } 55 | 56 | override fun newArray(size: Int): Array { 57 | return arrayOfNulls(size) 58 | } 59 | } 60 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/EpDetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import com.a10miaomiao.bilimiao.netword.MiaoHttp 4 | import org.json.JSONObject 5 | import org.json.JSONTokener 6 | 7 | class EpDetailsInfo(aid: String) : VideoDetailsInfo(aid) { 8 | override var aidType = "ep" 9 | 10 | override fun get() { 11 | MiaoHttp.newStringClient( 12 | url = "https://www.bilibili.com/bangumi/play/ep$aid", 13 | onResponse = { 14 | try { 15 | var a = "window.__INITIAL_STATE__={" 16 | var n = it.indexOf(a) 17 | var m = it.indexOf("};", n + a.length) 18 | var s = it.substring(n + a.length - 1, m + 1) 19 | val jsonParser = JSONTokener(s) 20 | val jsonObject = (jsonParser.nextValue() as JSONObject) 21 | 22 | //该集信息 23 | val epInfo = jsonObject.getJSONObject("epInfo") 24 | pic = epInfo.getString("cover") 25 | title = epInfo.getString("index_title") 26 | pages.add(VideoPageInfo( 27 | epInfo.getLong("cid"), 28 | "P1" 29 | )) 30 | //up主信息 31 | val upInfo = jsonObject.getJSONObject("upInfo") 32 | uper_id = upInfo.getInt("mid") 33 | uper_name = upInfo.getString("uname") 34 | uper_face = upInfo.getString("avatar") 35 | 36 | //番剧信息 37 | var mediaInfo = jsonObject.getJSONObject("mediaInfo") 38 | season_cover = mediaInfo.getString("cover") 39 | season_id = mediaInfo.getString("season_id") 40 | season_title = mediaInfo.getString("title") 41 | ep_id = aid 42 | download_type = "anime" 43 | onResponse?.invoke(this@EpDetailsInfo) 44 | } catch (e: Exception){ 45 | onError?.invoke(e, "获取失败了喵>﹏<") 46 | } 47 | }, 48 | onError = { 49 | onError?.invoke(it, "无法连接到御坂网络") 50 | } 51 | ) 52 | } 53 | 54 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/HomeRegionInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import android.content.Context 4 | import android.preference.PreferenceManager 5 | import com.a10miaomiao.bilimiao.R 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/9/16. 9 | */ 10 | data class HomeRegionInfo ( 11 | var name: String, 12 | var icon: Int 13 | ){ 14 | companion object{ 15 | fun create(context: Context): List { 16 | val prefs = PreferenceManager.getDefaultSharedPreferences(context) 17 | var list = ArrayList() 18 | val itemNames = arrayOf( 19 | "番剧", "国创", "动画", 20 | "音乐", "舞蹈", "游戏", 21 | "科技", "生活", "鬼畜", 22 | "时尚", "广告", "娱乐", 23 | "影视", "电影", "电视剧" 24 | ) 25 | val itemIcons = if (prefs.getBoolean("region_ico_new", false)) 26 | intArrayOf( 27 | R.drawable.ic_category_t13, R.drawable.ic_category_t167, R.drawable.ic_category_t1, 28 | R.drawable.ic_category_t3, R.drawable.ic_category_t129, R.drawable.ic_category_t4, 29 | R.drawable.ic_category_t36, R.drawable.ic_category_t160, R.drawable.ic_category_t119, 30 | R.drawable.ic_category_t155, R.drawable.ic_category_t165, R.drawable.ic_category_t5, 31 | R.drawable.ic_category_t181, R.drawable.ic_category_t23, R.drawable.ic_category_t11 32 | ) 33 | else 34 | intArrayOf( 35 | R.drawable.ic_region_fj, R.drawable.ic_region_fj_domestic, R.drawable.ic_region_dh, 36 | R.drawable.ic_region_yy, R.drawable.ic_region_wd, R.drawable.ic_region_yx, 37 | R.drawable.ic_region_kj, R.drawable.ic_region_sh, R.drawable.ic_region_gc, 38 | R.drawable.ic_region_ss, R.drawable.ic_region_ad, R.drawable.ic_region_yl, 39 | R.drawable.ic_region_ys,R.drawable.ic_region_dy, R.drawable.ic_region_dsj 40 | ) 41 | (0 until itemNames.size).mapTo(list) { HomeRegionInfo(itemNames[it],itemIcons[it]) } 42 | return list 43 | } 44 | } 45 | } 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/LiveDetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | import com.a10miaomiao.bilimiao.netword.BiliApiService 4 | import com.a10miaomiao.bilimiao.netword.MiaoHttp 5 | import org.json.JSONException 6 | import org.json.JSONObject 7 | import org.json.JSONTokener 8 | 9 | /** 10 | * Created by 10喵喵 on 2017/10/12. 11 | */ 12 | class LiveDetailsInfo(aid: String): DetailsInfo(aid) { 13 | override var aidType = "live" 14 | override fun get() { 15 | MiaoHttp.newStringClient( 16 | url = BiliApiService.getLiveInfo(aid), 17 | onResponse = { 18 | val jsonParser = JSONTokener(it) 19 | try { 20 | val jsonObject = (jsonParser.nextValue() as JSONObject).getJSONObject("data") 21 | pic = jsonObject.getString("cover") 22 | //log(pic!!) 23 | title = jsonObject.getString("title") 24 | //log(title!!) 25 | onResponse?.invoke(this@LiveDetailsInfo) 26 | } catch (e: JSONException) { 27 | onError?.invoke(e,"视频信息解析失败或无该live号") 28 | } catch (e: ClassCastException){ 29 | onError?.invoke(e,"网络好像有问题>﹏<") 30 | } 31 | }, 32 | onError = { 33 | onError?.invoke(it,"无法连接到御坂网络") 34 | } 35 | ) 36 | } 37 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/MiaoAdInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * 视频推荐(广告) 5 | */ 6 | data class MiaoAdInfo ( 7 | var code: Int, 8 | var msg: String, 9 | var data: DataBean 10 | ){ 11 | data class DataBean( 12 | var isShow: Boolean, 13 | var title: String, 14 | var link: LinkBean 15 | ) 16 | data class LinkBean( 17 | var text: String, 18 | var url: String 19 | ) 20 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/RegionTypeDetailsInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/9/19. 5 | */ 6 | data class RegionTypeDetailsInfo( 7 | var code: Int, 8 | var result: List 9 | ){ 10 | /** 11 | *arcurl:"http://www.bilibili.com/video/av11337775" 12 | *author:小小☆精灵" 13 | *id:11337775 14 | *pic:"//i0.hdslb.com/bfs/archive/166fb5c456c71b8a8ab6a203d26d3e9ae4a2cadf.jpg_160x100.jpg" 15 | *play:"221368" 16 | *video_review:2940 17 | *title:"【进击的巨人/史诗/AMV】 献出心脏——为自由而战!!!" 18 | */ 19 | data class Result( 20 | var arcurl: String, 21 | var author: String, 22 | var id: String, 23 | var mid: String, 24 | var pic: String, 25 | var play: String, 26 | var title: String, 27 | var video_review: Int, 28 | var duration: Int 29 | ) 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/SearchDiliInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | //{ 4 | // "typeid": "547", 5 | // "typename": "初音岛第一部", 6 | // "temparticle": "{style}/ckplayer_common2youku.htm", 7 | // "keywords": "初音岛第一部第一季", 8 | // "biaoqian": "校园|后宫|青春|纠结", 9 | // "description": "故事发生在这个整年都会不可思议地开着樱花而出名的新月型岛——初音岛。主人公朝仓纯一在岛上的风见学园上学,他拥有在睡觉时能看到别人梦境的奇异能力,还能使用由魔法使老奶奶所教授的能变出点心的小魔法.", 10 | // "suoluetudizhi": "http://www.dilidili.wang/uploads/201601/1-1601051411503Z.jpg", 11 | // "zhuangtai": "完结", 12 | // "tempindex": "{style}/index_article.htm", 13 | // "templist": "{style}/list_article2youku.htm", 14 | // "duoshuoid": "", 15 | // "banben": "初音岛", 16 | // "istype": "" 17 | //}, 18 | data class SearchDiliInfo ( 19 | var typeid: String, 20 | var typename: String, // 标题 21 | var temparticle: String, 22 | var keywords: String, 23 | var biaoqian: String, 24 | var description: String, 25 | var suoluetudizhi: String, 26 | var zhuangtai: String, 27 | var tempindex: String, 28 | var templist: String, 29 | var duoshuoid: String, 30 | var banben: String 31 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/SearchDiliInfo2.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | data class SearchDiliInfo2( 4 | var code: Int, 5 | var msg: String, 6 | var data: List 7 | ){ 8 | // age: "2016年7月" 9 | // cover: "http://www.dilidili.wang/uploads/allimg/180615/290_0052169471.jpg" 10 | // cv: [{name: "白石凉子"}, {name: "花江夏树"}, {name: "钉宫理惠"}, {name: "福圆美里"}, {name: "嘉数由美"}, {name: "门胁舞以"},…] 11 | // dili_url: "/anime/mahosojoyiliya3/" 12 | // id: 1700 13 | // points: "哇哦,我好兴奋啊!" 14 | // region: "日本" 15 | // staff: "SILVER LINK" 16 | // state: 1 17 | // tag_id: null 18 | // tags: [{name: "搞笑"}, {name: "萝莉"}, {name: "百合"}] 19 | // title: "魔法少女伊莉雅 第四季" 20 | // view: 968793 21 | data class DataBean( 22 | var age: String, 23 | var cover: String, 24 | // var cv: String, 25 | var dili_url: String, 26 | var id: Int, 27 | var points: String, 28 | var region: String, 29 | var staff: String, 30 | // var tags: String, 31 | var title: String, 32 | var view: Int 33 | ) 34 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/SubmitVideosInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/30. 5 | */ 6 | data class SubmitVideosInfo ( 7 | var data : SubmitVideosDataInfo, 8 | var status : Boolean 9 | ){ 10 | data class SubmitVideosDataInfo( 11 | var count : Int, 12 | var vlist : List 13 | ) 14 | data class VideoInfo( 15 | var title : String, 16 | var aid : Int, 17 | var pic : String, 18 | var play : Int, 19 | var created : Long, 20 | var video_review : Int, 21 | var length : String 22 | ) 23 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/ThemePickerInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/12/25. 5 | */ 6 | data class ThemePickerInfo( 7 | var color: Int, 8 | var name: String, 9 | var isSelected: Boolean = false 10 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/UpperChannelInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/29. 5 | */ 6 | data class UpperChannelInfo( 7 | var code : Int, 8 | var message : String, 9 | var data : List 10 | ){ 11 | data class UperChannelData( 12 | var cid : Int, 13 | var mid : Int, 14 | var name : String, 15 | var intro : String, 16 | var mtime : Long, 17 | var count : Int, 18 | var cover : String, 19 | var archives : List, 20 | var isAll: Boolean = false 21 | ) 22 | 23 | data class VideoArchives( 24 | var aid : Int, 25 | var duration : Int, 26 | var title : String, 27 | var pic : String, 28 | var ctime : Long 29 | ) 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/UpperChannelVideoInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/31. 5 | */ 6 | data class UpperChannelVideoInfo( 7 | var code: Int, 8 | var message: String, 9 | var data: UperChannelVideoData 10 | ) { 11 | data class UperChannelVideoData( 12 | var list: UperChannelVideoList 13 | ) 14 | data class UperChannelVideoList( 15 | var archives: List 16 | ) 17 | data class VideoArchives( 18 | var aid: Int, 19 | var duration: Int, 20 | var title: String, 21 | var pic: String, 22 | var pubdate: Long, 23 | var stat: VideoStat 24 | ) 25 | 26 | data class VideoStat( 27 | var danmaku: Int, 28 | var view: Int 29 | ) 30 | 31 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/VideoRankInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/12/2. 5 | */ 6 | data class VideoRankInfo ( 7 | var rank: RankInfo 8 | ){ 9 | data class RankInfo( 10 | var code: Int, 11 | var note: String, 12 | var num: Int, 13 | var pages: Int, 14 | var list: List 15 | ) 16 | data class VideoInfo( 17 | var aid: String, 18 | var title: String, 19 | var author: String, 20 | var mid: String, 21 | var coins: Int,//硬币数 22 | var duration: String, 23 | var pic: String, 24 | var play: String, 25 | var pts: Int,//分数 26 | var video_review: Int,//弹幕数 27 | var sort_num: Int = 0 28 | ) 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/client/ClientDownInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity.client 2 | 3 | /** 4 | * Created by 10喵喵 on 2018/2/12. 5 | */ 6 | data class ClientDownInfo ( 7 | var season_id: String, 8 | var episode_id: String, 9 | var av_id: String, 10 | var danmaku_id: String, 11 | var quality: String, 12 | var entry: EntryInfo, 13 | var index: DownIndexInfo? = null 14 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/client/DownIndexInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity.client 2 | 3 | import com.a10miaomiao.bilimiao.netword.ApiHelper 4 | 5 | /** 6 | * Created by 10喵喵 on 2018/2/12. 7 | */ 8 | data class DownIndexInfo( 9 | var from: String = "bangumi", 10 | var type_tag: String = "lua.hdflv2.bb2api.bd", 11 | var description: String = "高清", 12 | var is_stub: Boolean = false, 13 | var psedo_bitrate: Int = 0, 14 | var segment_list: List, 15 | var parse_timestamp_milli: Long = ApiHelper.getTimeSpen(), 16 | var available_period_milli: Long = 0, 17 | var local_proxy_type: Int = 0, 18 | var user_agent: String = "Bilibili Freedoooooom/MarkII", 19 | var is_downloaded: Boolean = false, 20 | var is_resolved: Boolean = true, 21 | var player_codec_config_list: List, 22 | var time_length: Long 23 | ) { 24 | data class PlayerCodecConfigInfo( 25 | var player: String, 26 | var use_list_player: Boolean = false, 27 | var use_ijk_media_codec: Boolean = false 28 | ) 29 | 30 | data class SegmentInfo( 31 | var url: String, 32 | var duration: Long = 0, 33 | var bytes: Long = 0, 34 | var meta_url: String = "" 35 | ) 36 | 37 | } 38 | /** 39 | * public class DownIndexModel 40 | { 41 | 42 | 43 | } 44 | public class player_codec_config_listModel 45 | { 46 | 47 | } 48 | public class 49 | { 50 | 51 | } 52 | } 53 | * ***/ -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/entity/client/EntryInfo.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.entity.client 2 | 3 | /** 4 | * Created by 10喵喵 on 2018/2/12. 5 | */ 6 | data class EntryInfo( 7 | var season_id: String, 8 | var avid: String? = null, 9 | var title: String, 10 | var cover: String, 11 | 12 | var source: SourceInfo? = null, 13 | var ep: EpInfo, 14 | var page_data: PageDataInfo? = null, 15 | 16 | var is_completed: Boolean, 17 | var total_bytes: Long = 0, 18 | var downloaded_bytes: Long = 0, 19 | 20 | var type_tag: String = "lua.flv720.bb2api.64", 21 | 22 | var prefered_video_quality: Int = 100, 23 | var guessed_total_bytes: Int = 0, 24 | 25 | var total_time_milli: Long = 0, 26 | var danmaku_count: Int = 3000, 27 | var time_update_stamp: Long = 1511875136369, 28 | var time_create_stamp: Long = 1511868244605 29 | ) { 30 | // data class SourceInfo( 31 | // var av_id: Long, 32 | // var page: String, 33 | // var danmaku: Long, 34 | // var cover: String, 35 | // var episode_id: Long, 36 | // var index: String, 37 | // var index_title: String 38 | // ) 39 | 40 | data class SourceInfo( 41 | var av_id: Long, 42 | var cid: Long, 43 | var website: String = "bangumi", 44 | var webvideo_id: String = "" 45 | ) 46 | data class EpInfo( 47 | var av_id: Long, 48 | var page: Int = 1, 49 | var danmaku: Long, 50 | var cover: String, 51 | var episode_id: Long, 52 | var index_title: String = "", 53 | var from: String = "bangumi" 54 | //var season_type: Int = 4 55 | ) 56 | 57 | data class PageDataInfo( 58 | var cid: Long, 59 | var page: Int, 60 | var from: String = "vupload", 61 | var part: String, 62 | var link: String, 63 | var weblink: String, 64 | var rich_vid: String, 65 | var offsit: String, 66 | var vid: String, 67 | var has_alias: Boolean = false, 68 | var tid: Int 69 | ) 70 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/fragments/SelectorDateFragment.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.fragments 2 | 3 | import android.os.Bundle 4 | import com.a10miaomiao.bilimiao.R 5 | import com.a10miaomiao.bilimiao.activitys.SelectorDateActivity 6 | import com.a10miaomiao.bilimiao.base.BaseFragment 7 | import com.a10miaomiao.bilimiao.utils.SelectorDateUtil 8 | import kotlinx.android.synthetic.main.fragment_selector_date.* 9 | 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/9/18. 13 | */ 14 | class SelectorDateFragment : BaseFragment() { 15 | override var layoutResId: Int = R.layout.fragment_selector_date 16 | override fun finishCreateView(savedInstanceState: Bundle?) { 17 | btn_time.setOnClickListener { 18 | SelectorDateActivity.launch(activity!!) 19 | } 20 | loadDate() 21 | } 22 | 23 | override fun onStart() { 24 | super.onStart() 25 | loadDate() 26 | } 27 | 28 | /** 29 | * 加载日期 30 | */ 31 | private fun loadDate() { 32 | val selectorDateUtil = SelectorDateUtil(activity!!) 33 | val s = arrayOf("当前为默认模式", "当前为自定义模式", "当前为快速选择月份模式") 34 | text_type.text = s[selectorDateUtil.timeType] 35 | val timeFrom = SelectorDateUtil.formatDate(selectorDateUtil.timeFrom!!, "/") 36 | val timeTo = SelectorDateUtil.formatDate(selectorDateUtil.timeTo!!, "/") 37 | text_time.text = "$timeFrom\n至\n$timeTo" 38 | } 39 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/media/VideoSource.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.media 2 | 3 | import android.net.Uri 4 | 5 | data class VideoSource ( 6 | var uri: Uri, 7 | var length: Long, 8 | var size: Long 9 | ) -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/media/callback/DanmakuSwitchListener.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.media.callback; 2 | 3 | /** 4 | * Created by hcc on 16/8/31 21:44 5 | * 100332338@qq.com 6 | *

7 | * 弹幕开关回调接口 8 | */ 9 | public interface DanmakuSwitchListener 10 | { 11 | 12 | void setDanmakushow(boolean isShow); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/media/callback/MediaController.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.media.callback 2 | 3 | import android.view.View 4 | 5 | interface MediaController { 6 | fun setEnabled(enabled: Boolean) 7 | fun show() 8 | fun show(timeout: Int) 9 | fun hide() 10 | fun isShowing(): Boolean 11 | fun setMediaPlayer(player: MediaPlayerListener) 12 | fun setAnchorView(v: View) 13 | fun setTitle(title: String) 14 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/media/callback/MediaPlayerListener.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.media.callback; 2 | 3 | /** 4 | * Created by hcc on 16/8/31 21:42 5 | * 100332338@qq.com 6 | *

7 | * 视频控制回调接口 8 | */ 9 | public interface MediaPlayerListener 10 | { 11 | 12 | void start(); 13 | 14 | void pause(); 15 | 16 | long getDuration(); 17 | 18 | long getCurrentPosition(); 19 | 20 | void seekTo(long pos); 21 | // void seekTo2(long pos); 22 | 23 | boolean isPlaying(); 24 | 25 | long getBufferPercentage(); 26 | 27 | boolean canPause(); 28 | } 29 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/media/callback/VideoBackListener.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.media.callback; 2 | 3 | /** 4 | * Created by hcc on 16/9/3 16:26 5 | * 100332338@qq.com 6 | *

7 | * 视频返回回调接口 8 | */ 9 | public interface VideoBackListener 10 | { 11 | 12 | void back(); 13 | } 14 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/AnimationUtil.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils; 2 | 3 | import android.content.Context; 4 | import android.view.animation.AlphaAnimation; 5 | import android.view.animation.Animation; 6 | import android.view.animation.AnimationSet; 7 | import android.view.animation.TranslateAnimation; 8 | 9 | /** 10 | * Created by 10喵喵 on 2017/9/24. 11 | */ 12 | public class AnimationUtil { 13 | 14 | public final static int ANIMATION_IN_TIME=500; 15 | public final static int ANIMATION_OUT_TIME=500; 16 | 17 | public static Animation createInAnimation(Context context,int fromYDelta){ 18 | AnimationSet set=new AnimationSet(context,null); 19 | set.setFillAfter(true); 20 | 21 | TranslateAnimation animation=new TranslateAnimation(0,0,fromYDelta,0); 22 | animation.setDuration(ANIMATION_IN_TIME); 23 | set.addAnimation(animation); 24 | 25 | AlphaAnimation alphaAnimation=new AlphaAnimation(0,1); 26 | alphaAnimation.setDuration(ANIMATION_IN_TIME); 27 | set.addAnimation(alphaAnimation); 28 | 29 | 30 | return set; 31 | } 32 | 33 | public static Animation createOutAnimation(Context context,int toYDelta){ 34 | AnimationSet set=new AnimationSet(context,null); 35 | set.setFillAfter(true); 36 | 37 | TranslateAnimation animation=new TranslateAnimation(0,0,0,toYDelta); 38 | animation.setDuration(ANIMATION_OUT_TIME); 39 | set.addAnimation(animation); 40 | 41 | AlphaAnimation alphaAnimation=new AlphaAnimation(1,0); 42 | alphaAnimation.setDuration(ANIMATION_OUT_TIME); 43 | set.addAnimation(alphaAnimation); 44 | 45 | 46 | return set; 47 | } 48 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/BiliClientDownHelper.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.content.Context 4 | import android.os.Environment 5 | import android.preference.PreferenceManager 6 | import com.a10miaomiao.bilimiao.entity.client.ClientDownInfo 7 | 8 | /** 9 | * Created by 10喵喵 on 2018/2/12. 10 | */ 11 | object BiliClientDownHelper { 12 | /** 13 | * 创建番剧 14 | */ 15 | fun createAnime(context: Context, info: ClientDownInfo) { 16 | val prefs = PreferenceManager.getDefaultSharedPreferences(context) 17 | var client_type = prefs.getString("bili_client_type","0").toInt() 18 | var biliPackname = arrayOf("tv.danmaku.bili" 19 | , "com.bilibili.app.in" 20 | , "com.bilibili.app.blue")[client_type] 21 | var biliPath = Environment.getExternalStorageDirectory().path + "/Android/data" + "/$biliPackname/download/" 22 | FileUtil.isPath(biliPath) 23 | var sPath = FileUtil.isPath(biliPath + "s_${info.season_id}/") //番剧文件夹 24 | var ePath = FileUtil.isPath(sPath + info.episode_id + "/") //剧集文件夹 25 | //var videoPath = FileUtil.isPath(ePath + info.quality + "/") //视频文件夹 26 | FileUtil(ePath, miao = false).saveJSON(info.entry, "entry") 27 | // FileUtil(videoPath, miao = false).saveJSON(info.index, "entry") 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/ConstantUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | /** 4 | * Created by 10喵喵 on 2017/10/29. 5 | */ 6 | object ConstantUtil { 7 | val APP_NAME = "bilimiao" 8 | val EXTRA_PARTITION = "extra_partition" 9 | val EXTRA_RID = "extra_rid" 10 | val DATA = "data" 11 | var INDEX = "index" 12 | 13 | val TIME_TYPE = "timeType" 14 | 15 | val TIME_TYPE_DEFAULT = 0 //默认 16 | val TIME_TYPE_CUSTOM = 1 //自定义 17 | val TIME_TYPE_MONTH = 2 //按月份 18 | 19 | val TIME_FROM = "timeFrom" 20 | val TIME_TO = "timeTo" 21 | val TIME_IS_LINK = "timeIsLink" 22 | 23 | val PLAYER = "player" 24 | 25 | val PLAYER_BILI = 0 //哔哩哔哩动画 26 | val PLAYER_PLAY = 1 //哔哩哔哩 play版 27 | val PLAYER_BILIBLUE = 2 //哔哩哔哩概念版 28 | // val PLAYER_BILIXL = 3 //哔哩哔哩白 29 | val PLAYER_BROWSER = 3 //浏览器 30 | 31 | val ID = "id" 32 | val AID = "aid" 33 | val TYPE = "type" 34 | val DO = "do" 35 | val MID = "mid" 36 | val CID = "cid" 37 | val REFERER = "referer" 38 | var PIC = "pic" 39 | val NAME = "name" 40 | var KETWORD = "keyword" 41 | val DILIURL = "DILIURL" 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/DisplayUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.app.Activity 4 | 5 | fun Activity.dip(dipValue: Int): Int{ 6 | val scale = this.resources.displayMetrics.density 7 | return (dipValue * scale + 0.5f).toInt() 8 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/IntentHandlerUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.app.Activity 4 | import android.content.Intent 5 | import android.net.Uri 6 | import android.preference.PreferenceManager 7 | import com.a10miaomiao.bilimiao.activitys.VideoInfoActivity 8 | 9 | /** 10 | * Created by 10喵喵 on 2017/11/5. 11 | */ 12 | object IntentHandlerUtil { 13 | val TYPE_VIDEO = "video" 14 | val TYPE_AUTHOR = "author" 15 | val TYPE_BANGUMI = "bangumi" 16 | /** 17 | * 调用b站打开打开 18 | */ 19 | fun openWithPlayer(activity: Activity,type: String, id: String){ 20 | val prefs = PreferenceManager.getDefaultSharedPreferences(activity) 21 | if (!prefs.getBoolean("is_bili_player", false)) { 22 | if(type == TYPE_VIDEO){ 23 | VideoInfoActivity.launch(activity,id) 24 | return 25 | } 26 | } 27 | openWithPlayer_old(activity, type, id) 28 | } 29 | 30 | fun openWithPlayer_old(activity: Activity,type: String, id: String){ 31 | try { 32 | var intent = Intent(Intent.ACTION_VIEW) 33 | var url = when(type){ 34 | TYPE_VIDEO -> "bilibili://video/$id" 35 | TYPE_AUTHOR -> "https://space.bilibili.com/$id" 36 | TYPE_BANGUMI -> "bilibili://bangumi/season/$id" 37 | else -> "bilibili://video/$id" 38 | } 39 | intent.data = Uri.parse(url) 40 | activity.startActivity(intent) 41 | }catch (e: Exception){ 42 | var intent = Intent(Intent.ACTION_VIEW) 43 | var url = when(type){ 44 | TYPE_VIDEO -> "http://www.bilibili.com/video/av$id" 45 | TYPE_AUTHOR -> "https://space.bilibili.com/$id" 46 | TYPE_BANGUMI -> "http://bangumi.bilibili.com/anime/$id/" 47 | else -> "http://www.bilibili.com/video/av$id" 48 | } 49 | intent.data = Uri.parse(url) 50 | activity.startActivity(intent) 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/KeyboardUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.content.Context 4 | import android.view.inputmethod.InputMethodManager 5 | import android.widget.EditText 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/10/23. 9 | */ 10 | object KeyboardUtil{ 11 | fun openKeyboard(context: Context,et: EditText) { 12 | val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 13 | imm.showSoftInput(et, InputMethodManager.RESULT_SHOWN) 14 | imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY) 15 | } 16 | 17 | fun closeKeyboard(context: Context,et: EditText) { 18 | val imm = context.getSystemService(Context.INPUT_METHOD_SERVICE) as InputMethodManager 19 | imm.hideSoftInputFromWindow(et.windowToken, 0) 20 | } 21 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/LogUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.util.Log 4 | 5 | /** 6 | * Created by 10喵喵 on 2017/8/3. 7 | */ 8 | fun log(msg: String) { 9 | log("------", msg) 10 | } 11 | fun log(msg: Int) { 12 | log(msg.toString()) 13 | } 14 | fun log(msg: Long) { 15 | log(msg.toString()) 16 | } 17 | fun log(tag: String, msg: String) { 18 | var msg = msg.trim() 19 | var index = 0 20 | val maxLength = 3000 21 | var sub: String 22 | while (index < msg.length) { 23 | // java的字符不允许指定超过总的长度end 24 | if (msg.length <= index + maxLength) { 25 | sub = msg.substring(index) 26 | } else { 27 | sub = msg.substring(index, index + maxLength) 28 | } 29 | index += maxLength 30 | Log.d(tag, sub.trim()) 31 | } 32 | } 33 | fun log(tag: Int, msg: String) { 34 | log(tag.toString(),msg) 35 | } 36 | fun log(tag: String, msg: Int) { 37 | log(tag,msg.toString()) 38 | } 39 | fun log(tag: Int, msg: Int) { 40 | log(tag.toString(),msg.toString()) 41 | } 42 | fun log(tag: String, msg: Long) { 43 | log(tag,msg.toString()) 44 | } 45 | 46 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/NumberUtil.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils; 2 | 3 | import java.text.SimpleDateFormat; 4 | import java.util.Date; 5 | 6 | /** 7 | * Created by hcc on 2016/10/11 14:35 8 | * 100332338@qq.com 9 | */ 10 | 11 | public class NumberUtil { 12 | 13 | public static String converString(int num) { 14 | if (num < 10000) { 15 | return String.valueOf(num); 16 | } 17 | String unit = "万"; 18 | double newNum = num / 10000.0; 19 | 20 | String numStr = String.format("%." + 1 + "f", newNum); 21 | return numStr + unit; 22 | } 23 | public static String converString(String num) { 24 | try { 25 | return converString(Integer.valueOf(num)); 26 | }catch (NumberFormatException e){ 27 | return "--"; 28 | } 29 | } 30 | 31 | public static String converDuration(int duration) { 32 | String s = String.valueOf(duration % 60); 33 | String min = String.valueOf(duration / 60); 34 | if (s.length() == 1) 35 | s = "0" + s; 36 | if (min.length() == 1) 37 | min = "0" + min; 38 | return min + ":" + s; 39 | } 40 | 41 | public static String converCTime(Long ctime) { 42 | Date date = new Date(ctime * 1000); 43 | SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); 44 | return sf.format(date); 45 | } 46 | 47 | public static String converCTime2(Long ctime) { 48 | Date date = new Date(ctime); 49 | SimpleDateFormat sf = new SimpleDateFormat("yyyy-MM-dd"); 50 | return sf.format(date); 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/SettingUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.content.Context 4 | 5 | 6 | 7 | /** 8 | * Created by 10喵喵 on 2017/9/22. 9 | */ 10 | class SettingUtil{ 11 | companion object{ 12 | fun putString(context: Context, key: String, value: String) { 13 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 14 | val editor = sp.edit() 15 | editor.putString(key, value) 16 | editor.apply() 17 | } 18 | 19 | fun putInt(context: Context, key: String, value: Int) { 20 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 21 | val editor = sp.edit() 22 | editor.putInt(key, value) 23 | editor.apply() 24 | //Log.d("value", value.toString()) 25 | } 26 | fun putBoolean(context: Context, key: String, value: Boolean) { 27 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 28 | val editor = sp.edit() 29 | editor.putBoolean(key, value) 30 | editor.apply() 31 | //Log.d("value", value.toString()) 32 | } 33 | fun getString(context: Context, key: String, defValue: String): String { 34 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 35 | return sp.getString(key, defValue) 36 | } 37 | 38 | fun getInt(context: Context, key: String, defValue: Int): Int { 39 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 40 | return sp.getInt(key, defValue) 41 | } 42 | fun getBoolean(context: Context, key: String, defValue: Boolean): Boolean { 43 | val sp = context.getSharedPreferences("bilimiao", Context.MODE_PRIVATE) 44 | return sp.getBoolean(key, defValue) 45 | } 46 | 47 | } 48 | } 49 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/TextUtil.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | object TextUtil { 4 | fun getIntermediateText1(text: String, s: String, e: String): String { 5 | val n = text.indexOf(s) 6 | val m = text.indexOf(e, n + s.length) 7 | return if (m != -1 && n != -1 && m > n) { 8 | text.substring(n + s.length, m) 9 | } else { 10 | "" 11 | } 12 | } 13 | 14 | fun getIntermediateTexts(text: String, s: String, e: String): ArrayList { 15 | val result = ArrayList() 16 | var m = 0 17 | var n = 0 18 | while (true) { 19 | n = text.indexOf(s, m) 20 | if (n == -1) 21 | break 22 | m = text.indexOf(e, n + s.length) 23 | if (m == -1) 24 | break 25 | result.add(text.substring(n + s.length, m)) 26 | } 27 | return result 28 | } 29 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/ThemeHelper.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils 2 | 3 | import android.content.Context 4 | import android.content.SharedPreferences 5 | import com.a10miaomiao.bilimiao.R 6 | 7 | 8 | /** 9 | * Created by 10喵喵 on 2017/12/25. 10 | */ 11 | object ThemeHelper{ 12 | private val CURRENT_THEME = "theme_current" 13 | 14 | val themeIds = arrayOf( 15 | R.style.PinkTheme, 16 | R.style.RedTheme, 17 | R.style.YellowTheme, 18 | R.style.GreenTheme, 19 | R.style.BlueTheme, 20 | R.style.PurpleTheme, 21 | R.style.NightTheme 22 | ) 23 | 24 | fun getSharePreference(context: Context): SharedPreferences { 25 | return context.getSharedPreferences("bilimiao_theme", Context.MODE_PRIVATE) 26 | } 27 | 28 | 29 | fun setTheme(context: Context, themeId: Int) { 30 | getSharePreference(context).edit() 31 | .putInt(CURRENT_THEME, themeId) 32 | .apply() 33 | } 34 | 35 | 36 | fun getTheme(context: Context): Int { 37 | return getSharePreference(context).getInt(CURRENT_THEME, 0) 38 | } 39 | 40 | fun getThemeId(context: Context): Int { 41 | var index = getTheme(context) 42 | if(index >= themeIds.size) 43 | index = 0 44 | return themeIds[index] 45 | } 46 | 47 | fun getColorAccent(context: Context): Int { 48 | return arrayOf( 49 | R.color.pink, 50 | R.color.red, 51 | R.color.orange, 52 | R.color.green, 53 | R.color.blue, 54 | R.color.purple, 55 | R.color.nightColorAccent 56 | )[getTheme(context)] 57 | } 58 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/utils/ViewUtils.java: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.utils; 2 | 3 | import android.view.View; 4 | 5 | /** 6 | * Created by 10喵喵 on 2017/9/24. 7 | */ 8 | public class ViewUtils { 9 | 10 | /** 11 | * 获取控件的高度 12 | */ 13 | public static int getViewMeasuredHeight(View view) { 14 | calculateViewMeasure(view); 15 | return view.getMeasuredHeight(); 16 | } 17 | 18 | /** 19 | * 获取控件的宽度 20 | */ 21 | public static int getViewMeasuredWidth(View view) { 22 | calculateViewMeasure(view); 23 | return view.getMeasuredWidth(); 24 | } 25 | 26 | /** 27 | * 测量控件的尺寸 28 | */ 29 | private static void calculateViewMeasure(View view) { 30 | int w = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 31 | int h = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED); 32 | 33 | view.measure(w, h); 34 | } 35 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/views/LoadMoreView.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.views 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.View 6 | import android.widget.FrameLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import kotlinx.android.synthetic.main.layout_load_more.view.* 9 | 10 | 11 | /** 12 | * Created by 10喵喵 on 2017/9/29. 13 | */ 14 | class LoadMoreView : FrameLayout { 15 | companion object{ 16 | val LOADING = 0 //加载更多 17 | val NOMORE = 1 //没有更多 18 | val FAIL = 2 //加载失败 19 | } 20 | 21 | var state : Int? = null 22 | set(value) { 23 | field = value 24 | when(value){ 25 | LOADING ->{ 26 | text?.text = "加载中" 27 | progress?.visibility = View.VISIBLE 28 | } 29 | NOMORE ->{ 30 | visibility = View.VISIBLE 31 | text?.text = "下面没有了" 32 | progress?.visibility = View.GONE 33 | } 34 | FAIL ->{ 35 | visibility = View.VISIBLE 36 | text?.text = "无法连接到御坂网络" 37 | progress?.visibility = View.GONE 38 | } 39 | } 40 | } 41 | 42 | var isLoading: Boolean = true 43 | private set 44 | get() = visibility == View.VISIBLE || state == NOMORE 45 | 46 | constructor(context: Context) : super(context){ 47 | initView() 48 | } 49 | 50 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs){ 51 | initView() 52 | } 53 | 54 | constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { 55 | initView() 56 | } 57 | fun initView(){ 58 | View.inflate(context, R.layout.layout_load_more, this) 59 | visibility = View.GONE 60 | } 61 | } 62 | -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/views/RankOrdersView.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.views 2 | 3 | import android.content.Context 4 | import android.support.v7.widget.GridLayoutManager 5 | import android.util.AttributeSet 6 | import android.view.View 7 | import android.widget.FrameLayout 8 | import com.a10miaomiao.bilimiao.R 9 | import com.a10miaomiao.bilimiao.adapter.RankOrdersAdapter 10 | import kotlinx.android.synthetic.main.layout_selectlist.view.* 11 | 12 | /** 13 | * Created by 10喵喵 on 2017/11/23. 14 | */ 15 | class RankOrdersView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) { 16 | init { 17 | View.inflate(context, R.layout.layout_selectlist, this) 18 | val mAdapter = RankOrdersAdapter(arrayOf("默认排序", "播放多", "新发布", "弹幕多")) 19 | recycle.apply { 20 | setHasFixedSize(true) 21 | layoutManager = GridLayoutManager(context, 4) 22 | adapter = mAdapter 23 | } 24 | } 25 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/views/UpperHeaderView.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.views 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.View 6 | import android.widget.FrameLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import com.a10miaomiao.bilimiao.activitys.PhotoActivity 9 | import com.bumptech.glide.Glide 10 | import com.bumptech.glide.load.engine.DiskCacheStrategy 11 | import kotlinx.android.synthetic.main.layout_upper_header.view.* 12 | 13 | /** 14 | * Created by 10喵喵 on 2017/11/12. 15 | */ 16 | class UpperHeaderView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : FrameLayout(context, attrs, defStyleAttr) { 17 | init { 18 | View.inflate(context, R.layout.layout_upper_header, this) 19 | iv_uper_avatar.setOnClickListener { 20 | PhotoActivity.launch(context, url, name) 21 | } 22 | } 23 | 24 | var url = "" 25 | set(value) { 26 | field = value 27 | Glide.with(context) 28 | .load(value) 29 | .centerCrop() 30 | .diskCacheStrategy(DiskCacheStrategy.ALL) 31 | .placeholder(R.drawable.ico_user_default) 32 | .dontAnimate() 33 | .into(iv_uper_avatar) 34 | } 35 | 36 | var name = "" 37 | set(value) { 38 | field = value 39 | tv_uper_name.text = value 40 | } 41 | 42 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/widget/DropDownMenu.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.widget 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.widget.TextView 6 | import com.a10miaomiao.bilimiao.R 7 | import com.a10miaomiao.bilimiao.views.RankOrdersPopupWindow 8 | 9 | /** 10 | * Created by 10喵喵 on 2017/11/23. 11 | */ 12 | class DropDownMenu@JvmOverloads constructor(context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0) : TextView(context, attrs, defStyleAttr) { 13 | var popMenu : RankOrdersPopupWindow? = null 14 | set(value) { 15 | field = value 16 | field?.setOnDismissListener { 17 | val drawable = resources.getDrawable(R.drawable.ic_arrow_drop_down_24dp) 18 | drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)//这一步必须要做,否则不会显示 19 | this.setCompoundDrawables(null,null,drawable,null) 20 | } 21 | } 22 | init { 23 | setOnClickListener { 24 | popMenu?.show() 25 | val drawable = resources.getDrawable(R.drawable.ic_arrow_drop_up_24dp) 26 | drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)//这一步必须要做,否则不会显示 27 | this.setCompoundDrawables(null,null,drawable,null) 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/widget/SelectView.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.widget 2 | 3 | import android.content.Context 4 | import android.util.AttributeSet 5 | import android.view.View 6 | import android.widget.FrameLayout 7 | import com.a10miaomiao.bilimiao.R 8 | import kotlinx.android.synthetic.main.layout_select_view.view.* 9 | 10 | /** 11 | * 左右选择控件 12 | * Created by 10喵喵 on 2017/10/22. 13 | */ 14 | class SelectView : FrameLayout { 15 | var titles : Array? = null 16 | set(value) { 17 | field = value 18 | tv_title.text = value!![0] 19 | } 20 | var index = 0 21 | set(value) { 22 | field = value 23 | tv_title.text = titles!![index] 24 | onChangeItem?.invoke(index) 25 | } 26 | var onChangeItem : ((index: Int) -> Unit)? = null 27 | 28 | constructor(context: Context) : super(context){ 29 | initView() 30 | } 31 | constructor(context: Context, attrs: AttributeSet) : super(context, attrs){ 32 | initView() 33 | } 34 | constructor(context: Context, attrs: AttributeSet, defStyleAttr: Int) : super(context, attrs, defStyleAttr) { 35 | initView() 36 | } 37 | private fun initView(){ 38 | View.inflate(context, R.layout.layout_select_view, this) 39 | iv_to_left.setOnClickListener { 40 | index = if(index == 0) titles!!.size - 1 else index - 1 41 | tv_title.text = titles!![index] 42 | onChangeItem?.invoke(index) 43 | } 44 | iv_to_right.setOnClickListener { 45 | index = if(index == titles!!.size - 1) 0 else index + 1 46 | tv_title.text = titles!![index] 47 | onChangeItem?.invoke(index) 48 | } 49 | } 50 | 51 | } -------------------------------------------------------------------------------- /app/src/main/java/com/a10miaomiao/bilimiao/widget/VideoPlayerView.kt: -------------------------------------------------------------------------------- 1 | package com.a10miaomiao.bilimiao.widget 2 | 3 | //import tv.danmaku.ijk.media.player.IjkMediaPlayer 4 | 5 | /** 6 | * Created by 10喵喵 on 2018/2/6. 7 | */ 8 | class VideoPlayerView{ 9 | 10 | } 11 | //class VideoPlayerView @JvmOverloads constructor( 12 | // context: Context, attrs: AttributeSet? = null, defStyleAttr: Int = 0 13 | // ) : SurfaceView(context, attrs, defStyleAttr) { 14 | // 15 | // var mMediaPlayer: IjkMediaPlayer? = null 16 | // 17 | // init { 18 | // initVideoView() 19 | // } 20 | // 21 | // private fun initVideoView(){ 22 | // isFocusable = true //能否获得焦点 23 | // isFocusableInTouchMode = true //通过触摸点获取焦点 24 | // keepScreenOn = true //保持屏幕长亮 25 | // 26 | // 27 | // holder.addCallback(mSHCallback); 28 | // } 29 | // 30 | // /** 31 | // * 创建一个新的player 32 | // */ 33 | // private fun createPlayer() { 34 | // if (mMediaPlayer != null) { 35 | // mMediaPlayer!!.stop() 36 | // mMediaPlayer!!.setDisplay(null) 37 | // mMediaPlayer!!.release() 38 | // } 39 | // var ijkMediaPlayer = IjkMediaPlayer() 40 | // //ijkMediaPlayer.native_setLogLevel(IjkMediaPlayer.IJK_LOG_DEBUG); //开启硬解码 41 | // ijkMediaPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec", 1); 42 | // 43 | // mMediaPlayer = ijkMediaPlayer 44 | // 45 | //// if (listener != null) { 46 | //// mMediaPlayer.setOnPreparedListener(listener) 47 | //// mMediaPlayer.setOnInfoListener(listener) 48 | //// mMediaPlayer.setOnSeekCompleteListener(listener) 49 | //// mMediaPlayer.setOnBufferingUpdateListener(listener) 50 | //// mMediaPlayer.setOnErrorListener(listener) 51 | //// } 52 | // } 53 | // 54 | // 55 | // var mSHCallback = object : SurfaceHolder.Callback{ 56 | // override fun surfaceChanged(holder: SurfaceHolder?, format: Int, width: Int, height: Int) { 57 | // createPlayer() 58 | //// mMediaPlayer!!.setDisplay(holder) 59 | //// mMediaPlayer!!.dataSource = "https://10miaomiao.cn/1.flv" 60 | //// mMediaPlayer!!.start() 61 | // } 62 | // 63 | // override fun surfaceDestroyed(holder: SurfaceHolder?) { 64 | // 65 | // } 66 | // 67 | // override fun surfaceCreated(holder: SurfaceHolder?) { 68 | // 69 | // } 70 | // } 71 | //} -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_out_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/activity_start_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/pophidden_operation_anim.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 31 | -------------------------------------------------------------------------------- /app/src/main/res/anim/pophidden_operation_anim_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popshow_operation_anim_down.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 31 | 32 | -------------------------------------------------------------------------------- /app/src/main/res/anim/popshow_operation_anim_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 7 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_default_image_tv.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_default_image_tv.9.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_player_back_button.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_player_back_button.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_player_danmaku_is_closed.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_player_danmaku_is_closed.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_player_danmaku_is_open.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_player_danmaku_is_open.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_player_play_can_pause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_player_play_can_pause.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/bili_player_play_can_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/bili_player_play_can_play.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/black_badge.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/gradient.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 8 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_add_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_back_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_down_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_arrow_drop_up_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_back_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_clip_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_clip_video.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t1.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t11.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t119.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t129.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t13.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t155.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t155.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t160.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t160.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t165.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t165.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t167.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t167.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t181.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t181.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t23.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t3.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t36.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t4.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_category_t5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_category_t5.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_check_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_close_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_download_white.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_fab_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_fab_play.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_more_download.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_home_more_download.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_more_prevent.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_home_more_prevent.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_home_more_rank.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_home_more_rank.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_danmakus.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_info_danmakus.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_info_views.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_info_views.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_keyboard_arrow_left_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_launcher.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_launcher.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_link_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_lock_open_white_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_more_vert_grey_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_movie_pay_area_limit.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_movie_pay_area_limit.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_navigate_next_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_play_circle_outline_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_play_circle_outline_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_player_locked_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_player_locked_2.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_player_media_quality_medium.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_player_media_quality_medium.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_ad.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_ad.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_dh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_dh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_dsj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_dsj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_dy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_dy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_fj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_fj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_fj_domestic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_fj_domestic.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_gc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_gc.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_kj.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_kj.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_sh.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_sh.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_ss.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_ss.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_wd.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_wd.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_yl.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_yl.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_ys.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_ys.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_yx.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_yx.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_region_yy.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_region_yy.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_bg_24dp.xml: -------------------------------------------------------------------------------- 1 | 6 | 9 | 12 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_search_white.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_subtitles_black_24dp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_subtitles_black_24dp.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tv_play.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_tv_play.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_tv_stop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ic_tv_stop.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/ic_unfold_more_black_24dp.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 10 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/ico_user_default.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/ico_user_default.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/icon_up.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/icon_up.png -------------------------------------------------------------------------------- /app/src/main/res/drawable/layer_progress.xml: -------------------------------------------------------------------------------- 1 | 2 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/selector_pick_item.xml: -------------------------------------------------------------------------------- 1 | 2 | 18 | 19 | 20 | 21 | 22 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_semicircle_left.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 11 | 12 | 13 | 14 | 19 | 20 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/shape_semicircle_right.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 8 | 11 | 12 | 13 | 14 | 15 | 20 | 21 | -------------------------------------------------------------------------------- /app/src/main/res/drawable/videoplayer_erect_icon_round.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/10miaomiao/bilimiao/dfd78b56b5c41eb49454836ee2bce5cefc667db7/app/src/main/res/drawable/videoplayer_erect_icon_round.png -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_danmaku.xml: -------------------------------------------------------------------------------- 1 | 2 | 6 | 7 | 8 | 13 | 18 | 23 | 28 | 29 | 33 | 37 | 38 | 44 | 45 | -------------------------------------------------------------------------------- /app/src/main/res/layout/activity_danmaku_details.xml: -------------------------------------------------------------------------------- 1 | 2 | 7 | 16 | 17 | 23 | 28 | 35 |