├── .gitignore
├── .idea
├── .gitignore
├── caches
│ └── build_file_checksums.ser
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── compiler.xml
├── deploymentTargetDropDown.xml
├── gradle.xml
├── jarRepositories.xml
├── kotlinc.xml
├── migrations.xml
├── misc.xml
├── modules.xml
└── vcs.xml
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
├── sampledata
│ └── episode.json
└── src
│ ├── androidTest
│ └── java
│ │ └── soko
│ │ └── ekibun
│ │ └── bangumi
│ │ └── SpanTest.kt
│ └── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-web.png
│ ├── java
│ ├── com
│ │ ├── awarmisland
│ │ │ └── android
│ │ │ │ └── richedittext
│ │ │ │ ├── bean
│ │ │ │ ├── FontStyle.java
│ │ │ │ └── SpanPart.java
│ │ │ │ └── view
│ │ │ │ └── RichEditText.java
│ │ ├── bumptech
│ │ │ └── glide
│ │ │ │ └── samples
│ │ │ │ └── svg
│ │ │ │ ├── SvgDecoder.java
│ │ │ │ └── SvgDrawableTranscoder.java
│ │ └── oubowu
│ │ │ └── stickyitemdecoration
│ │ │ ├── FullSpanUtil.java
│ │ │ ├── OnStickyChangeListener.java
│ │ │ ├── StickyHeadContainer.java
│ │ │ └── StickyItemDecoration.java
│ └── soko
│ │ └── ekibun
│ │ └── bangumi
│ │ ├── App.kt
│ │ ├── api
│ │ ├── ApiHelper.kt
│ │ ├── bangumi
│ │ │ ├── Bangumi.kt
│ │ │ └── bean
│ │ │ │ ├── Character.kt
│ │ │ │ ├── Collection.kt
│ │ │ │ ├── Comment.kt
│ │ │ │ ├── Episode.kt
│ │ │ │ ├── Images.kt
│ │ │ │ ├── MonoInfo.kt
│ │ │ │ ├── Person.kt
│ │ │ │ ├── Say.kt
│ │ │ │ ├── Subject.kt
│ │ │ │ ├── TimeLine.kt
│ │ │ │ ├── Topic.kt
│ │ │ │ ├── TopicPost.kt
│ │ │ │ └── UserInfo.kt
│ │ ├── github
│ │ │ ├── Github.kt
│ │ │ └── bean
│ │ │ │ ├── BangumiCalendarItem.kt
│ │ │ │ ├── BangumiLinkMap.kt
│ │ │ │ ├── OnAirInfo.kt
│ │ │ │ └── Release.kt
│ │ └── sda1
│ │ │ ├── Sda1.kt
│ │ │ └── bean
│ │ │ └── Response.kt
│ │ ├── model
│ │ ├── DataCacheModel.kt
│ │ ├── HistoryModel.kt
│ │ ├── PluginsModel.kt
│ │ ├── SearchHistoryModel.kt
│ │ ├── ThemeModel.kt
│ │ ├── UserModel.kt
│ │ └── history
│ │ │ ├── History.kt
│ │ │ ├── HistoryDao.kt
│ │ │ └── HistoryDatabase.kt
│ │ ├── ui
│ │ ├── action
│ │ │ └── ActionActivity.kt
│ │ ├── main
│ │ │ ├── DrawerView.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── MainPresenter.kt
│ │ │ ├── UserView.kt
│ │ │ └── fragment
│ │ │ │ ├── DrawerFragment.kt
│ │ │ │ ├── calendar
│ │ │ │ ├── CalendarAdapter.kt
│ │ │ │ ├── CalendarFragment.kt
│ │ │ │ ├── CalendarPagerAdapter.kt
│ │ │ │ └── CalendarTabAdapter.kt
│ │ │ │ ├── history
│ │ │ │ ├── HistoryAdapter.kt
│ │ │ │ └── HistoryFragment.kt
│ │ │ │ ├── home
│ │ │ │ ├── HomeFragment.kt
│ │ │ │ └── fragment
│ │ │ │ │ ├── HomeTabFragment.kt
│ │ │ │ │ ├── collection
│ │ │ │ │ ├── CollectTypeView.kt
│ │ │ │ │ ├── CollectionFragment.kt
│ │ │ │ │ ├── CollectionListAdapter.kt
│ │ │ │ │ └── CollectionPagerAdapter.kt
│ │ │ │ │ ├── rakuen
│ │ │ │ │ ├── RakuenAdapter.kt
│ │ │ │ │ ├── RakuenFragment.kt
│ │ │ │ │ └── RakuenPagerAdapter.kt
│ │ │ │ │ └── timeline
│ │ │ │ │ ├── TimeLineAdapter.kt
│ │ │ │ │ ├── TimeLineFragment.kt
│ │ │ │ │ └── TimeLinePagerAdapter.kt
│ │ │ │ └── index
│ │ │ │ ├── IndexFragment.kt
│ │ │ │ ├── IndexPagerAdapter.kt
│ │ │ │ ├── IndexTypeView.kt
│ │ │ │ └── SubjectAdapter.kt
│ │ ├── say
│ │ │ ├── SayActivity.kt
│ │ │ ├── SayAdapter.kt
│ │ │ ├── SayPresenter.kt
│ │ │ └── SayView.kt
│ │ ├── search
│ │ │ ├── MonoAdapter.kt
│ │ │ ├── SearchActivity.kt
│ │ │ ├── SearchAdapter.kt
│ │ │ ├── SearchHistoryAdapter.kt
│ │ │ ├── SearchPresenter.kt
│ │ │ └── SearchTypeView.kt
│ │ ├── setting
│ │ │ └── SettingsActivity.kt
│ │ ├── splash
│ │ │ └── SplashActivity.kt
│ │ ├── subject
│ │ │ ├── BlogAdapter.kt
│ │ │ ├── CharacterAdapter.kt
│ │ │ ├── CommentAdapter.kt
│ │ │ ├── EditSubjectDialog.kt
│ │ │ ├── EpisodeAdapter.kt
│ │ │ ├── EpisodeDialog.kt
│ │ │ ├── EpisodeListDialog.kt
│ │ │ ├── InfoboxDialog.kt
│ │ │ ├── LinkedSubjectAdapter.kt
│ │ │ ├── SeasonAdapter.kt
│ │ │ ├── SitesAdapter.kt
│ │ │ ├── SmallEpisodeAdapter.kt
│ │ │ ├── SubjectActivity.kt
│ │ │ ├── SubjectPresenter.kt
│ │ │ ├── SubjectView.kt
│ │ │ ├── TagAdapter.kt
│ │ │ └── TopicAdapter.kt
│ │ ├── topic
│ │ │ ├── EmojiAdapter.kt
│ │ │ ├── PhotoPagerAdapter.kt
│ │ │ ├── PostAdapter.kt
│ │ │ ├── ReplyDialog.kt
│ │ │ ├── TopicActivity.kt
│ │ │ ├── TopicPresenter.kt
│ │ │ └── TopicView.kt
│ │ ├── view
│ │ │ ├── BaseActivity.kt
│ │ │ ├── BaseDialog.kt
│ │ │ ├── BaseFragmentActivity.kt
│ │ │ ├── BaseNodeAdapter.kt
│ │ │ ├── CleanableEditText.kt
│ │ │ ├── CollapsibleAppBarHelper.kt
│ │ │ ├── DimBlurTransform.kt
│ │ │ ├── DragPhotoView.kt
│ │ │ ├── DragSelectTouchListener.kt
│ │ │ ├── FastScrollPopup.java
│ │ │ ├── FastScrollRecyclerView.kt
│ │ │ ├── FastScroller.java
│ │ │ ├── FitScreenPhotoView.kt
│ │ │ ├── FixMultiViewPager.kt
│ │ │ ├── FixSwipeRefreshLayout.kt
│ │ │ ├── HotViewFlipper.kt
│ │ │ ├── NestedWebView.kt
│ │ │ ├── NotifyActionProvider.kt
│ │ │ ├── NumberPicker.kt
│ │ │ ├── OnFastScrollStateChangeListener.java
│ │ │ ├── RecyclerTabLayout.kt
│ │ │ ├── RoundBackgroundDecoration.kt
│ │ │ └── ShadowDecoration.kt
│ │ └── web
│ │ │ └── WebActivity.kt
│ │ └── util
│ │ ├── AppUtil.kt
│ │ ├── FileRequestBody.kt
│ │ ├── FixAppBarLayoutBehavior.java
│ │ ├── GlideUtil.kt
│ │ ├── HtmlUtil.kt
│ │ ├── HttpUtil.kt
│ │ ├── JsonUtil.kt
│ │ ├── PluginPreference.kt
│ │ ├── ProgressAppGlideModule.kt
│ │ ├── ResourceUtil.kt
│ │ ├── SpanFormatter.kt
│ │ ├── TimeUtil.kt
│ │ ├── WebViewCookieHandler.java
│ │ └── span
│ │ ├── BaseLineImageSpan.kt
│ │ ├── ClickableImageSpan.kt
│ │ ├── ClickableUrlSpan.kt
│ │ ├── CodeLineSpan.kt
│ │ ├── CollapseUrlDrawable.kt
│ │ ├── MaskSpan.kt
│ │ ├── QuoteLineSpan.kt
│ │ ├── TextViewDrawable.kt
│ │ ├── UploadDrawable.kt
│ │ └── UrlDrawable.kt
│ └── res
│ ├── anim
│ ├── fade_in.xml
│ ├── fade_out.xml
│ ├── move_in.xml
│ └── move_out.xml
│ ├── color
│ ├── color_bg_checkable.xml
│ ├── color_calendar_selector.xml
│ ├── color_checkable.xml
│ ├── color_checkable_white.xml
│ └── color_selectable.xml
│ ├── drawable-xhdpi
│ ├── akkarin.jpg
│ ├── bangumi_detail_ic_season_first.9.png
│ ├── bangumi_detail_ic_season_last.9.png
│ ├── bangumi_detail_ic_season_middle.9.png
│ ├── empty.webp
│ ├── err_401.webp
│ ├── err_404.webp
│ └── welcome.webp
│ ├── drawable
│ ├── bg_calendar_selector.xml
│ ├── bg_episode_badge.xml
│ ├── bg_episode_outline.xml
│ ├── bg_notify_badge.xml
│ ├── bg_round_checkable.xml
│ ├── bg_round_dialog.xml
│ ├── bg_round_outline.xml
│ ├── bg_round_rect.xml
│ ├── bg_say_left.xml
│ ├── bg_say_right.xml
│ ├── bg_selectable.xml
│ ├── bg_splash.xml
│ ├── divider.xml
│ ├── ic_add.xml
│ ├── ic_broken_image.xml
│ ├── ic_calendar.xml
│ ├── ic_check_circle.xml
│ ├── ic_chevron_left.xml
│ ├── ic_chevron_right.xml
│ ├── ic_clear.xml
│ ├── ic_code.xml
│ ├── ic_edit.xml
│ ├── ic_emoji_keyboard.xml
│ ├── ic_exit.xml
│ ├── ic_explore.xml
│ ├── ic_format.xml
│ ├── ic_heart.xml
│ ├── ic_heart_outline.xml
│ ├── ic_history.xml
│ ├── ic_home.xml
│ ├── ic_image.xml
│ ├── ic_insert_emoji.xml
│ ├── ic_keyboard.xml
│ ├── ic_lock.xml
│ ├── ic_logo.xml
│ ├── ic_notifications.xml
│ ├── ic_notifications_none.xml
│ ├── ic_search.xml
│ ├── ic_send.xml
│ ├── ic_settings.xml
│ ├── ic_time.xml
│ ├── ic_timelapse.xml
│ ├── ic_widgets.xml
│ ├── placeholder.xml
│ └── placeholder_round.xml
│ ├── layout
│ ├── action_notify.xml
│ ├── activity_main.xml
│ ├── activity_subject.xml
│ ├── activity_topic.xml
│ ├── activity_web.xml
│ ├── appbar_layout.xml
│ ├── base_activity.xml
│ ├── base_dialog.xml
│ ├── brvah_quick_view_load_more.xml
│ ├── content_calendar.xml
│ ├── content_history.xml
│ ├── content_home.xml
│ ├── content_index.xml
│ ├── dialog_edit_subject.xml
│ ├── dialog_episode_list.xml
│ ├── dialog_epsode.xml
│ ├── dialog_infobox.xml
│ ├── dialog_reply.xml
│ ├── dialog_subject.xml
│ ├── fragment_collection.xml
│ ├── fragment_rakuen.xml
│ ├── fragment_search.xml
│ ├── fragment_timeline.xml
│ ├── item_avatar_header.xml
│ ├── item_blog.xml
│ ├── item_calendar.xml
│ ├── item_calendar_now.xml
│ ├── item_calendar_tab.xml
│ ├── item_character.xml
│ ├── item_comment.xml
│ ├── item_emoji.xml
│ ├── item_episode.xml
│ ├── item_episode_flipper.xml
│ ├── item_episode_header.xml
│ ├── item_episode_small.xml
│ ├── item_mono.xml
│ ├── item_rakuen_tab.xml
│ ├── item_reply.xml
│ ├── item_say.xml
│ ├── item_search_history.xml
│ ├── item_season.xml
│ ├── item_site.xml
│ ├── item_subject.xml
│ ├── item_subject_small.xml
│ ├── item_subject_topic.xml
│ ├── item_tag.xml
│ ├── item_timeline.xml
│ ├── item_topic.xml
│ ├── nav_header.xml
│ ├── number_picker.xml
│ ├── pref_coffee_header.xml
│ ├── pref_plugin_widget.xml
│ ├── subject_detail.xml
│ ├── view_empty.xml
│ └── view_login.xml
│ ├── menu
│ ├── action_main.xml
│ ├── action_subject.xml
│ ├── action_web.xml
│ ├── drawer_main.xml
│ ├── list_browser_type.xml
│ ├── list_format.xml
│ ├── list_notify.xml
│ ├── list_search_type.xml
│ ├── list_timeline.xml
│ ├── list_topic_filter.xml
│ └── nav_main.xml
│ ├── mipmap-anydpi-v26
│ ├── ic_launcher.xml
│ └── ic_launcher_round.xml
│ ├── mipmap-hdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-mdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── mipmap-xxxhdpi
│ ├── ic_launcher.png
│ ├── ic_launcher_foreground.png
│ └── ic_launcher_round.png
│ ├── values-night
│ └── styles.xml
│ ├── values
│ ├── attrs.xml
│ ├── colors.xml
│ ├── dimens.xml
│ ├── strings.xml
│ └── styles.xml
│ └── xml
│ ├── app_preferences.xml
│ ├── filepaths.xml
│ └── network_security_config.xml
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
├── images
├── prev1.jpg
├── prev2.jpg
├── prev3.jpg
└── prev4.jpg
└── settings.gradle
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/workspace.xml
5 | /.idea/libraries
6 | .DS_Store
7 | /build
8 | /captures
9 | .externalNativeBuild
10 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/caches/build_file_checksums.ser:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekibun/Bangumi/81099b44d5f351868f8ff2beb0cc19704d44e030/.idea/caches/build_file_checksums.ser
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/deploymentTargetDropDown.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
18 |
19 |
--------------------------------------------------------------------------------
/.idea/jarRepositories.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
--------------------------------------------------------------------------------
/.idea/kotlinc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/migrations.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Bangumi
2 | [](https://github.com/ekibun/Bangumi/releases)
3 | [](https://github.com/ekibun/Bangumi)
4 | [](https://github.com/ekibun/Bangumi/releases)
5 | [](https://www.codacy.com/manual/ekibun/Bangumi?utm_source=github.com&utm_medium=referral&utm_content=ekibun/Bangumi&utm_campaign=Badge_Grade)
6 |
7 | 这是一个参(抄)考(袭)了bilibili和隔壁各个bgm客户端的又双叒叕一个[Bangumi番组计划](https://bgm.tv)Android客户端
8 |
9 | ## 这东西有啥用
10 |
11 | - 更原生的收藏列表
12 |
13 | - 更详细的放送时间表
14 |
15 | - 更好用的番组搜索/索引
16 |
17 | - 更全面的番组详情
18 |
19 | - 更快捷的收藏/进度管理
20 |
21 | - 原生体验的超展开/时间胶囊
22 |
23 | ## 这东西长啥样
24 |
25 | |  |  |  |  |
26 | | ---- | ---- | ---- | ---- |
27 |
28 | ## 感谢以下的开源项目及作者
29 |
30 | - [Gson](https://github.com/google/gson)
31 |
32 | - [Jsoup](https://jsoup.org/)
33 |
34 | - [Glide](https://github.com/bumptech/glide)
35 |
36 | - [GlideWebpDecoder](https://github.com/zjupure/GlideWebpDecoder)
37 |
38 | - [glide-transformations](https://github.com/wasabeef/glide-transformations)
39 |
40 | - [okhttp](https://github.com/square/okhttp)
41 |
42 | - [retrofit](https://github.com/square/retrofit)
43 |
44 | - [base-adapter](https://github.com/hongyangAndroid/baseAdapter)
45 |
46 | - [BaseRecyclerViewAdapterHelper](https://github.com/CymChad/BaseRecyclerViewAdapterHelper)
47 |
48 | - [StickyItemDecoration](https://github.com/oubowu/Stickyitemdecoration)
49 |
50 | - [android-shape-imageview](https://github.com/siyamed/android-shape-imageview)
51 |
52 | - [RecyclerTabLayout](https://github.com/nshmura/RecyclerTabLayout)
53 |
54 | - [RecyclePagerAdapter](https://github.com/AlexMofer/RecyclePagerAdapter)
55 |
56 | - [DiskLruCache](https://github.com/JakeWharton/DiskLruCache)
57 |
58 | - [PhotoView](https://github.com/chrisbanes/PhotoView)
59 |
60 | - [FastScrollRecyclerView](https://github.com/timusus/RecyclerView-FastScroll)
61 |
62 | - [RichEditText](https://github.com/awarmisland/RichEditText)
63 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
2 |
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in buildCallback.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 | -dontobfuscate
24 | -keep class soko.ekibun.bangumi.**{*;}
--------------------------------------------------------------------------------
/app/sampledata/episode.json:
--------------------------------------------------------------------------------
1 | {
2 | "data": [
3 | {
4 | "type": 0,
5 | "header": "本篇",
6 | "sort": "第 1 话"
7 | },
8 | {
9 | "type": 0,
10 | "header": " ",
11 | "sort": "第 1 话"
12 | },
13 | {
14 | "type": 1,
15 | "header": " ",
16 | "sort": "第 1 话"
17 | },
18 | {
19 | "type": 1,
20 | "header": " ",
21 | "sort": "第 2 话"
22 | },
23 | {
24 | "type": 1,
25 | "header": " ",
26 | "sort": "第 3 话"
27 | },
28 | {
29 | "type": 1,
30 | "header": " ",
31 | "sort": "第 4 话"
32 | },
33 | {
34 | "type": 1,
35 | "header": " ",
36 | "sort": "第 5 话"
37 | },
38 | {
39 | "type": 0,
40 | "header": " ",
41 | "sort": "第 6 话"
42 | },
43 | {
44 | "type": 0,
45 | "header": "特别篇",
46 | "sort": "第 5 话"
47 | },
48 | {
49 | "type": 0,
50 | "header": " ",
51 | "sort": "第 6 话"
52 | },
53 | {
54 | "type": 1,
55 | "header": " ",
56 | "sort": "特别篇 1"
57 | },
58 | {
59 | "type": 1,
60 | "sort": "特别篇 2"
61 | },
62 | {
63 | "type": 1,
64 | "sort": "特别篇 3"
65 | }
66 | ]
67 | }
--------------------------------------------------------------------------------
/app/src/androidTest/java/soko/ekibun/bangumi/SpanTest.kt:
--------------------------------------------------------------------------------
1 | package soko.ekibun.bangumi
2 |
3 | import org.junit.Test
4 | import soko.ekibun.bangumi.util.HtmlUtil
5 |
6 | class SpanTest {
7 |
8 | @Test
9 | fun test() {
10 | val html = """test
11 | Bold
12 | Italic underline remove
13 | mask
14 | red
15 | size
16 | url
17 | 
18 |
list item
19 | line break
20 | list item
22 | 1
23 | 2
24 | 3
25 | 4
26 | code
27 | <a></a>
"""
28 | val span = HtmlUtil.html2span(html)
29 | println(HtmlUtil.span2bbcode(span))
30 | }
31 | }
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-web.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/ekibun/Bangumi/81099b44d5f351868f8ff2beb0cc19704d44e030/app/src/main/ic_launcher-web.png
--------------------------------------------------------------------------------
/app/src/main/java/com/awarmisland/android/richedittext/bean/FontStyle.java:
--------------------------------------------------------------------------------
1 | package com.awarmisland.android.richedittext.bean;
2 |
3 | /**
4 | * 字体样式
5 | */
6 | public class FontStyle {
7 | public boolean isBold;
8 | public boolean isItalic;
9 | public boolean isUnderline;
10 | public boolean isStrike;
11 | public boolean isMask;
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/awarmisland/android/richedittext/bean/SpanPart.java:
--------------------------------------------------------------------------------
1 | package com.awarmisland.android.richedittext.bean;
2 |
3 | /**
4 | * span 样式记录
5 | */
6 | public class SpanPart extends FontStyle {
7 | public int start;
8 | public int end;
9 |
10 | public SpanPart(int start, int end) {
11 | this.start = start;
12 | this.end = end;
13 | }
14 |
15 | public SpanPart(FontStyle fontStyle) {
16 | this.isBold = fontStyle.isBold;
17 | this.isItalic = fontStyle.isItalic;
18 | this.isStrike = fontStyle.isStrike;
19 | this.isMask = fontStyle.isMask;
20 | this.isUnderline = fontStyle.isUnderline;
21 | }
22 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/bumptech/glide/samples/svg/SvgDecoder.java:
--------------------------------------------------------------------------------
1 | package com.bumptech.glide.samples.svg;
2 |
3 | import androidx.annotation.NonNull;
4 | import com.bumptech.glide.load.Options;
5 | import com.bumptech.glide.load.ResourceDecoder;
6 | import com.bumptech.glide.load.engine.Resource;
7 | import com.bumptech.glide.load.resource.SimpleResource;
8 | import com.caverock.androidsvg.SVG;
9 | import com.caverock.androidsvg.SVGParseException;
10 |
11 | import java.io.IOException;
12 | import java.io.InputStream;
13 |
14 | /**
15 | * Decodes an SVG internal representation from an {@link InputStream}.
16 | */
17 | public class SvgDecoder implements ResourceDecoder {
18 |
19 | @Override
20 | public boolean handles(@NonNull InputStream source, @NonNull Options options) {
21 | // TODO: Can we tell?
22 | return true;
23 | }
24 |
25 | public Resource