├── player
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── values
│ │ │ ├── strings.xml
│ │ │ └── attrs.xml
│ │ └── layout
│ │ │ └── ijk_demo_activity.xml
│ │ ├── jniLibs
│ │ └── armeabi-v7a
│ │ │ ├── libp2p.so
│ │ │ ├── libijksdl.so
│ │ │ ├── libplayer.so
│ │ │ ├── libxl_stat.so
│ │ │ ├── libijkffmpeg.so
│ │ │ └── libxl_thunder_sdk.so
│ │ └── java
│ │ ├── tv
│ │ └── danmaku
│ │ │ └── ijk
│ │ │ └── media
│ │ │ ├── player
│ │ │ ├── ffmpeg
│ │ │ │ └── FFmpegApi.java
│ │ │ ├── pragma
│ │ │ │ └── Pragma.java
│ │ │ ├── IjkLibLoader.java
│ │ │ ├── ISurfaceTextureHost.java
│ │ │ ├── exceptions
│ │ │ │ └── IjkMediaException.java
│ │ │ ├── MediaInfo.java
│ │ │ ├── ISurfaceTextureHolder.java
│ │ │ ├── misc
│ │ │ │ ├── IMediaFormat.java
│ │ │ │ ├── IMediaDataSource.java
│ │ │ │ ├── IAndroidIO.java
│ │ │ │ └── ITrackInfo.java
│ │ │ └── annotations
│ │ │ │ └── AccessedByNative.java
│ │ │ └── player_armv7a
│ │ │ └── Pragma.java
│ │ └── xyz
│ │ └── doikki
│ │ └── videoplayer
│ │ ├── render
│ │ ├── RenderViewFactory.java
│ │ ├── TextureRenderViewFactory.java
│ │ └── IRenderView.java
│ │ ├── player
│ │ ├── PlayerFactory.java
│ │ ├── ProgressManager.java
│ │ └── AndroidMediaPlayerFactory.java
│ │ ├── ijk
│ │ └── IjkPlayerFactory.java
│ │ ├── exo
│ │ └── ExoMediaPlayerFactory.java
│ │ ├── controller
│ │ ├── IGestureComponent.java
│ │ ├── IVideoController.java
│ │ ├── MediaPlayerControl.java
│ │ └── OrientationHelper.java
│ │ └── util
│ │ └── L.java
└── proguard-rules.pro
├── TabLayout
├── consumer-rules.pro
├── .gitignore
├── src
│ └── main
│ │ ├── AndroidManifest.xml
│ │ └── java
│ │ └── com
│ │ └── angcyo
│ │ └── tablayout
│ │ ├── ITabIndicatorDraw.kt
│ │ └── ViewPagerDelegate.kt
└── build.gradle
├── crash
├── .gitignore
├── src
│ └── main
│ │ ├── res
│ │ ├── drawable-hdpi
│ │ │ └── customactivityoncrash_error_image.png
│ │ ├── drawable-mdpi
│ │ │ └── customactivityoncrash_error_image.png
│ │ ├── drawable-xhdpi
│ │ │ └── customactivityoncrash_error_image.png
│ │ ├── drawable-xxhdpi
│ │ │ └── customactivityoncrash_error_image.png
│ │ ├── drawable-xxxhdpi
│ │ │ └── customactivityoncrash_error_image.png
│ │ └── values
│ │ │ ├── dimens.xml
│ │ │ └── strings.xml
│ │ └── AndroidManifest.xml
└── build.gradle
├── ViewPager1Delegate
├── consumer-rules.pro
├── .gitignore
├── src
│ └── main
│ │ └── AndroidManifest.xml
├── build.gradle
└── proguard-rules.pro
├── app
├── test.jks
├── libs
│ ├── thunder.jar
│ └── commons-lang3-3.12.0.jar
└── src
│ └── main
│ ├── assets
│ └── ua.db
│ ├── res
│ ├── drawable
│ │ ├── app_icon.png
│ │ ├── icon_pre.png
│ │ ├── app_banner.png
│ │ ├── icon_back.png
│ │ ├── icon_empty.png
│ │ ├── icon_play.png
│ │ ├── icon_video.png
│ │ ├── scrollview.png
│ │ ├── icon_loading.png
│ │ ├── scrollviewleft.png
│ │ ├── icon_img_placeholder.png
│ │ ├── bg_progress_bar_out.xml
│ │ ├── bg_transparent.xml
│ │ ├── shape_thumb_lang.xml
│ │ ├── shape_thumb_note.xml
│ │ ├── shape_thumb_year.xml
│ │ ├── anim_loading.xml
│ │ ├── shape_live_channel_num.xml
│ │ ├── bg_channel_list.xml
│ │ ├── shape_dialog_pg_search_checkbox.xml
│ │ ├── input_search.xml
│ │ ├── bg_bottom_dialog.xml
│ │ ├── bg_large_round_popup.xml
│ │ ├── bg_small_round_gray.xml
│ │ ├── shape_play_bottom.xml
│ │ ├── bg_large_round_gray.xml
│ │ ├── bg_ll_word_indicator.xml
│ │ ├── shape_thumb_bottom_name.xml
│ │ ├── bg_gradient_black_b2t.xml
│ │ ├── bg_gradient_black_r2l.xml
│ │ ├── box_controller_top_bg.xml
│ │ ├── item_right_bg.xml
│ │ ├── shape_dialog_filter_bg.xml
│ │ ├── shape_source_flag_line.xml
│ │ ├── bottom_navigation_item_selector.xml
│ │ ├── shape_play_mobile_center.xml
│ │ ├── dkplayer_shape_standard_controller_right_bg.xml
│ │ ├── seekbar_thumb_normal.xml
│ │ ├── seekbar_thumb_pressed.xml
│ │ ├── bg_r_common_stroke_primary.xml
│ │ ├── ic_add_24.xml
│ │ ├── button_select_normal.xml
│ │ ├── button_select_selected.xml
│ │ ├── button_red_mask.xml
│ │ ├── shape_progressbar_bg.xml
│ │ ├── ic_close_24.xml
│ │ ├── ic_file_24.xml
│ │ ├── shape_player_control_vod_seek_thumb_press.xml
│ │ ├── shape_player_control_vod_seek_thumb_normal.xml
│ │ ├── ic_push.xml
│ │ ├── button_checkbox.xml
│ │ ├── ic_unchecked_circle.xml
│ │ ├── ic_live.xml
│ │ ├── shape_live_focus.xml
│ │ ├── bg_r_25_stroke_primary.xml
│ │ ├── item_bg_selector_left.xml
│ │ ├── item_bg_selector_right.xml
│ │ ├── bg_top_container.xml
│ │ ├── ic_cast_18.xml
│ │ ├── ic_arrow_down.xml
│ │ ├── ic_search_18.xml
│ │ ├── ic_filter_list.xml
│ │ ├── ic_search_48.xml
│ │ ├── shape_setting_sort_focus.xml
│ │ ├── ic_history_18.xml
│ │ ├── img_loading_placeholder.xml
│ │ ├── preview_player_block.xml
│ │ ├── button_home_sort_focus.xml
│ │ ├── shape_user_focus.xml
│ │ ├── ic_clear.xml
│ │ ├── bg_bottom_container.xml
│ │ ├── bg_progressbar.xml
│ │ ├── icon_filter_color.xml
│ │ ├── ic_check_circle.xml
│ │ ├── indicator_flash.xml
│ │ ├── shape_source_focus.xml
│ │ ├── button_focused.xml
│ │ ├── ic_collect_48.xml
│ │ ├── shape_source_series_focus.xml
│ │ ├── button_detail_collect.xml
│ │ ├── button_detail_play.xml
│ │ ├── button_detail_sort.xml
│ │ ├── button_detail_quick_search.xml
│ │ ├── shape_player_control_vod_seek_thumb.xml
│ │ ├── shape_setting_model_focus.xml
│ │ ├── ic_about_48.xml
│ │ ├── shape_source_flag_focus.xml
│ │ ├── transparent.xml
│ │ ├── bg_r_common_solid_primary.xml
│ │ ├── play_progress_horizontal.xml
│ │ ├── ic_live_tv_48.xml
│ │ ├── button_primary_r25.xml
│ │ ├── shape_player_control_vod_seek.xml
│ │ ├── ic_history_48.xml
│ │ ├── ic_local_video_48.xml
│ │ ├── icon_error.xml
│ │ ├── seekbar_style.xml
│ │ ├── ic_unlock.xml
│ │ ├── shape_user_search.xml
│ │ ├── ic_use_description_24.xml
│ │ ├── ic_lock.xml
│ │ ├── shape_live_select.xml
│ │ ├── ic_change_20.xml
│ │ ├── ic_database_48.xml
│ │ ├── ic_settings.xml
│ │ ├── input_dialog_api_input.xml
│ │ ├── play_volume.xml
│ │ └── ic_copyright_48.xml
│ ├── drawable-xxhdpi
│ │ ├── delete.png
│ │ ├── ic_my.png
│ │ ├── ic_pip.png
│ │ ├── app_icon.png
│ │ ├── ic_about.png
│ │ ├── ic_cast.png
│ │ ├── ic_home.png
│ │ ├── ic_menu.png
│ │ ├── ic_pause.png
│ │ ├── ic_play.png
│ │ ├── ic_quit.png
│ │ ├── ic_expand.png
│ │ ├── ic_play_pre.png
│ │ ├── ic_pushpin.png
│ │ ├── iv_video.webp
│ │ ├── app_icon_bak.png
│ │ ├── ic_fullscreen.png
│ │ ├── ic_notify_pre.png
│ │ ├── ic_play_next.png
│ │ ├── ic_notify_close.png
│ │ ├── ic_notify_next.png
│ │ ├── ic_notify_pause.png
│ │ ├── ic_notify_play.png
│ │ ├── ic_player_setting.png
│ │ ├── ic_private_browsing.png
│ │ └── iv_movie_placeholder.png
│ ├── drawable-xhdpi
│ │ ├── app_icon.png
│ │ ├── vod_pause.png
│ │ ├── vod_play.png
│ │ └── app_icon_bak.png
│ ├── drawable-xxxhdpi
│ │ ├── app_icon.png
│ │ └── app_icon_bak.png
│ ├── xml
│ │ ├── network_security_config.xml
│ │ └── file_paths.xml
│ ├── anim
│ │ ├── slide_in_bottom.xml
│ │ └── slide_out_bottom.xml
│ ├── values-night
│ │ └── colors.xml
│ ├── raw
│ │ └── ui.css
│ ├── menu
│ │ └── main_bottom_navigation.xml
│ ├── layout
│ │ ├── activity_local_play.xml
│ │ ├── item_search_word_split.xml
│ │ ├── item_play_parse.xml
│ │ ├── dialog_search_uggestions.xml
│ │ ├── item_quick_search_lite.xml
│ │ ├── item_setting_menu.xml
│ │ ├── loadsir_loading_layout.xml
│ │ ├── item_keyboard.xml
│ │ ├── item_dialog_select.xml
│ │ ├── item_search_word_hot.xml
│ │ ├── item_live_channel_group.xml
│ │ ├── item_title.xml
│ │ ├── item_live_setting.xml
│ │ ├── item_live_setting_group.xml
│ │ ├── item_search_site.xml
│ │ ├── loadsir_empty_layout.xml
│ │ ├── item_home_sort.xml
│ │ ├── item_live_channel_group_new.xml
│ │ ├── item_series_group.xml
│ │ ├── item_grid_filter.xml
│ │ ├── item_dialog_checkbox_search.xml
│ │ ├── activity_main.xml
│ │ ├── dialog_all_series.xml
│ │ ├── activity_setting.xml
│ │ ├── item_live_channel.xml
│ │ ├── item_series_flag.xml
│ │ └── item_grid_filter_value.xml
│ ├── values-v29
│ │ └── styles.xml
│ └── values
│ │ └── strings.xml
│ └── java
│ └── com
│ └── github
│ ├── catvod
│ └── crawler
│ │ ├── SpiderNull.java
│ │ ├── SpiderDebug.java
│ │ └── JsLoader.java
│ └── tvbox
│ └── osc
│ ├── player
│ ├── TrackInfoBean.java
│ ├── render
│ │ └── SurfaceRenderViewFactory.java
│ └── MyVideoView.java
│ ├── event
│ ├── TopStateEvent.java
│ ├── HistoryStateEvent.java
│ └── ServerEvent.java
│ ├── subtitle
│ └── SubtitleLoadSuccessResult.java
│ ├── bean
│ ├── AbsXml.java
│ ├── AbsSortXml.java
│ ├── LiveDayListGroup.java
│ ├── IpScanningVo.java
│ ├── CastVideo.java
│ ├── VideoFolder.java
│ ├── LiveEpgDate.java
│ ├── LiveSettingItem.java
│ ├── Source.java
│ ├── LiveSettingGroup.java
│ ├── Subtitle.java
│ ├── SubtitleData.java
│ ├── IJKCode.java
│ └── Subscription.java
│ ├── server
│ ├── DataReceiver.java
│ └── RequestProcess.java
│ ├── util
│ ├── urlhttp
│ │ └── RealResponse.java
│ ├── LOG.java
│ ├── HistoryHelper.java
│ ├── ScreenUtils.java
│ ├── FastClickCheckUtil.java
│ ├── AdBlocker.java
│ └── js
│ │ └── UTF8BOMFighter.java
│ ├── ui
│ ├── tv
│ │ └── widget
│ │ │ ├── DefaultTransformer.java
│ │ │ ├── LoadMoreView.java
│ │ │ ├── MarqueeTextView.java
│ │ │ ├── NoScrollViewPager.java
│ │ │ └── FixedSpeedScroller.java
│ ├── adapter
│ │ ├── PinyinAdapter.java
│ │ ├── GridFilterKVAdapter.java
│ │ ├── TitleWithDelAdapter.java
│ │ ├── SearchWordAdapter.java
│ │ ├── SettingMenuAdapter.java
│ │ ├── SortAdapter.java
│ │ ├── SearchSubtitleAdapter.java
│ │ ├── SourceAdapter.java
│ │ ├── ParseAdapter.java
│ │ └── SeriesFlagAdapter.java
│ └── dialog
│ │ └── AboutDialog.java
│ ├── callback
│ ├── EmptyCallback.java
│ └── LoadingCallback.java
│ ├── cache
│ ├── Cache.java
│ ├── VodRecord.java
│ ├── VodCollect.java
│ ├── VodCollectDao.java
│ ├── CacheDao.java
│ └── VodRecordDao.java
│ ├── constant
│ ├── Constants.java
│ └── CacheConst.java
│ ├── data
│ └── AppDataBase.java
│ └── receiver
│ └── BatteryReceiver.kt
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── quickjs
├── src
│ └── main
│ │ ├── jniLibs
│ │ └── armeabi-v7a
│ │ │ └── libquickjs.so
│ │ ├── java
│ │ └── com
│ │ │ └── github
│ │ │ └── tvbox
│ │ │ └── quickjs
│ │ │ ├── JSCallFunction.java
│ │ │ ├── JSMethod.java
│ │ │ ├── JSFunction.java
│ │ │ ├── QuickJSException.java
│ │ │ └── JSArray.java
│ │ └── AndroidManifest.xml
├── proguard-rules.pro
└── build.gradle
├── settings.gradle
├── .idea
└── compiler.xml
├── .github
└── workflows
│ └── test.yml
├── gradle.properties
└── README.md
/player/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/TabLayout/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/crash/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/TabLayout/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/ViewPager1Delegate/consumer-rules.pro:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/ViewPager1Delegate/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/test.jks:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/test.jks
--------------------------------------------------------------------------------
/app/libs/thunder.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/libs/thunder.jar
--------------------------------------------------------------------------------
/app/src/main/assets/ua.db:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/assets/ua.db
--------------------------------------------------------------------------------
/player/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | ijkPlayer
3 |
--------------------------------------------------------------------------------
/app/libs/commons-lang3-3.12.0.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/libs/commons-lang3-3.12.0.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/app/src/main/res/drawable/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/app_icon.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_pre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_pre.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/app_banner.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/app_banner.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_back.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_back.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_empty.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_empty.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_play.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_video.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_video.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/scrollview.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/scrollview.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/delete.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/delete.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_my.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_my.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_pip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_pip.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_loading.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_loading.png
--------------------------------------------------------------------------------
/TabLayout/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xhdpi/app_icon.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/vod_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xhdpi/vod_pause.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/vod_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xhdpi/vod_play.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/app_icon.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_about.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_about.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_cast.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_cast.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_home.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_home.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_menu.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_menu.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_pause.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_play.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_quit.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_quit.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/scrollviewleft.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/scrollviewleft.png
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libp2p.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libp2p.so
--------------------------------------------------------------------------------
/app/src/main/java/com/github/catvod/crawler/SpiderNull.java:
--------------------------------------------------------------------------------
1 | package com.github.catvod.crawler;
2 |
3 | public class SpiderNull extends Spider {
4 | }
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xhdpi/app_icon_bak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xhdpi/app_icon_bak.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_expand.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_expand.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_play_pre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_play_pre.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_pushpin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_pushpin.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/iv_video.webp:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/iv_video.webp
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/app_icon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxxhdpi/app_icon.png
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libijksdl.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libijksdl.so
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libplayer.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libplayer.so
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/app_icon_bak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/app_icon_bak.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_fullscreen.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_fullscreen.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify_pre.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_notify_pre.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_play_next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_play_next.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxxhdpi/app_icon_bak.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxxhdpi/app_icon_bak.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_img_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable/icon_img_placeholder.png
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libxl_stat.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libxl_stat.so
--------------------------------------------------------------------------------
/quickjs/src/main/jniLibs/armeabi-v7a/libquickjs.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/quickjs/src/main/jniLibs/armeabi-v7a/libquickjs.so
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify_close.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_notify_close.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify_next.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_notify_next.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify_pause.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_notify_pause.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_notify_play.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_notify_play.png
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libijkffmpeg.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libijkffmpeg.so
--------------------------------------------------------------------------------
/ViewPager1Delegate/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
3 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_player_setting.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_player_setting.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/ic_private_browsing.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/ic_private_browsing.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable-xxhdpi/iv_movie_placeholder.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/app/src/main/res/drawable-xxhdpi/iv_movie_placeholder.png
--------------------------------------------------------------------------------
/player/src/main/jniLibs/armeabi-v7a/libxl_thunder_sdk.so:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/player/src/main/jniLibs/armeabi-v7a/libxl_thunder_sdk.so
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | rootProject.name = "TVBoxMobile"
2 | include ':app'
3 | include ':player'
4 | include ':quickjs'
5 | include ':TabLayout'
6 | include ':ViewPager1Delegate'
7 | include ':crash'
8 |
--------------------------------------------------------------------------------
/crash/src/main/res/drawable-hdpi/customactivityoncrash_error_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/crash/src/main/res/drawable-hdpi/customactivityoncrash_error_image.png
--------------------------------------------------------------------------------
/crash/src/main/res/drawable-mdpi/customactivityoncrash_error_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/crash/src/main/res/drawable-mdpi/customactivityoncrash_error_image.png
--------------------------------------------------------------------------------
/quickjs/src/main/java/com/github/tvbox/quickjs/JSCallFunction.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.quickjs;
2 |
3 | public interface JSCallFunction {
4 |
5 | Object call(Object... args);
6 |
7 | }
8 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/network_security_config.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/crash/src/main/res/drawable-xhdpi/customactivityoncrash_error_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/crash/src/main/res/drawable-xhdpi/customactivityoncrash_error_image.png
--------------------------------------------------------------------------------
/crash/src/main/res/drawable-xxhdpi/customactivityoncrash_error_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/crash/src/main/res/drawable-xxhdpi/customactivityoncrash_error_image.png
--------------------------------------------------------------------------------
/crash/src/main/res/drawable-xxxhdpi/customactivityoncrash_error_image.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/mlabalabala/TVBoxOS-Mobile/HEAD/crash/src/main/res/drawable-xxxhdpi/customactivityoncrash_error_image.png
--------------------------------------------------------------------------------
/quickjs/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/ffmpeg/FFmpegApi.java:
--------------------------------------------------------------------------------
1 | package tv.danmaku.ijk.media.player.ffmpeg;
2 |
3 | public class FFmpegApi {
4 | public static native String av_base64_encode(byte in[]);
5 | }
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_progress_bar_out.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_transparent.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_thumb_lang.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_thumb_note.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_thumb_year.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/player/TrackInfoBean.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.player;
2 |
3 | public class TrackInfoBean {
4 | public String name;
5 | public String language;
6 | public int index;
7 | public boolean selected;
8 | }
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/anim_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_live_channel_num.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_in_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_channel_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_dialog_pg_search_checkbox.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/slide_out_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | #Tue Sep 21 09:53:05 CST 2021
2 | distributionBase=GRADLE_USER_HOME
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-all.zip
4 | distributionPath=wrapper/dists
5 | zipStorePath=wrapper/dists
6 | zipStoreBase=GRADLE_USER_HOME
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/input_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_bottom_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_large_round_popup.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_small_round_gray.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_play_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_large_round_gray.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_ll_word_indicator.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
6 |
7 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/values-night/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | #202020
5 |
6 | #282828
7 | #F2808080
8 | #EBEBEB
9 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_thumb_bottom_name.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_gradient_black_b2t.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_gradient_black_r2l.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/box_controller_top_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_right_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_dialog_filter_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_source_flag_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bottom_navigation_item_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_play_mobile_center.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dkplayer_shape_standard_controller_right_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/seekbar_thumb_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/seekbar_thumb_pressed.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_r_common_stroke_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
11 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_add_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/event/TopStateEvent.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.event;
2 |
3 | /**
4 | * @author pj567
5 | * @date :2020/12/21
6 | * @description:
7 | */
8 | public class TopStateEvent {
9 | public final static int TYPE_TOP = 0;
10 | public int type;
11 |
12 | public TopStateEvent(int type) {
13 | this.type = type;
14 | }
15 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/subtitle/SubtitleLoadSuccessResult.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.subtitle;
2 |
3 | import com.github.tvbox.osc.subtitle.model.TimedTextObject;
4 |
5 | public class SubtitleLoadSuccessResult {
6 | public String fileName;
7 | public String content;
8 | public TimedTextObject timedTextObject;
9 | public String subtitlePath;
10 | }
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/event/HistoryStateEvent.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.event;
2 |
3 | /**
4 | * @author pj567
5 | * @date :2020/12/21
6 | * @description:
7 | */
8 | public class HistoryStateEvent {
9 | public final static int TYPE_TOP = 0;
10 | public int type;
11 |
12 | public HistoryStateEvent(int type) {
13 | this.type = type;
14 | }
15 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_select_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_select_selected.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/quickjs/src/main/java/com/github/tvbox/quickjs/JSMethod.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.quickjs;
2 |
3 | import java.lang.annotation.ElementType;
4 | import java.lang.annotation.Retention;
5 | import java.lang.annotation.RetentionPolicy;
6 | import java.lang.annotation.Target;
7 |
8 | @Retention(value = RetentionPolicy.RUNTIME)
9 | @Target(value = {ElementType.METHOD})
10 | public @interface JSMethod {
11 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_red_mask.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/AbsXml.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import com.thoughtworks.xstream.annotations.XStreamAlias;
4 |
5 | import java.io.Serializable;
6 |
7 | /**
8 | * @author pj567
9 | * @date :2020/12/18
10 | * @description:
11 | */
12 | @XStreamAlias("rss")
13 | public class AbsXml implements Serializable {
14 | @XStreamAlias("list")
15 | public Movie movie;
16 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/server/DataReceiver.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.server;
2 |
3 | /**
4 | * @author pj567
5 | * @date :2021/1/5
6 | * @description:
7 | */
8 | public interface DataReceiver {
9 |
10 | /**
11 | * @param text
12 | */
13 | void onTextReceived(String text);
14 |
15 |
16 | void onApiReceived(String url);
17 |
18 | void onPushReceived(String url);
19 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_progressbar_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/urlhttp/RealResponse.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util.urlhttp;
2 |
3 | import java.io.InputStream;
4 |
5 | /**
6 | * Created by fighting on 2017/4/24.
7 | */
8 |
9 | public class RealResponse {
10 | public InputStream inputStream;
11 | public InputStream errorStream;
12 | public int code;
13 | public long contentLength;
14 | public Exception exception;
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_close_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_file_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/crash/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | 16dp
5 | 16dp
6 |
7 | 12sp
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/tv/widget/DefaultTransformer.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.tv.widget;
2 |
3 | import android.view.View;
4 |
5 | import androidx.viewpager.widget.ViewPager;
6 |
7 | /**
8 | * @author acer
9 | * @date 2018/8/22 11:46
10 | */
11 | public class DefaultTransformer implements ViewPager.PageTransformer{
12 | @Override
13 | public void transformPage(View page, float position) {
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_control_vod_seek_thumb_press.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/callback/EmptyCallback.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.callback;
2 |
3 | import com.github.tvbox.osc.R;
4 | import com.kingja.loadsir.callback.Callback;
5 |
6 | /**
7 | * @author pj567
8 | * @date :2020/12/24
9 | * @description:
10 | */
11 | public class EmptyCallback extends Callback {
12 | @Override
13 | protected int onCreateView() {
14 | return R.layout.loadsir_empty_layout;
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_control_vod_seek_thumb_normal.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/callback/LoadingCallback.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.callback;
2 |
3 | import com.github.tvbox.osc.R;
4 | import com.kingja.loadsir.callback.Callback;
5 |
6 | /**
7 | * @author pj567
8 | * @date :2020/12/24
9 | * @description:
10 | */
11 | public class LoadingCallback extends Callback {
12 | @Override
13 | protected int onCreateView() {
14 | return R.layout.loadsir_loading_layout;
15 | }
16 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_push.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/LOG.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util;
2 |
3 | import android.util.Log;
4 |
5 | /**
6 | * @author pj567
7 | * @date :2020/12/18
8 | * @description:
9 | */
10 | public class LOG {
11 | private static String TAG = "TVBoxJade";
12 |
13 | public static void e(String msg) {
14 | Log.e(TAG, "" + msg);
15 | }
16 |
17 | public static void i(String msg) {
18 | Log.i(TAG, "" + msg);
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_checkbox.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_unchecked_circle.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_live.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/render/RenderViewFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.render;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * 此接口用于扩展自己的渲染View。使用方法如下:
7 | * 1.继承IRenderView实现自己的渲染View。
8 | * 2.重写createRenderView返回步骤1的渲染View。
9 | * 可参考{@link TextureRenderView}和{@link TextureRenderViewFactory}的实现。
10 | */
11 | public abstract class RenderViewFactory {
12 |
13 | public abstract IRenderView createRenderView(Context context);
14 |
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_live_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/raw/ui.css:
--------------------------------------------------------------------------------
1 | body,
2 | html {
3 | height: 100%;
4 | -webkit-tap-highlight-color: transparent;
5 | }
6 | body {
7 | font-family: system-ui, -apple-system, Helvetica Neue, sans-serif;
8 | }
9 | .page,
10 | body {
11 | background-color: var(--weui-BG-0);
12 | }
13 | .page {
14 | position: absolute;
15 | top: 0;
16 | right: 0;
17 | bottom: 0;
18 | left: 0;
19 | overflow-y: auto;
20 | -webkit-overflow-scrolling: touch;
21 | box-sizing: border-box;
22 | z-index: 1;
23 | }
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/player/PlayerFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.player;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * 此接口使用方法:
7 | * 1.继承{@link AbstractPlayer}扩展自己的播放器。
8 | * 2.继承此接口并实现{@link #createPlayer(Context)},返回步骤1中的播放器。
9 | * 可参照{@link AndroidMediaPlayer}和{@link AndroidMediaPlayerFactory}的实现。
10 | */
11 | public abstract class PlayerFactory
{
12 |
13 | public abstract P createPlayer(Context context);
14 | }
15 |
--------------------------------------------------------------------------------
/quickjs/src/main/java/com/github/tvbox/quickjs/JSFunction.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.quickjs;
2 |
3 | public class JSFunction extends JSObject {
4 |
5 | private final long objPointer;
6 |
7 | public JSFunction(QuickJSContext context, long objPointer, long pointer) {
8 | super(context, pointer);
9 | this.objPointer = objPointer;
10 | }
11 |
12 | public Object call(Object... args) {
13 | return getContext().call(this, objPointer, args);
14 | }
15 |
16 | }
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_r_25_stroke_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/render/TextureRenderViewFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.render;
2 |
3 | import android.content.Context;
4 |
5 | public class TextureRenderViewFactory extends RenderViewFactory {
6 |
7 | public static TextureRenderViewFactory create() {
8 | return new TextureRenderViewFactory();
9 | }
10 |
11 | @Override
12 | public IRenderView createRenderView(Context context) {
13 | return new TextureRenderView(context);
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_bg_selector_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/ijk/IjkPlayerFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.ijk;
2 |
3 | import android.content.Context;
4 |
5 | import xyz.doikki.videoplayer.player.PlayerFactory;
6 |
7 | public class IjkPlayerFactory extends PlayerFactory {
8 |
9 | public static IjkPlayerFactory create() {
10 | return new IjkPlayerFactory();
11 | }
12 |
13 | @Override
14 | public IjkPlayer createPlayer(Context context) {
15 | return new IjkPlayer(context);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/Cache.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.annotation.NonNull;
4 | import androidx.room.Entity;
5 | import androidx.room.PrimaryKey;
6 |
7 | import java.io.Serializable;
8 |
9 | /**
10 | * 类描述:
11 | *
12 | * @author pj567
13 | * @since 2020/5/15
14 | */
15 | @Entity(tableName = "cache")
16 | public class Cache implements Serializable {
17 | @PrimaryKey(autoGenerate = false)
18 | @NonNull
19 | public String key;
20 | public byte[] data;
21 | }
22 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/main_bottom_navigation.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/item_bg_selector_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
--------------------------------------------------------------------------------
/crash/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 |
3 | android {
4 | compileSdkVersion 30
5 | resourcePrefix 'customactivityoncrash_'
6 |
7 | defaultConfig {
8 | minSdkVersion 16
9 | targetSdkVersion 30
10 | }
11 | namespace 'cat.ereza.customactivityoncrash'
12 | }
13 |
14 | ext {
15 | PUBLISH_GROUP_ID = 'cat.ereza'
16 | PUBLISH_ARTIFACT_ID = 'customactivityoncrash'
17 | PUBLISH_VERSION = '2.4.0-SNAPSHOT'
18 | }
19 |
20 |
21 | dependencies {
22 | api 'androidx.appcompat:appcompat:1.3.1'
23 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_top_container.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_cast_18.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/exo/ExoMediaPlayerFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.exo;
2 |
3 | import android.content.Context;
4 |
5 | import xyz.doikki.videoplayer.player.PlayerFactory;
6 |
7 | public class ExoMediaPlayerFactory extends PlayerFactory {
8 |
9 | public static ExoMediaPlayerFactory create() {
10 | return new ExoMediaPlayerFactory();
11 | }
12 |
13 | @Override
14 | public ExoMediaPlayer createPlayer(Context context) {
15 | return new ExoMediaPlayer(context);
16 | }
17 | }
18 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_arrow_down.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_search_18.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/AbsSortXml.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import com.thoughtworks.xstream.annotations.XStreamAlias;
4 |
5 | import java.io.Serializable;
6 | import java.util.List;
7 |
8 | /**
9 | * @author pj567
10 | * @date :2020/12/18
11 | * @description:
12 | */
13 | @XStreamAlias("rss")
14 | public class AbsSortXml implements Serializable {
15 | @XStreamAlias("class")
16 | public MovieSort classes;
17 |
18 | @XStreamAlias("list")
19 | public Movie list;
20 |
21 | public List videoList;
22 | }
--------------------------------------------------------------------------------
/TabLayout/src/main/java/com/angcyo/tablayout/ITabIndicatorDraw.kt:
--------------------------------------------------------------------------------
1 | package com.angcyo.tablayout
2 |
3 | import android.graphics.Canvas
4 |
5 | /**
6 | * 用来实现[DslTabIndicator]的自绘
7 | * Email:angcyo@126.com
8 | * @author angcyo
9 | * @date 2022/02/21
10 | * Copyright (c) 2020 ShenZhen Wayto Ltd. All rights reserved.
11 | */
12 | interface ITabIndicatorDraw {
13 |
14 | /**绘制指示器
15 | * [positionOffset] 页面偏移量*/
16 | fun onDrawTabIndicator(
17 | tabIndicator: DslTabIndicator,
18 | canvas: Canvas,
19 | positionOffset: Float
20 | )
21 |
22 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_filter_list.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_search_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_setting_sort_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/player/ProgressManager.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.player;
2 |
3 | /**
4 | * 播放进度管理器,继承此接口实现自己的进度管理器。
5 | */
6 | public abstract class ProgressManager {
7 |
8 | /**
9 | * 此方法用于实现保存进度的逻辑
10 | * @param url 播放地址
11 | * @param progress 播放进度
12 | */
13 | public abstract void saveProgress(String url, long progress);
14 |
15 | /**
16 | * 此方法用于实现获取保存的进度的逻辑
17 | * @param url 播放地址
18 | * @return 保存的播放进度
19 | */
20 | public abstract long getSavedProgress(String url);
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_history_18.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/img_loading_placeholder.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/preview_player_block.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_home_sort_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_user_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 |
--------------------------------------------------------------------------------
/quickjs/src/main/java/com/github/tvbox/quickjs/QuickJSException.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.quickjs;
2 |
3 | /**
4 | * Created by Harlon Wang on 2022/2/8.
5 | */
6 | public class QuickJSException extends RuntimeException {
7 |
8 | private final boolean jsError;
9 |
10 | public QuickJSException(String message) {
11 | this(message, false);
12 | }
13 |
14 | public QuickJSException(String message, boolean jsError) {
15 | super(message);
16 | this.jsError = jsError;
17 | }
18 |
19 | public boolean isJSError() {
20 | return jsError;
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/catvod/crawler/SpiderDebug.java:
--------------------------------------------------------------------------------
1 | package com.github.catvod.crawler;
2 |
3 | public class SpiderDebug {
4 | public static void log(Throwable th) {
5 | try {
6 | android.util.Log.d("SpiderLog", th.getMessage(), th);
7 | } catch (Throwable th1) {
8 |
9 | }
10 | }
11 |
12 | public static void log(String msg) {
13 | try {
14 | android.util.Log.d("SpiderLog", msg);
15 | } catch (Throwable th1) {
16 |
17 | }
18 | }
19 |
20 | public static String ec(int i) {
21 | return "";
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/LiveDayListGroup.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | public class LiveDayListGroup {
4 | private int groupIndex;
5 | private String groupName;
6 |
7 |
8 | public int getGroupIndex() {
9 | return groupIndex;
10 | }
11 |
12 | public void setGroupIndex(int groupIndex) {
13 | this.groupIndex = groupIndex;
14 | }
15 |
16 | public String getGroupName() {
17 | return groupName;
18 | }
19 |
20 | public void setGroupName(String groupName) {
21 | this.groupName = groupName;
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_clear.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/TabLayout/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'kotlin-android'
3 |
4 | android {
5 | compileSdkVersion 30
6 |
7 | defaultConfig {
8 | minSdkVersion 24
9 | targetSdkVersion 30
10 |
11 | consumerProguardFiles 'consumer-rules.pro'
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 | }
21 |
22 | dependencies {
23 | implementation 'androidx.core:core-ktx:1.3.1'
24 | }
25 |
26 |
--------------------------------------------------------------------------------
/TabLayout/src/main/java/com/angcyo/tablayout/ViewPagerDelegate.kt:
--------------------------------------------------------------------------------
1 | package com.angcyo.tablayout
2 |
3 | /**
4 | * 不依赖ViewPager和ViewPager2
5 | * Email:angcyo@126.com
6 | * @author angcyo
7 | * @date 2019/12/14
8 | */
9 | interface ViewPagerDelegate {
10 | companion object {
11 | const val SCROLL_STATE_IDLE = 0
12 | const val SCROLL_STATE_DRAGGING = 1
13 | const val SCROLL_STATE_SETTLING = 2
14 | }
15 |
16 | /**获取当前页面索引*/
17 | fun onGetCurrentItem(): Int
18 |
19 | /**设置当前的页面*/
20 | fun onSetCurrentItem(fromIndex: Int, toIndex: Int, reselect: Boolean, fromUser: Boolean)
21 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_bottom_container.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_progressbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_local_play.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
13 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/constant/Constants.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.constant;
2 |
3 | /**
4 | * @Author : Liu XiaoRan
5 | * @Email : 592923276@qq.com
6 | * @Date : on 2023/8/16 09:53.
7 | * @Description :
8 | */
9 | public class Constants {
10 |
11 | /**
12 | * 画中画/后台服务
13 | */
14 | public static final String BROADCAST_ACTION = "VOD_CONTROL";
15 | public static final int BROADCAST_ACTION_PREV = 0;
16 | public static final int BROADCAST_ACTION_PLAYPAUSE = 1;
17 | public static final int BROADCAST_ACTION_NEXT = 2;
18 | public static final int BROADCAST_ACTION_CLOSE = 3;
19 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/player/render/SurfaceRenderViewFactory.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.player.render;
2 |
3 | import android.content.Context;
4 |
5 | import xyz.doikki.videoplayer.render.IRenderView;
6 | import xyz.doikki.videoplayer.render.RenderViewFactory;
7 |
8 | public class SurfaceRenderViewFactory extends RenderViewFactory {
9 |
10 | public static SurfaceRenderViewFactory create() {
11 | return new SurfaceRenderViewFactory();
12 | }
13 |
14 | @Override
15 | public IRenderView createRenderView(Context context) {
16 | return new SurfaceRenderView(context);
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/event/ServerEvent.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.event;
2 |
3 | /**
4 | * @author pj567
5 | * @date :2021/1/5
6 | * @description:
7 | */
8 | public class ServerEvent {
9 | public static final int SERVER_SUCCESS = 0;
10 | public static final int SERVER_CONNECTION = 1;
11 | public static final int SERVER_SEARCH = 2;
12 | public int type;
13 | public Object obj;
14 |
15 | public ServerEvent(int type) {
16 | this.type = type;
17 | }
18 |
19 | public ServerEvent(int type, Object obj) {
20 | this.type = type;
21 | this.obj = obj;
22 | }
23 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_filter_color.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/player/AndroidMediaPlayerFactory.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.player;
2 |
3 | import android.content.Context;
4 |
5 | /**
6 | * 创建{@link AndroidMediaPlayer}的工厂类,不推荐,系统的MediaPlayer兼容性较差,建议使用IjkPlayer或者ExoPlayer
7 | */
8 | public class AndroidMediaPlayerFactory extends PlayerFactory {
9 |
10 | public static AndroidMediaPlayerFactory create() {
11 | return new AndroidMediaPlayerFactory();
12 | }
13 |
14 | @Override
15 | public AndroidMediaPlayer createPlayer(Context context) {
16 | return new AndroidMediaPlayer(context);
17 | }
18 | }
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/PinyinAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 |
7 | import java.util.ArrayList;
8 |
9 | public class PinyinAdapter extends BaseQuickAdapter {
10 | public PinyinAdapter() {
11 | super(R.layout.item_search_word_hot, new ArrayList<>());
12 | }
13 |
14 | @Override
15 | protected void convert(BaseViewHolder helper, String item) {
16 | helper.setText(R.id.tvSearchWord, item);
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/HistoryHelper.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util;
2 |
3 | public class HistoryHelper {
4 | private static Integer[] hisNumArray = {30,50,70};
5 |
6 | public static final String getHistoryNumName(int index){
7 | Integer value = getHisNum(index);
8 | return value + "条";
9 | }
10 |
11 | public static final int getHisNum(int index){
12 | Integer value = null;
13 | if(index>=0 && index < hisNumArray.length){
14 | value = hisNumArray[index];
15 | }else{
16 | value = hisNumArray[0];
17 | }
18 | return value;
19 | }
20 | }
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_search_word_split.xml:
--------------------------------------------------------------------------------
1 |
2 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_circle.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_play_parse.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
17 |
--------------------------------------------------------------------------------
/crash/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
8 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/GridFilterKVAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 |
7 | import java.util.ArrayList;
8 |
9 | public class GridFilterKVAdapter extends BaseQuickAdapter {
10 | public GridFilterKVAdapter() {
11 | super(R.layout.item_grid_filter_value, new ArrayList<>());
12 | }
13 |
14 | @Override
15 | protected void convert(BaseViewHolder helper, String item) {
16 | helper.setText(R.id.filterValue, item);
17 | }
18 | }
--------------------------------------------------------------------------------
/quickjs/src/main/java/com/github/tvbox/quickjs/JSArray.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.quickjs;
2 |
3 | public class JSArray extends JSObject {
4 |
5 | public JSArray(QuickJSContext context, long pointer) {
6 | super(context, pointer);
7 | }
8 |
9 | public int length() {
10 | checkReleased();
11 | return getContext().length(this);
12 | }
13 |
14 | public Object get(int index) {
15 | checkReleased();
16 | return getContext().get(this, index);
17 | }
18 |
19 | public void set(Object value, int index) {
20 | checkReleased();
21 | getContext().set(this, value, index);
22 | }
23 |
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/indicator_flash.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_source_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/IpScanningVo.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | public class IpScanningVo {
4 |
5 | private String hostName;
6 | private String ip;
7 |
8 | public IpScanningVo(String hostName, String ip) {
9 | this.hostName = hostName;
10 | this.ip = ip;
11 | }
12 |
13 | public String getHostName() {
14 | return hostName;
15 | }
16 |
17 | public void setHostName(String hostName) {
18 | this.hostName = hostName;
19 | }
20 |
21 | public String getIp() {
22 | return ip;
23 | }
24 |
25 | public void setIp(String ip) {
26 | this.ip = ip;
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_focused.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 |
8 |
9 |
10 |
11 | -
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_collect_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_source_series_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/values-v29/styles.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_detail_collect.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_detail_play.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_detail_sort.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_detail_quick_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_control_vod_seek_thumb.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/file_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
13 |
14 |
17 |
18 |
21 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/ScreenUtils.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util;
2 |
3 | import android.app.Activity;
4 | import android.util.DisplayMetrics;
5 | import android.view.WindowManager;
6 |
7 | public class ScreenUtils {
8 |
9 | public static double getSqrt(Activity activity) {
10 | WindowManager wm = activity.getWindowManager();
11 | DisplayMetrics dm = new DisplayMetrics();
12 | wm.getDefaultDisplay().getMetrics(dm);
13 | double x = Math.pow(dm.widthPixels / dm.xdpi, 2);
14 | double y = Math.pow(dm.heightPixels / dm.ydpi, 2);
15 | double screenInches = Math.sqrt(x + y);// 屏幕尺寸
16 | return screenInches;
17 | }
18 |
19 | }
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_setting_model_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_about_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_source_flag_focus.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 | -
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/TitleWithDelAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 |
7 | import java.util.ArrayList;
8 |
9 | public class TitleWithDelAdapter extends BaseQuickAdapter {
10 | public TitleWithDelAdapter() {
11 | super(R.layout.item_stroke_button, new ArrayList<>());
12 | }
13 |
14 | @Override
15 | protected void convert(BaseViewHolder helper, String item) {
16 | helper.setText(R.id.tvName, item);
17 | helper.addOnClickListener(R.id.tvName,R.id.tvDel);
18 | }
19 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_search_uggestions.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_quick_search_lite.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/transparent.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
12 |
16 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bg_r_common_solid_primary.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | -
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_setting_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SearchWordAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 |
7 | import java.util.ArrayList;
8 |
9 | /**
10 | * @author pj567
11 | * @date :2020/12/23
12 | * @description:
13 | */
14 | public class SearchWordAdapter extends BaseQuickAdapter {
15 | public SearchWordAdapter() {
16 | super(R.layout.item_search_word_hot, new ArrayList<>());
17 | }
18 |
19 | @Override
20 | protected void convert(BaseViewHolder helper, String item) {
21 | helper.setText(R.id.tvSearchWord, item);
22 | }
23 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/loadsir_loading_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
8 |
18 |
--------------------------------------------------------------------------------
/player/src/main/res/layout/ijk_demo_activity.xml:
--------------------------------------------------------------------------------
1 |
2 |
7 |
8 |
12 |
13 |
18 |
19 |
--------------------------------------------------------------------------------
/player/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/tv/widget/LoadMoreView.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.tv.widget;
2 |
3 |
4 | import com.github.tvbox.osc.R;
5 |
6 | public final class LoadMoreView extends com.chad.library.adapter.base.loadmore.LoadMoreView {
7 |
8 | @Override
9 | public int getLayoutId() {
10 | return R.layout.item_view_load_more;
11 | }
12 |
13 | @Override
14 | protected int getLoadingViewId() {
15 | return R.id.load_more_loading_view;
16 | }
17 |
18 | @Override
19 | protected int getLoadFailViewId() {
20 | return R.id.load_more_load_fail_view;
21 | }
22 |
23 | @Override
24 | protected int getLoadEndViewId() {
25 | return R.id.load_more_load_end_view;
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_keyboard.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/constant/CacheConst.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.constant;
2 |
3 | /**
4 | * @Author : Liu XiaoRan
5 | * @Email : 592923276@qq.com
6 | * @Date : on 2023/8/16 09:53.
7 | * @Description :
8 | */
9 | public class CacheConst {
10 |
11 | /**
12 | * 存储视频总时长的SP库,key为对应视频的path
13 | */
14 | public static final String VIDEO_DURATION_SP = "video_duration_sp";
15 | /**
16 | * 存储视频播放进度的SP库,key为对应视频的path
17 | */
18 | public static final String VIDEO_PROGRESS_SP = "video_progress_sp";
19 | /**
20 | * 长按的倍速播放设置
21 | */
22 | public static final String VIDEO_SPEED = "video_speed";
23 | /**
24 | * 搜索记录
25 | */
26 | public static final String HISTORY_SEARCH = "history_search";
27 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/play_progress_horizontal.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_live_tv_48.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_dialog_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | Jade
4 |
5 | 基于TVBox开发,代码开源,不收集或上传任何数据。
6 | \n软件只提供展示功能,不参与任何订阅或源的制作和发布。
7 | \n开发者不对任何订阅内容负责。
8 | \n仅供学习参考,请于安装后24小时内删除。
9 |
10 |
11 |
12 | 本软件仅用于学习和参考,不建议使用任何订阅,如尝试使用,请简单了解TVBox。
13 | \n订阅(主要):名称仅用于记忆/区分,地址分为网络和本地。
14 | \n多线路:可解析出多条订阅。
15 | \n多仓库:可解析出多个多线路,按需导入。
16 | \n为降低操作门槛,目前不论多线路/多仓,都会展现成单条订阅格式。
17 |
18 |
19 |
20 | 本应用只提供展示功能,不参与任何订阅、源的制作和发布,开发者不对任何订阅内容负责。
21 | \n请不要相信任何订阅中以任何形势出现的任何广告。。
22 | \n本应用不采集任何用户信息,如果您发现任何违规订阅,请立即删除。
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SettingMenuAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 |
7 | import java.util.ArrayList;
8 |
9 | /**
10 | * @author pj567
11 | * @date :2020/12/23
12 | * @description:
13 | */
14 | public class SettingMenuAdapter extends BaseQuickAdapter {
15 | public SettingMenuAdapter() {
16 | super(R.layout.item_setting_menu, new ArrayList<>());
17 | }
18 |
19 | @Override
20 | protected void convert(BaseViewHolder helper, String item) {
21 | helper.setText(R.id.tvName, item);
22 | helper.addOnClickListener(R.id.tvName);
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SortAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 | import com.github.tvbox.osc.bean.MovieSort;
7 |
8 | import java.util.ArrayList;
9 |
10 | /**
11 | * @author pj567
12 | * @date :2020/12/21
13 | * @description:
14 | */
15 | public class SortAdapter extends BaseQuickAdapter {
16 | public SortAdapter() {
17 | super(R.layout.item_home_sort, new ArrayList<>());
18 | }
19 |
20 | @Override
21 | protected void convert(BaseViewHolder helper, MovieSort.SortData item) {
22 | helper.setText(R.id.tvTitle, item.name);
23 | }
24 | }
--------------------------------------------------------------------------------
/ViewPager1Delegate/build.gradle:
--------------------------------------------------------------------------------
1 | apply plugin: 'com.android.library'
2 | apply plugin: 'kotlin-android'
3 |
4 | android {
5 | compileSdkVersion 30
6 |
7 | defaultConfig {
8 | minSdkVersion 24
9 | targetSdkVersion 30
10 |
11 | consumerProguardFiles 'consumer-rules.pro'
12 | }
13 |
14 | buildTypes {
15 | release {
16 | minifyEnabled false
17 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
18 | }
19 | }
20 |
21 | }
22 |
23 | dependencies {
24 | //https://github.com/angcyo/DslTabLayout
25 | implementation project(':TabLayout')
26 | //https://mvnrepository.com/artifact/androidx.viewpager/viewpager
27 | implementation 'androidx.viewpager:viewpager:1.0.0'
28 | }
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/button_primary_r25.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 | -
12 |
13 |
14 |
15 |
17 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/CastVideo.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import androidx.annotation.NonNull;
4 |
5 | import com.android.cast.dlna.core.ICast;
6 |
7 | import java.util.UUID;
8 |
9 | public class CastVideo implements ICast {
10 |
11 | private final String name;
12 | private final String url;
13 |
14 | public CastVideo(String name, String url) {
15 | this.name = name;
16 | this.url = url;
17 | }
18 |
19 | @NonNull
20 | @Override
21 | public String getId() {
22 | return UUID.randomUUID().toString();
23 | }
24 |
25 | @NonNull
26 | @Override
27 | public String getUri() {
28 | return url;
29 | }
30 |
31 | @NonNull
32 | @Override
33 | public String getName() {
34 | return name;
35 | }
36 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_search_word_hot.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SearchSubtitleAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 | import com.github.tvbox.osc.bean.Subtitle;
7 |
8 | import java.util.ArrayList;
9 |
10 | public class SearchSubtitleAdapter extends BaseQuickAdapter {
11 |
12 | public SearchSubtitleAdapter() {
13 | super(R.layout.item_search_subtitle_result, new ArrayList<>());
14 | }
15 |
16 | @Override
17 | protected void convert(BaseViewHolder helper, Subtitle item) {
18 | helper.setText(R.id.subtitleName, item.getName());
19 | helper.setText(R.id.subtitleNameInfo, item.getIsZip() ? "压缩包" : "文件");
20 | }
21 | }
22 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/controller/IGestureComponent.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.controller;
2 |
3 | public interface IGestureComponent extends IControlComponent {
4 | /**
5 | * 开始滑动
6 | */
7 | void onStartSlide();
8 |
9 | /**
10 | * 结束滑动
11 | */
12 | void onStopSlide();
13 |
14 | /**
15 | * 滑动调整进度
16 | * @param slidePosition 滑动进度
17 | * @param currentPosition 当前播放进度
18 | * @param duration 视频总长度
19 | */
20 | void onPositionChange(int slidePosition, int currentPosition, int duration);
21 |
22 | /**
23 | * 滑动调整亮度
24 | * @param percent 亮度百分比
25 | */
26 | void onBrightnessChange(int percent);
27 |
28 | /**
29 | * 滑动调整音量
30 | * @param percent 音量百分比
31 | */
32 | void onVolumeChange(int percent);
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_player_control_vod_seek.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 | -
9 |
10 |
11 |
12 |
13 |
14 |
15 | -
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/player/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/ViewPager1Delegate/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/catvod/crawler/JsLoader.java:
--------------------------------------------------------------------------------
1 | package com.github.catvod.crawler;
2 |
3 | import com.github.tvbox.osc.base.App;
4 | import com.github.tvbox.osc.util.js.SpiderJS;
5 |
6 | import java.util.concurrent.ConcurrentHashMap;
7 |
8 | public class JsLoader {
9 | private ConcurrentHashMap spiders = new ConcurrentHashMap<>();
10 |
11 | public Spider getSpider(String key, String cls, String ext, String jar) {
12 | if (spiders.containsKey(key))
13 | return spiders.get(key);
14 | try {
15 | SpiderJS sp = new SpiderJS(key, cls, ext);
16 | sp.init(App.getInstance(), ext);
17 | spiders.put(key, sp);
18 | return sp;
19 | } catch (Throwable th) {
20 | th.printStackTrace();
21 | }
22 | return new SpiderNull();
23 | }
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_live_channel_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
21 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player_armv7a/Pragma.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player_armv7a;
19 |
20 | public class Pragma {
21 |
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/VodRecord.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.room.ColumnInfo;
4 | import androidx.room.Entity;
5 | import androidx.room.PrimaryKey;
6 |
7 | import java.io.Serializable;
8 |
9 | /**
10 | * @author pj567
11 | * @date :2021/1/7
12 | * @description:
13 | */
14 | @Entity(tableName = "vodRecord")
15 | public class VodRecord implements Serializable {
16 | @PrimaryKey(autoGenerate = true)
17 | private int id;
18 | @ColumnInfo(name = "vodId")
19 | public String vodId;
20 | @ColumnInfo(name = "updateTime")
21 | public long updateTime;
22 | @ColumnInfo(name = "sourceKey")
23 | public String sourceKey;
24 | public String dataJson;
25 |
26 | public int getId() {
27 | return id;
28 | }
29 |
30 | public void setId(int id) {
31 | this.id = id;
32 | }
33 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/VideoFolder.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import java.util.List;
4 |
5 | /**
6 | * @Author : Liu XiaoRan
7 | * @Email : 592923276@qq.com
8 | * @Date : on 2023/8/15 10:58.
9 | * @Description :
10 | */
11 | public class VideoFolder {
12 | public VideoFolder(String name, List videoList) {
13 | this.name = name;
14 | this.videoList = videoList;
15 | }
16 |
17 | String name;
18 | List videoList;
19 |
20 | public String getName() {
21 | return name;
22 | }
23 |
24 | public void setName(String name) {
25 | this.name = name;
26 | }
27 |
28 | public List getVideoList() {
29 | return videoList;
30 | }
31 |
32 | public void setVideoList(List videoList) {
33 | this.videoList = videoList;
34 | }
35 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/VodCollect.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.room.ColumnInfo;
4 | import androidx.room.Entity;
5 | import androidx.room.PrimaryKey;
6 |
7 | import java.io.Serializable;
8 |
9 | @Entity(tableName = "vodCollect")
10 | public class VodCollect implements Serializable {
11 | @PrimaryKey(autoGenerate = true)
12 | private int id;
13 | @ColumnInfo(name = "vodId")
14 | public String vodId;
15 | @ColumnInfo(name = "updateTime")
16 | public long updateTime;
17 | @ColumnInfo(name = "sourceKey")
18 | public String sourceKey;
19 | @ColumnInfo(name = "name")
20 | public String name;
21 | @ColumnInfo(name = "pic")
22 | public String pic;
23 |
24 | public int getId() {
25 | return id;
26 | }
27 |
28 | public void setId(int id) {
29 | this.id = id;
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/LiveEpgDate.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 | import java.util.ArrayList;
3 | import java.util.Date;
4 |
5 | public class LiveEpgDate {
6 |
7 | private int index;
8 | private String datePresented;
9 | private Date dateParamVal;
10 |
11 | public int getIndex() {
12 | return index;
13 | }
14 |
15 | public void setIndex(int index) {
16 | this.index = index;
17 | }
18 |
19 | public String getDatePresented() {
20 | return datePresented;
21 | }
22 |
23 | public void setDatePresented(String datePresented) {
24 | this.datePresented = datePresented;
25 | }
26 |
27 | public Date getDateParamVal() {
28 | return dateParamVal;
29 | }
30 |
31 | public void setDateParamVal(Date dateParamVal) {
32 | this.dateParamVal = dateParamVal;
33 | }
34 | }
35 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/data/AppDataBase.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.data;
2 |
3 | import androidx.room.Database;
4 | import androidx.room.RoomDatabase;
5 |
6 | import com.github.tvbox.osc.cache.Cache;
7 | import com.github.tvbox.osc.cache.CacheDao;
8 | import com.github.tvbox.osc.cache.VodCollect;
9 | import com.github.tvbox.osc.cache.VodCollectDao;
10 | import com.github.tvbox.osc.cache.VodRecord;
11 | import com.github.tvbox.osc.cache.VodRecordDao;
12 |
13 |
14 | /**
15 | * 类描述:
16 | *
17 | * @author pj567
18 | * @since 2020/5/15
19 | */
20 | @Database(entities = {Cache.class, VodRecord.class, VodCollect.class}, version = 1)
21 | public abstract class AppDataBase extends RoomDatabase {
22 | public abstract CacheDao getCacheDao();
23 |
24 | public abstract VodRecordDao getVodRecordDao();
25 |
26 | public abstract VodCollectDao getVodCollectDao();
27 | }
28 |
--------------------------------------------------------------------------------
/quickjs/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
22 |
23 | -keep class com.github.tvbox.quickjs.** {*;}
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_title.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
22 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: Test Build
2 |
3 | on:
4 | # push:
5 | # branches:
6 | # - main
7 | # pull_request:
8 | workflow_dispatch:
9 |
10 | jobs:
11 | build:
12 | runs-on: ubuntu-latest
13 | steps:
14 | - uses: actions/checkout@v3
15 | with:
16 | fetch-depth: 0
17 | - name: Build With Gradle
18 | run: |
19 | chmod +x gradlew
20 | ./gradlew assemblerelease --build-cache --parallel --daemon --warning-mode all
21 | - name: Prepare App
22 | run: |
23 | mkdir -p ${{ github.workspace }}/apk/
24 | for file in `find ~ -name "*.apk" -print`; do
25 | mv "$file" ${{ github.workspace }}/apk/
26 | done
27 | - name: Upload App To Artifact
28 | uses: actions/upload-artifact@v3
29 | with:
30 | name: com.github.tvbox.osc
31 | path: ${{ github.workspace }}/apk/*
32 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/LiveSettingItem.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | /**
4 | * @author pj567
5 | * @date :2021/1/12
6 | * @description:
7 | */
8 | public class LiveSettingItem {
9 | private int itemIndex;
10 | private String itemName;
11 | private boolean itemSelected = false;
12 |
13 | public int getItemIndex() {
14 | return itemIndex;
15 | }
16 |
17 | public void setItemIndex(int itemIndex) {
18 | this.itemIndex = itemIndex;
19 | }
20 |
21 | public String getItemName() {
22 | return itemName;
23 | }
24 |
25 | public void setItemName(String itemName) {
26 | this.itemName = itemName;
27 | }
28 |
29 | public boolean isItemSelected() {
30 | return itemSelected;
31 | }
32 |
33 | public void setItemSelected(boolean itemSelected) {
34 | this.itemSelected = itemSelected;
35 | }
36 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_live_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
23 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SourceAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import com.chad.library.adapter.base.BaseQuickAdapter;
4 | import com.chad.library.adapter.base.BaseViewHolder;
5 | import com.github.tvbox.osc.R;
6 | import com.github.tvbox.osc.bean.Source;
7 | import com.github.tvbox.osc.bean.VodInfo;
8 | import com.lihang.ShadowLayout;
9 |
10 | import java.util.ArrayList;
11 |
12 | /**
13 | * @author pj567
14 | * @date :2020/12/22
15 | * @description:
16 | */
17 | public class SourceAdapter extends BaseQuickAdapter {
18 | public SourceAdapter() {
19 | super(R.layout.item_source, new ArrayList<>());
20 | }
21 |
22 | @Override
23 | protected void convert(BaseViewHolder helper, Source item) {
24 | helper.setText(R.id.tv_name, item.getSourceName())
25 | .setText(R.id.tv_url, item.getSourceUrl());
26 | }
27 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/FastClickCheckUtil.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util;
2 |
3 | import android.os.Handler;
4 | import android.view.View;
5 |
6 | /**
7 | * @author pj567
8 | * @date :2020/12/22
9 | * @description:
10 | */
11 | public class FastClickCheckUtil {
12 | /**
13 | * 相同视图点击必须间隔0.5s才能有效
14 | *
15 | * @param view 目标视图
16 | */
17 | public static void check(View view) {
18 | check(view, 500);
19 | }
20 |
21 | /**
22 | * 设置间隔点击规则,配置间隔点击时长
23 | *
24 | * @param view 目标视图
25 | * @param mills 点击间隔时间(毫秒)
26 | */
27 | public static void check(final View view, int mills) {
28 | view.setClickable(false);
29 | new Handler().postDelayed(new Runnable() {
30 | @Override
31 | public void run() {
32 | view.setClickable(true);
33 | }
34 | }, mills);
35 | }
36 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_history_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_live_setting_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
22 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/Source.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | /**
4 | * @Author : Liu XiaoRan
5 | * @Email : 592923276@qq.com
6 | * @Date : on 2023/9/7 16:29.
7 | * @Description : 仓库(多仓的单个实例),每个仓库的url都是多线路
8 | */
9 | public class Source {
10 |
11 | public Source() {
12 | }
13 |
14 | public Source(String sourceName, String sourceUrl) {
15 | this.sourceName = sourceName;
16 | this.sourceUrl = sourceUrl;
17 | }
18 |
19 | String sourceName;
20 | String sourceUrl;
21 |
22 | public String getSourceName() {
23 | return sourceName;
24 | }
25 |
26 | public void setSourceName(String sourceName) {
27 | this.sourceName = sourceName;
28 | }
29 |
30 | public String getSourceUrl() {
31 | return sourceUrl;
32 | }
33 |
34 | public void setSourceUrl(String sourceUrl) {
35 | this.sourceUrl = sourceUrl;
36 | }
37 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/player/MyVideoView.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.player;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 |
6 | import androidx.annotation.NonNull;
7 | import androidx.annotation.Nullable;
8 |
9 | import xyz.doikki.videoplayer.player.AbstractPlayer;
10 | import xyz.doikki.videoplayer.player.VideoView;
11 |
12 | public class MyVideoView extends VideoView {
13 | public MyVideoView(@NonNull Context context) {
14 | super(context, null);
15 | }
16 |
17 | public MyVideoView(@NonNull Context context, @Nullable AttributeSet attrs) {
18 | super(context, attrs, 0);
19 | }
20 |
21 | public MyVideoView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
22 | super(context, attrs, defStyleAttr);
23 | }
24 |
25 | public AbstractPlayer getMediaPlayer() {
26 | return mMediaPlayer;
27 | }
28 |
29 | }
30 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_search_site.xml:
--------------------------------------------------------------------------------
1 |
2 |
20 |
--------------------------------------------------------------------------------
/crash/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | 出现意外错误。\n很抱歉给您带来不便。
4 | 重新启动
5 | 关闭应用
6 | 详细错误信息
7 | 详细错误信息
8 | 关闭
9 | 复制到剪贴板
10 | 复制到剪贴板
11 | 错误信息
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loadsir_empty_layout.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
12 |
13 |
17 |
18 |
24 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_home_sort.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
22 |
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_live_channel_group_new.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
23 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/pragma/Pragma.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013 Bilibili
3 | * Copyright (C) 2013 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 | package tv.danmaku.ijk.media.player.pragma;
18 |
19 | /*-
20 | * configurated by app project
21 | */
22 | public class Pragma {
23 | public static final boolean ENABLE_VERBOSE = true;
24 | }
25 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/LiveSettingGroup.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import java.util.ArrayList;
4 |
5 | public class LiveSettingGroup {
6 | private int groupIndex;
7 | private String groupName;
8 | private ArrayList liveSettingItems;
9 |
10 | public int getGroupIndex() {
11 | return groupIndex;
12 | }
13 |
14 | public void setGroupIndex(int groupIndex) {
15 | this.groupIndex = groupIndex;
16 | }
17 |
18 | public String getGroupName() {
19 | return groupName;
20 | }
21 |
22 | public void setGroupName(String groupName) {
23 | this.groupName = groupName;
24 | }
25 |
26 | public ArrayList getLiveSettingItems() {
27 | return liveSettingItems;
28 | }
29 |
30 | public void setLiveSettingItems(ArrayList liveSettingItems) {
31 | this.liveSettingItems = liveSettingItems;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/dialog/AboutDialog.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.dialog;
2 |
3 | import android.content.Context;
4 | import android.view.View;
5 |
6 | import androidx.annotation.NonNull;
7 |
8 | import com.github.tvbox.osc.R;
9 | import com.lxj.xpopup.core.BottomPopupView;
10 |
11 | import org.jetbrains.annotations.NotNull;
12 |
13 | public class AboutDialog extends BottomPopupView {
14 |
15 | public AboutDialog(@NonNull @NotNull Context context) {
16 | super(context);
17 | }
18 |
19 | @Override
20 | protected int getImplLayoutId() {
21 | return R.layout.dialog_about;
22 | }
23 |
24 | @Override
25 | protected void onCreate() {
26 | super.onCreate();
27 | findViewById(R.id.iv_close).setOnClickListener(new OnClickListener() {
28 | @Override
29 | public void onClick(View view) {
30 | dismiss();
31 | }
32 | });
33 | }
34 | }
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/IjkLibLoader.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013-2014 Bilibili
3 | * Copyright (C) 2013-2014 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player;
19 |
20 | public interface IjkLibLoader {
21 | void loadLibrary(String libName) throws UnsatisfiedLinkError,
22 | SecurityException;
23 | }
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/Subtitle.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | public class Subtitle {
4 |
5 | private String name;
6 |
7 | private String url;
8 |
9 | private boolean isZip;
10 |
11 | public boolean getIsZip() {
12 | return isZip;
13 | }
14 |
15 | public String getName() {
16 | return name;
17 | }
18 |
19 | public String getUrl() {
20 | return url;
21 | }
22 |
23 | public void setName(String name) {
24 | this.name = name;
25 | }
26 |
27 | public void setUrl(String url) {
28 | this.url = url;
29 | }
30 |
31 | public void setIsZip(boolean zip) {
32 | isZip = zip;
33 | }
34 |
35 | @Override
36 | public String toString() {
37 | return "Subtitle{" +
38 | "name='" + name + '\'' +
39 | ", url='" + url + '\'' +
40 | ", isZip=" + isZip +
41 | '}';
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHost.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player;
19 |
20 | import android.graphics.SurfaceTexture;
21 |
22 | public interface ISurfaceTextureHost {
23 | void releaseSurfaceTexture(SurfaceTexture surfaceTexture);
24 | }
25 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/exceptions/IjkMediaException.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013-2014 Bilibili
3 | * Copyright (C) 2013-2014 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.exceptions;
19 |
20 | public class IjkMediaException extends Exception {
21 | private static final long serialVersionUID = 7234796519009099506L;
22 | }
23 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_series_group.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
24 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/receiver/BatteryReceiver.kt:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.receiver
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import com.github.tvbox.osc.event.RefreshEvent
7 | import org.greenrobot.eventbus.EventBus
8 |
9 | /**
10 | * @Author : Liu XiaoRan
11 | * @Email : 592923276@qq.com
12 | * @Date : on 2023/1/29 11:45.
13 | * @Description :
14 | */
15 | class BatteryReceiver : BroadcastReceiver() {
16 |
17 | var currentBattery: Int = -1
18 | override fun onReceive(context: Context?, intent: Intent?) {
19 | if (Intent.ACTION_BATTERY_CHANGED == intent!!.action) {
20 | val level = intent.getIntExtra("level", 0)
21 | if (currentBattery != level) { // 电量变化
22 | currentBattery = level
23 | EventBus.getDefault().post(RefreshEvent(RefreshEvent.TYPE_BATTERY_CHANGE, currentBattery))
24 | }
25 | }
26 | }
27 | }
28 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/server/RequestProcess.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.server;
2 |
3 | import java.util.Map;
4 |
5 | import fi.iki.elonen.NanoHTTPD;
6 |
7 | /**
8 | * @author pj567
9 | * @date :2021/1/5
10 | * @description:
11 | */
12 | public interface RequestProcess {
13 | public static final int KEY_ACTION_PRESSED = 0;
14 | public static final int KEY_ACTION_DOWN = 1;
15 | public static final int KEY_ACTION_UP = 2;
16 |
17 | /**
18 | * isRequest
19 | *
20 | * @param session
21 | * @param fileName
22 | * @return
23 | */
24 | boolean isRequest(NanoHTTPD.IHTTPSession session, String fileName);
25 |
26 | /**
27 | * doResponse
28 | *
29 | * @param session
30 | * @param fileName
31 | * @param params
32 | * @param files
33 | * @return
34 | */
35 | NanoHTTPD.Response doResponse(NanoHTTPD.IHTTPSession session, String fileName, Map params, Map files);
36 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/SubtitleData.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import java.util.List;
4 |
5 | public class SubtitleData {
6 |
7 | private Boolean isNew;
8 |
9 | private List subtitleList;
10 |
11 | private Boolean isZip;
12 |
13 | public Boolean getIsNew() {
14 | return isNew;
15 | }
16 |
17 | public List getSubtitleList() {
18 | return subtitleList;
19 | }
20 |
21 | public Boolean getIsZip() {
22 | return isZip;
23 | }
24 |
25 | public void setIsNew(Boolean isNew) {
26 | this.isNew = isNew;
27 | }
28 |
29 | public void setSubtitleList(List subtitle) {
30 | this.subtitleList = subtitle;
31 | }
32 |
33 | public void setIsZip(Boolean zip) {
34 | isZip = zip;
35 | }
36 |
37 | @Override
38 | public String toString() {
39 | return "SubtitleData{" +
40 | "isNew='" + isNew + '\'' +
41 | '}';
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_local_video_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_error.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/seekbar_style.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 |
8 |
10 |
11 |
12 |
13 |
14 | -
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 | -
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_unlock.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/controller/IVideoController.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.controller;
2 |
3 | public interface IVideoController {
4 |
5 | /**
6 | * 开始控制视图自动隐藏倒计时
7 | */
8 | void startFadeOut();
9 |
10 | /**
11 | * 取消控制视图自动隐藏倒计时
12 | */
13 | void stopFadeOut();
14 |
15 | /**
16 | * 控制视图是否处于显示状态
17 | */
18 | boolean isShowing();
19 |
20 | /**
21 | * 设置锁定状态
22 | * @param locked 是否锁定
23 | */
24 | void setLocked(boolean locked);
25 |
26 | /**
27 | * 是否处于锁定状态
28 | */
29 | boolean isLocked();
30 |
31 | /**
32 | * 开始刷新进度
33 | */
34 | void startProgress();
35 |
36 | /**
37 | * 停止刷新进度
38 | */
39 | void stopProgress();
40 |
41 | /**
42 | * 显示控制视图
43 | */
44 | void hide();
45 |
46 | /**
47 | * 隐藏控制视图
48 | */
49 | void show();
50 |
51 | /**
52 | * 是否需要适配刘海
53 | */
54 | boolean hasCutout();
55 |
56 | /**
57 | * 获取刘海的高度
58 | */
59 | int getCutoutHeight();
60 | }
61 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_user_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 | -
16 |
17 |
18 |
19 |
20 |
21 | -
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/MediaInfo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013-2014 Bilibili
3 | * Copyright (C) 2013-2014 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player;
19 |
20 | public class MediaInfo {
21 | public String mMediaPlayerName;
22 |
23 | public String mVideoDecoder;
24 | public String mVideoDecoderImpl;
25 |
26 | public String mAudioDecoder;
27 | public String mAudioDecoderImpl;
28 |
29 | public IjkMediaMeta mMeta;
30 | }
31 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/render/IRenderView.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.render;
2 |
3 | import android.graphics.Bitmap;
4 | import android.view.View;
5 |
6 | import androidx.annotation.NonNull;
7 |
8 | import xyz.doikki.videoplayer.player.AbstractPlayer;
9 |
10 | public interface IRenderView {
11 |
12 | /**
13 | * 关联AbstractPlayer
14 | */
15 | void attachToPlayer(@NonNull AbstractPlayer player);
16 |
17 | /**
18 | * 设置视频宽高
19 | * @param videoWidth 宽
20 | * @param videoHeight 高
21 | */
22 | void setVideoSize(int videoWidth, int videoHeight);
23 |
24 | /**
25 | * 设置视频旋转角度
26 | * @param degree 角度值
27 | */
28 | void setVideoRotation(int degree);
29 |
30 | /**
31 | * 设置screen scale type
32 | * @param scaleType 类型
33 | */
34 | void setScaleType(int scaleType);
35 |
36 | /**
37 | * 获取真实的RenderView
38 | */
39 | View getView();
40 |
41 | /**
42 | * 截图
43 | */
44 | Bitmap doScreenShot();
45 |
46 | /**
47 | * 释放资源
48 | */
49 | void release();
50 |
51 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/IJKCode.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | import com.github.tvbox.osc.util.HawkConfig;
4 | import com.orhanobut.hawk.Hawk;
5 |
6 | import java.util.LinkedHashMap;
7 |
8 | /**
9 | * @author pj567
10 | * @date :2021/3/8
11 | * @description:
12 | */
13 | public class IJKCode {
14 | private String name;
15 | private LinkedHashMap option;
16 | private boolean selected;
17 |
18 | public void selected(boolean selected) {
19 | this.selected = selected;
20 | if (selected) {
21 | Hawk.put(HawkConfig.IJK_CODEC, name);
22 | }
23 | }
24 |
25 | public boolean isSelected() {
26 | return selected;
27 | }
28 |
29 | public String getName() {
30 | return name;
31 | }
32 |
33 | public void setName(String name) {
34 | this.name = name;
35 | }
36 |
37 | public LinkedHashMap getOption() {
38 | return option;
39 | }
40 |
41 | public void setOption(LinkedHashMap option) {
42 | this.option = option;
43 | }
44 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/ParseAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import android.graphics.Color;
4 | import android.view.View;
5 | import android.widget.TextView;
6 |
7 | import com.chad.library.adapter.base.BaseQuickAdapter;
8 | import com.chad.library.adapter.base.BaseViewHolder;
9 | import com.github.tvbox.osc.R;
10 | import com.github.tvbox.osc.bean.ParseBean;
11 |
12 | import java.util.ArrayList;
13 |
14 | public class ParseAdapter extends BaseQuickAdapter {
15 | public ParseAdapter() {
16 | super(R.layout.item_play_parse, new ArrayList<>());
17 | }
18 |
19 | @Override
20 | protected void convert(BaseViewHolder helper, ParseBean item) {
21 | TextView tvParse = helper.getView(R.id.tvParse);
22 | tvParse.setVisibility(View.VISIBLE);
23 | if (item.isDefault()) {
24 | tvParse.setTextColor(mContext.getResources().getColor(R.color.color_02F8E1));
25 | } else {
26 | tvParse.setTextColor(Color.WHITE);
27 | }
28 | tvParse.setText(item.getName());
29 | }
30 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_use_description_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/ISurfaceTextureHolder.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player;
19 |
20 | import android.graphics.SurfaceTexture;
21 |
22 | public interface ISurfaceTextureHolder {
23 | void setSurfaceTexture(SurfaceTexture surfaceTexture);
24 |
25 | SurfaceTexture getSurfaceTexture();
26 |
27 | void setSurfaceTextureHost(ISurfaceTextureHost surfaceTextureHost);
28 | }
29 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaFormat.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.misc;
19 |
20 | public interface IMediaFormat {
21 | // Common keys
22 | String KEY_MIME = "mime";
23 |
24 | // Video Keys
25 | String KEY_WIDTH = "width";
26 | String KEY_HEIGHT = "height";
27 |
28 | String getString(String name);
29 |
30 | int getInteger(String name);
31 | }
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_grid_filter.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
12 |
24 |
25 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/util/L.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.util;
2 |
3 | import android.util.Log;
4 |
5 | import xyz.doikki.videoplayer.player.VideoViewManager;
6 |
7 | /**
8 | * 日志类
9 | * Created by Doikki on 2017/6/5.
10 | */
11 |
12 | public final class L {
13 |
14 | private L() {
15 | }
16 |
17 | private static final String TAG = "DKPlayer";
18 |
19 | private static boolean isDebug = VideoViewManager.getConfig().mIsEnableLog;
20 |
21 |
22 | public static void d(String msg) {
23 | if (isDebug) {
24 | Log.d(TAG, msg);
25 | }
26 | }
27 |
28 | public static void e(String msg) {
29 | if (isDebug) {
30 | Log.e(TAG, msg);
31 | }
32 | }
33 |
34 | public static void i(String msg) {
35 | if (isDebug) {
36 | Log.i(TAG, msg);
37 | }
38 | }
39 |
40 | public static void w(String msg) {
41 | if (isDebug) {
42 | Log.w(TAG, msg);
43 | }
44 | }
45 |
46 | public static void setDebug(boolean isDebug) {
47 | L.isDebug = isDebug;
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/VodCollectDao.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.room.Dao;
4 | import androidx.room.Delete;
5 | import androidx.room.Insert;
6 | import androidx.room.OnConflictStrategy;
7 | import androidx.room.Query;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author pj567
13 | * @date :2021/1/7
14 | * @description:
15 | */
16 | @Dao
17 | public interface VodCollectDao {
18 | @Insert(onConflict = OnConflictStrategy.REPLACE)
19 | long insert(VodCollect record);
20 |
21 | @Query("select * from vodCollect order by updateTime desc")
22 | List getAll();
23 |
24 | @Query("select * from vodCollect where `id`=:id")
25 | VodCollect getVodCollect(int id);
26 |
27 | @Query("delete from vodCollect where `id`=:id")
28 | void delete(int id);
29 |
30 | @Query("select * from vodCollect where `sourceKey`=:sourceKey and `vodId`=:vodId")
31 | VodCollect getVodCollect(String sourceKey, String vodId);
32 |
33 | @Delete
34 | int delete(VodCollect record);
35 |
36 | @Query("DELETE FROM vodCollect")
37 | void deleteAll();
38 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_lock.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shape_live_select.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 | -
10 |
11 |
12 |
13 |
14 |
15 | -
16 |
17 |
18 |
19 |
20 |
21 | -
22 |
23 |
24 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/misc/IMediaDataSource.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.misc;
19 |
20 | import java.io.IOException;
21 |
22 | @SuppressWarnings("RedundantThrows")
23 | public interface IMediaDataSource {
24 | int readAt(long position, byte[] buffer, int offset, int size) throws IOException;
25 |
26 | long getSize() throws IOException;
27 |
28 | void close() throws IOException;
29 | }
30 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/controller/MediaPlayerControl.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.controller;
2 |
3 | import android.graphics.Bitmap;
4 |
5 | public interface MediaPlayerControl {
6 |
7 | void start();
8 |
9 | void pause();
10 |
11 | long getDuration();
12 |
13 | long getCurrentPosition();
14 |
15 | void seekTo(long pos);
16 |
17 | boolean isPlaying();
18 |
19 | int getBufferedPercentage();
20 |
21 | void startFullScreen();
22 |
23 | void stopFullScreen();
24 |
25 | boolean isFullScreen();
26 |
27 | void setMute(boolean isMute);
28 |
29 | boolean isMute();
30 |
31 | void setScreenScaleType(int screenScaleType);
32 |
33 | void setSpeed(float speed);
34 |
35 | float getSpeed();
36 |
37 | long getTcpSpeed();
38 |
39 | void replay(boolean resetPosition);
40 |
41 | void setMirrorRotation(boolean enable);
42 |
43 | Bitmap doScreenShot();
44 |
45 | int[] getVideoSize();
46 |
47 | void setRotation(float rotation);
48 |
49 | void startTinyScreen();
50 |
51 | void stopTinyScreen();
52 |
53 | boolean isTinyScreen();
54 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_change_20.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_dialog_checkbox_search.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
14 |
25 |
26 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/tv/widget/MarqueeTextView.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.tv.widget;
2 |
3 | import android.annotation.SuppressLint;
4 | import android.content.Context;
5 | import android.text.TextUtils;
6 | import android.util.AttributeSet;
7 | import android.widget.TextView;
8 |
9 | import androidx.annotation.Nullable;
10 |
11 | /**
12 | * Created by acer on 2018/7/13.
13 | */
14 |
15 | @SuppressLint("AppCompatCustomView")
16 | public class MarqueeTextView extends TextView{
17 | public MarqueeTextView(Context context) {
18 | this(context, null);
19 | }
20 |
21 | public MarqueeTextView(Context context, @Nullable AttributeSet attrs) {
22 | this(context, attrs, 0);
23 | }
24 |
25 | public MarqueeTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
26 | super(context, attrs, defStyleAttr);
27 | setSelected(true);
28 | setSingleLine(true);
29 | setMarqueeRepeatLimit(-1);
30 | setEllipsize(TextUtils.TruncateAt.MARQUEE);
31 | }
32 |
33 | @Override
34 | public boolean isFocused() {
35 | return true;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/gradle.properties:
--------------------------------------------------------------------------------
1 | # Project-wide Gradle settings.
2 | # IDE (e.g. Android Studio) users:
3 | # Gradle settings configured through the IDE *will override*
4 | # any settings specified in this file.
5 | # For more details on how to configure your build environment visit
6 | # http://www.gradle.org/docs/current/userguide/build_environment.html
7 | # Specifies the JVM arguments used for the daemon process.
8 | # The setting is particularly useful for tweaking memory settings.
9 | org.gradle.jvmargs=-Xmx2048m
10 | # When configured, Gradle will run in incubating parallel mode.
11 | # This option should only be used with decoupled projects. More details, visit
12 | # http://www.gradle.org/docs/current/userguide/multi_project_builds.html#sec:decoupled_projects
13 | # org.gradle.parallel=true
14 | # AndroidX package structure to make it clearer which packages are bundled with the
15 | # Android operating system, and which are packaged with your app"s APK
16 | # https://developer.android.com/topic/libraries/support-library/androidx-rn
17 | android.useAndroidX=true
18 | # Automatically convert third-party libraries to use AndroidX
19 | android.enableJetifier=true
20 | IsDebug=true
21 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # TVBoxMobile
2 |
3 | 发现在用的几个手机版并未开源,无法添加一些个性化功能
4 | 持续优化中
5 |
6 | 基于
7 |
8 | * [CatVodTVOfficial](https://github.com/CatVodTVOfficial)/[TVBoxOSC](https://github.com/CatVodTVOfficial/TVBoxOSC)
9 | * [q215613905](https://github.com/q215613905)/[TVBoxOS](https://github.com/q215613905/TVBoxOS)
10 |
11 |
12 |
13 | === Source Code - Editing the app default settings ===
14 | /src/main/java/com/github/tvbox/osc/base/App.java
15 |
16 | private void initParams() {
17 |
18 | putDefault(HawkConfig.HOME_REC, 0); //推荐: 0=豆瓣热播, 1=站点推荐
19 | putDefault(HawkConfig.PLAY_TYPE, 2); //播放器: 0=系统, 1=IJK, 2=Exo
20 | putDefault(HawkConfig.IJK_CODEC, "硬解码"); //IJK解码: 软解码, 硬解码
21 | putDefault(HawkConfig.BACKGROUND_PLAY_TYPE,2); //后台播放: 0 关闭,1 开启,2 画中画
22 | putDefault(HawkConfig.PARSE_WEBVIEW, true); //嗅探Webview: true=系统自带, false=XWalkView
23 | putDefault(HawkConfig.DOH_URL, 0); //安全DNS: 0=关闭, 1=腾讯, 2=阿里, 3=360, 4=Google, 5=AdGuard, 6=Quad9
24 | putDefault(HawkConfig.PLAY_SCALE, 0); //画面缩放: 0=默认, 1=16:9, 2=4:3, 3=填充, 4=原始, 5=裁剪
25 |
26 | }
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/misc/IAndroidIO.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2016 Bilibili
3 | * Copyright (C) 2016 Raymond Zheng
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.misc;
19 |
20 | import java.io.IOException;
21 |
22 | @SuppressWarnings("RedundantThrows")
23 | public interface IAndroidIO {
24 | int open(String url) throws IOException;
25 | int read(byte[] buffer, int size) throws IOException;
26 | long seek(long offset, int whence) throws IOException;
27 | int close() throws IOException;
28 | }
29 |
--------------------------------------------------------------------------------
/quickjs/build.gradle:
--------------------------------------------------------------------------------
1 | plugins {
2 | id 'com.android.library'
3 | }
4 |
5 | android {
6 | // ndkPath = "D:\\Android\\NDK\\android-ndk-r23b\\"
7 | compileSdkVersion 30
8 |
9 | defaultConfig {
10 | minSdkVersion 16
11 | targetSdkVersion 26
12 | versionCode 1
13 | versionName "1.0"
14 | externalNativeBuild {
15 | cmake {
16 | abiFilters 'armeabi-v7a'
17 | }
18 | }
19 | }
20 |
21 | buildTypes {
22 | all {
23 | ndk {
24 | abiFilters 'armeabi-v7a'
25 | }
26 | }
27 | release {
28 | minifyEnabled false
29 | proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
30 | }
31 |
32 | debug {
33 | }
34 | }
35 | compileOptions {
36 | sourceCompatibility JavaVersion.VERSION_1_8
37 | targetCompatibility JavaVersion.VERSION_1_8
38 | }
39 | externalNativeBuild {
40 | /*cmake {
41 | path file('src/main/cpp/CMakeLists.txt')
42 | version "3.10.2"
43 | }*/
44 | }
45 | }
46 |
47 | dependencies {
48 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/adapter/SeriesFlagAdapter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.adapter;
2 |
3 | import android.view.View;
4 | import android.widget.TextView;
5 |
6 | import com.chad.library.adapter.base.BaseQuickAdapter;
7 | import com.chad.library.adapter.base.BaseViewHolder;
8 | import com.github.tvbox.osc.R;
9 | import com.github.tvbox.osc.bean.VodInfo;
10 |
11 | import java.util.ArrayList;
12 |
13 | /**
14 | * @author pj567
15 | * @date :2020/12/22
16 | * @description:
17 | */
18 | public class SeriesFlagAdapter extends BaseQuickAdapter {
19 | public SeriesFlagAdapter() {
20 | super(R.layout.item_series_flag, new ArrayList<>());
21 | }
22 |
23 | @Override
24 | protected void convert(BaseViewHolder helper, VodInfo.VodSeriesFlag item) {
25 | TextView tvSeries = helper.getView(R.id.tvSeriesFlag);
26 | View select = helper.getView(R.id.tvSeriesFlagSelect);
27 | if (item.selected) {
28 | select.setVisibility(View.VISIBLE);
29 | } else {
30 | select.setVisibility(View.GONE);
31 | }
32 | helper.setText(R.id.tvSeriesFlag, item.name);
33 | }
34 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
15 |
16 |
26 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/dialog_all_series.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
21 |
22 |
29 |
30 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_database_48.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/AdBlocker.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util;
2 |
3 | import android.webkit.WebResourceResponse;
4 |
5 | import java.io.ByteArrayInputStream;
6 | import java.util.ArrayList;
7 | import java.util.List;
8 |
9 | public class AdBlocker {
10 | private static final List AD_HOSTS = new ArrayList<>();
11 |
12 | public static void clear() {
13 | AD_HOSTS.clear();
14 | }
15 |
16 | public static boolean isEmpty() {
17 | return AD_HOSTS.isEmpty();
18 | }
19 |
20 | public static void addAdHost(String host) {
21 | AD_HOSTS.add(host);
22 | }
23 |
24 | public static boolean hasHost(String host) {
25 | return AD_HOSTS.contains(host);
26 | }
27 |
28 | public static boolean isAd(String url) {
29 | url = url.toLowerCase();
30 | for (String adHost : AD_HOSTS) {
31 | if (url.contains(adHost)) {
32 | return true;
33 | }
34 | }
35 | return false;
36 | }
37 |
38 | public static WebResourceResponse createEmptyResource() {
39 | return new WebResourceResponse("text/plain", "utf-8", new ByteArrayInputStream("".getBytes()));
40 | }
41 |
42 | }
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_settings.xml:
--------------------------------------------------------------------------------
1 |
4 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/input_dialog_api_input.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 | -
6 |
7 |
-
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 | -
16 |
17 |
-
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_setting.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
7 |
17 |
18 |
23 |
24 |
25 |
29 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/bean/Subscription.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.bean;
2 |
3 | /**
4 | * @Author : Liu XiaoRan
5 | * @Email : 592923276@qq.com
6 | * @Date : on 2023/8/16 17:15.
7 | * @Description :
8 | */
9 | public class Subscription {
10 | public Subscription() {
11 | }
12 |
13 | public Subscription(String name, String url) {
14 | this.name = name;
15 | this.url = url;
16 | }
17 |
18 | String name;
19 | String url;
20 | //选择状态
21 | boolean isChecked;
22 | //置顶
23 | private boolean top;
24 |
25 | public boolean isTop() {
26 | return top;
27 | }
28 |
29 | public void setTop(boolean top) {
30 | this.top = top;
31 | }
32 |
33 | public boolean isChecked() {
34 | return isChecked;
35 | }
36 |
37 | public void setChecked(boolean checked) {
38 | isChecked = checked;
39 | }
40 |
41 | public String getName() {
42 | return name;
43 | }
44 |
45 | public void setName(String name) {
46 | this.name = name;
47 | }
48 |
49 | public String getUrl() {
50 | return url;
51 | }
52 |
53 | public void setUrl(String url) {
54 | this.url = url;
55 | }
56 |
57 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/tv/widget/NoScrollViewPager.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.tv.widget;
2 |
3 | import android.content.Context;
4 | import android.util.AttributeSet;
5 | import android.view.KeyEvent;
6 | import android.view.MotionEvent;
7 |
8 | import androidx.annotation.NonNull;
9 | import androidx.annotation.Nullable;
10 | import androidx.viewpager.widget.ViewPager;
11 |
12 | /**
13 | * @author acer
14 | * @date 2018/7/24
15 | */
16 |
17 | public class NoScrollViewPager extends ViewPager {
18 |
19 | public NoScrollViewPager(@NonNull Context context) {
20 | this(context, null);
21 | }
22 |
23 | public NoScrollViewPager(@NonNull Context context, @Nullable AttributeSet attrs) {
24 | super(context, attrs);
25 | }
26 |
27 | /**
28 | * 禁止viewpager里面内容导致页面切换
29 | *
30 | * @param event
31 | * @return
32 | */
33 | @Override
34 | public boolean executeKeyEvent(KeyEvent event) {
35 | return false;
36 | }
37 |
38 | @Override
39 | public boolean onTouchEvent(MotionEvent ev) {
40 | return false;
41 | }
42 |
43 | @Override
44 | public boolean onInterceptTouchEvent(MotionEvent ev) {
45 | return false;
46 | }
47 | }
48 |
--------------------------------------------------------------------------------
/player/src/main/java/xyz/doikki/videoplayer/controller/OrientationHelper.java:
--------------------------------------------------------------------------------
1 | package xyz.doikki.videoplayer.controller;
2 |
3 | import android.content.Context;
4 | import android.view.OrientationEventListener;
5 |
6 | /**
7 | * 设备方向监听
8 | */
9 | public class OrientationHelper extends OrientationEventListener {
10 |
11 | private long mLastTime;
12 |
13 | private OnOrientationChangeListener mOnOrientationChangeListener;
14 |
15 | public OrientationHelper(Context context) {
16 | super(context);
17 | }
18 |
19 | @Override
20 | public void onOrientationChanged(int orientation) {
21 | long currentTime = System.currentTimeMillis();
22 | if (currentTime - mLastTime < 300) return;//300毫秒检测一次
23 | if (mOnOrientationChangeListener != null) {
24 | mOnOrientationChangeListener.onOrientationChanged(orientation);
25 | }
26 | mLastTime = currentTime;
27 | }
28 |
29 |
30 | public interface OnOrientationChangeListener {
31 | void onOrientationChanged(int orientation);
32 | }
33 |
34 | public void setOnOrientationChangeListener(OnOrientationChangeListener onOrientationChangeListener) {
35 | mOnOrientationChangeListener = onOrientationChangeListener;
36 | }
37 | }
38 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/misc/ITrackInfo.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2015 Bilibili
3 | * Copyright (C) 2015 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.misc;
19 |
20 | public interface ITrackInfo {
21 | int MEDIA_TRACK_TYPE_AUDIO = 2;
22 | int MEDIA_TRACK_TYPE_METADATA = 5;
23 | int MEDIA_TRACK_TYPE_SUBTITLE = 4;
24 | int MEDIA_TRACK_TYPE_TIMEDTEXT = 3;
25 | int MEDIA_TRACK_TYPE_UNKNOWN = 0;
26 | int MEDIA_TRACK_TYPE_VIDEO = 1;
27 |
28 | IMediaFormat getFormat();
29 |
30 | String getLanguage();
31 |
32 | int getTrackType();
33 |
34 | String getInfoInline();
35 | }
36 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/CacheDao.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.room.Dao;
4 | import androidx.room.Delete;
5 | import androidx.room.Insert;
6 | import androidx.room.OnConflictStrategy;
7 | import androidx.room.Query;
8 | import androidx.room.Update;
9 |
10 | /**
11 | * 类描述:
12 | *
13 | * @author pj567
14 | * @since 2020/5/15
15 | */
16 | @Dao
17 | public interface CacheDao {
18 | @Insert(onConflict = OnConflictStrategy.REPLACE)
19 | long save(Cache cache);
20 |
21 | /**
22 | * 注意,冒号后面必须紧跟参数名,中间不能有空格。大于小于号和冒号中间是有空格的。
23 | * select *from cache where【表中列名】 =:【参数名】------>等于
24 | * where 【表中列名】 < :【参数名】 小于
25 | * where 【表中列名】 between :【参数名1】 and :【参数2】------->这个区间
26 | * where 【表中列名】like :参数名----->模糊查询
27 | * where 【表中列名】 in (:【参数名集合】)---->查询符合集合内指定字段值的记录
28 | *
29 | * @param key
30 | * @return
31 | */
32 |
33 | //如果是一对多,这里可以写List
34 | @Query("select *from cache where `key`=:key")
35 | Cache getCache(String key);
36 |
37 | //只能传递对象昂,删除时根据Cache中的主键 来比对的
38 | @Delete
39 | int delete(Cache cache);
40 |
41 | //只能传递对象昂,删除时根据Cache中的主键 来比对的
42 | @Update(onConflict = OnConflictStrategy.REPLACE)
43 | int update(Cache cache);
44 | }
45 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/util/js/UTF8BOMFighter.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.util.js;
2 |
3 | public class UTF8BOMFighter {
4 | private static final byte[] UTF8_BOM_BYTES = new byte[]{(byte) 0xEF, (byte) 0xBB, (byte) 0xBF};
5 |
6 | private UTF8BOMFighter() {
7 | }
8 |
9 | static public String removeUTF8BOM(String xmlText) {
10 | byte[] bytes = xmlText.getBytes();
11 | boolean containsBOM = bytes.length > 3
12 | && bytes[0] == UTF8_BOM_BYTES[0]
13 | && bytes[1] == UTF8_BOM_BYTES[1]
14 | && bytes[2] == UTF8_BOM_BYTES[2];
15 | if (containsBOM) {
16 | xmlText = new String(bytes, 3, bytes.length - 3);
17 | }
18 | return xmlText;
19 | }
20 |
21 | static byte[] removeUTF8BOM(byte[] bytes) {
22 | boolean containsBOM = bytes.length > 3
23 | && bytes[0] == UTF8_BOM_BYTES[0]
24 | && bytes[1] == UTF8_BOM_BYTES[1]
25 | && bytes[2] == UTF8_BOM_BYTES[2];
26 | if (containsBOM) {
27 | byte[] copy = new byte[bytes.length - 3];
28 | System.arraycopy(bytes, 3, copy, 0, bytes.length - 3);
29 | return copy;
30 | }
31 | return bytes;
32 | }
33 | }
34 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/play_volume.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
15 |
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/cache/VodRecordDao.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.cache;
2 |
3 | import androidx.room.Dao;
4 | import androidx.room.Delete;
5 | import androidx.room.Insert;
6 | import androidx.room.OnConflictStrategy;
7 | import androidx.room.Query;
8 |
9 | import java.util.List;
10 |
11 | /**
12 | * @author pj567
13 | * @date :2021/1/7
14 | * @description:
15 | */
16 | @Dao
17 | public interface VodRecordDao {
18 | @Insert(onConflict = OnConflictStrategy.REPLACE)
19 | long insert(VodRecord record);
20 |
21 | @Query("select * from vodRecord order by updateTime desc limit :size")
22 | List getAll(int size);
23 |
24 | @Query("select * from vodRecord where `sourceKey`=:sourceKey and `vodId`=:vodId")
25 | VodRecord getVodRecord(String sourceKey, String vodId);
26 |
27 | @Delete
28 | int delete(VodRecord record);
29 |
30 | @Query("select count(*) from vodRecord")
31 | int getCount();
32 |
33 | /**
34 | * 保留最新指定条数, 其他删除.
35 | * @param size 保留条数
36 | * @return
37 | */
38 | @Query("DELETE FROM vodRecord where id NOT IN (SELECT id FROM vodRecord ORDER BY updateTime desc LIMIT :size)")
39 | int reserver(int size);
40 |
41 | @Query("DELETE FROM vodRecord")
42 | void deleteAll();
43 | }
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_live_channel.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
20 |
21 |
32 |
--------------------------------------------------------------------------------
/player/src/main/java/tv/danmaku/ijk/media/player/annotations/AccessedByNative.java:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright (C) 2013-2014 Bilibili
3 | * Copyright (C) 2013-2014 Zhang Rui
4 | *
5 | * Licensed under the Apache License, Version 2.0 (the "License");
6 | * you may not use this file except in compliance with the License.
7 | * You may obtain a copy of the License at
8 | *
9 | * http://www.apache.org/licenses/LICENSE-2.0
10 | *
11 | * Unless required by applicable law or agreed to in writing, software
12 | * distributed under the License is distributed on an "AS IS" BASIS,
13 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 | * See the License for the specific language governing permissions and
15 | * limitations under the License.
16 | */
17 |
18 | package tv.danmaku.ijk.media.player.annotations;
19 |
20 | import java.lang.annotation.ElementType;
21 | import java.lang.annotation.Retention;
22 | import java.lang.annotation.RetentionPolicy;
23 | import java.lang.annotation.Target;
24 |
25 | /**
26 | * is used by the JNI generator to create the necessary JNI
27 | * bindings and expose this method to native code.
28 | */
29 | @Target(ElementType.FIELD)
30 | @Retention(RetentionPolicy.CLASS)
31 | public @interface AccessedByNative {
32 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/github/tvbox/osc/ui/tv/widget/FixedSpeedScroller.java:
--------------------------------------------------------------------------------
1 | package com.github.tvbox.osc.ui.tv.widget;
2 |
3 | import android.content.Context;
4 | import android.view.animation.Interpolator;
5 | import android.widget.Scroller;
6 |
7 | /**
8 | *
9 | * @author acer
10 | * @date 2018/7/24
11 | */
12 |
13 | public class FixedSpeedScroller extends Scroller {
14 | private int mDuration = 0;
15 |
16 | public void setmDuration(int mDuration) {
17 | this.mDuration = mDuration;
18 | }
19 |
20 | public FixedSpeedScroller(Context context) {
21 | super(context);
22 | }
23 |
24 | public FixedSpeedScroller(Context context, Interpolator interpolator) {
25 | super(context, interpolator);
26 | }
27 |
28 | public FixedSpeedScroller(Context context, Interpolator interpolator, boolean flywheel) {
29 | super(context, interpolator, flywheel);
30 | }
31 |
32 |
33 | @Override
34 | public void startScroll(int startX, int startY, int dx, int dy, int duration) {
35 | super.startScroll(startX, startY, dx, dy, mDuration);
36 | }
37 |
38 | @Override
39 | public void startScroll(int startX, int startY, int dx, int dy) {
40 | super.startScroll(startX, startY, dx, dy, mDuration);
41 | }
42 | }
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_series_flag.xml:
--------------------------------------------------------------------------------
1 |
2 |
14 |
15 |
23 |
24 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/item_grid_filter_value.xml:
--------------------------------------------------------------------------------
1 |
2 |
16 |
17 |
29 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_copyright_48.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------