├── .github
├── downloads.jpg
├── home.jpg
├── reader.jpg
├── result.jpg
├── search.jpg
└── workflows
│ └── build.yml
├── .gitignore
├── .idea
├── .gitignore
├── codeStyles
│ ├── Project.xml
│ └── codeStyleConfig.xml
├── compiler.xml
├── gradle.xml
├── jarRepositories.xml
├── uiDesigner.xml
└── vcs.xml
├── LICENSE
├── README.md
├── app
├── .gitignore
├── build.gradle
├── proguard-rules.pro
└── src
│ ├── androidTest
│ └── java
│ │ └── com
│ │ └── example
│ │ └── quicknovel
│ │ └── ExampleInstrumentedTest.kt
│ ├── main
│ ├── AndroidManifest.xml
│ ├── ic_launcher-playstore.png
│ ├── java
│ │ └── com
│ │ │ └── lagradost
│ │ │ └── quicknovel
│ │ │ ├── APIRepository.kt
│ │ │ ├── BaseApplication.kt
│ │ │ ├── BookDownloader2.kt
│ │ │ ├── CommonActivity.kt
│ │ │ ├── DataStore.kt
│ │ │ ├── FontAdapter.kt
│ │ │ ├── MainAPI.kt
│ │ │ ├── MainActivity.kt
│ │ │ ├── ReadActivity2.kt
│ │ │ ├── ReadActivityViewModel.kt
│ │ │ ├── TTSHelper.kt
│ │ │ ├── TTSNotificationService.kt
│ │ │ ├── TTSNotifications.kt
│ │ │ ├── extractors
│ │ │ ├── ExtractorApi.kt
│ │ │ └── LibgenLi.kt
│ │ │ ├── mvvm
│ │ │ └── ArchComponentExt.kt
│ │ │ ├── network
│ │ │ ├── CloudflareKiller.kt
│ │ │ └── WebViewResolver.kt
│ │ │ ├── providers
│ │ │ ├── AllNovelProvider.kt
│ │ │ ├── AnnasArchive.kt
│ │ │ ├── BestLightNovelProvider.kt
│ │ │ ├── BoxNovelProvider.kt
│ │ │ ├── ComrademaoProvider.kt
│ │ │ ├── EfremnetProvider.kt
│ │ │ ├── FreeWebNovelProvider.kt
│ │ │ ├── HiraethTranslationProvider.kt
│ │ │ ├── IndoWebNovelProvider.kt
│ │ │ ├── KolNovelProvider.kt
│ │ │ ├── LibReadProvider.kt
│ │ │ ├── LightNovelPubProvider.kt
│ │ │ ├── MadaraReader.kt
│ │ │ ├── MeioNovelProvider.kt
│ │ │ ├── MoreNovelProvider.kt
│ │ │ ├── MtlNovelsProvider.kt
│ │ │ ├── NovelBinProvider.kt
│ │ │ ├── NovelFullProvider.kt
│ │ │ ├── NovelsOnlineProvider.kt
│ │ │ ├── PawReadProver.kt
│ │ │ ├── RanobesProvider.kt
│ │ │ ├── ReadAnyBookProvider.kt
│ │ │ ├── ReadLightNovelProvider.kt
│ │ │ ├── ReadNovelFullProvider.kt
│ │ │ ├── ReadfromnetProvider.kt
│ │ │ ├── RedditProvider.kt
│ │ │ ├── RoyalRoadProvider.kt
│ │ │ ├── SakuraNovelProvider.kt
│ │ │ ├── ScribblehubProvider.kt
│ │ │ ├── WPReader.kt
│ │ │ ├── WattpadProvider.kt
│ │ │ └── WtrLabProvider.kt
│ │ │ ├── receivers
│ │ │ └── BecomingNoisyReceiver.kt
│ │ │ ├── services
│ │ │ ├── DownloadService.kt
│ │ │ └── TTSPauseService.kt
│ │ │ ├── tools.kt
│ │ │ ├── ui
│ │ │ ├── BaseAdapter.kt
│ │ │ ├── NonFinalAdapterListUpdateCallback.kt
│ │ │ ├── OrientationType.kt
│ │ │ ├── ReadType.kt
│ │ │ ├── ReadingType.kt
│ │ │ ├── TextAdapter.kt
│ │ │ ├── TextImageView.kt
│ │ │ ├── UiText.kt
│ │ │ ├── download
│ │ │ │ ├── AnyAdapter.kt
│ │ │ │ ├── CachedAdapter2.kt
│ │ │ │ ├── DownloadAdapter2.kt
│ │ │ │ ├── DownloadFragment.kt
│ │ │ │ ├── DownloadViewModel.kt
│ │ │ │ └── ViewpagerAdapter.kt
│ │ │ ├── history
│ │ │ │ ├── HistoryAdapter2.kt
│ │ │ │ ├── HistoryFragment.kt
│ │ │ │ └── HistoryViewModel.kt
│ │ │ ├── home
│ │ │ │ ├── BrowseAdapter2.kt
│ │ │ │ ├── HomeFragment.kt
│ │ │ │ └── HomeViewModel.kt
│ │ │ ├── mainpage
│ │ │ │ ├── MainAdapter2.kt
│ │ │ │ ├── MainPageFragment.kt
│ │ │ │ ├── MainPageRepository.kt
│ │ │ │ └── MainPageViewModel.kt
│ │ │ ├── result
│ │ │ │ ├── ChapterAdapter.kt
│ │ │ │ ├── ResultFragment.kt
│ │ │ │ ├── ResultViewModel.kt
│ │ │ │ └── ReviewAdapter2.kt
│ │ │ ├── roundedbg
│ │ │ │ ├── LayoutExtensions.kt
│ │ │ │ ├── RoundedBgTextView.kt
│ │ │ │ ├── TextRoundedBgAttributeReader.kt
│ │ │ │ ├── TextRoundedBgHelper.kt
│ │ │ │ └── TextRoundedBgRenderer.kt
│ │ │ ├── search
│ │ │ │ ├── HomeChildItemAdapter2.kt
│ │ │ │ ├── ParentItemAdapter2.kt
│ │ │ │ ├── SearchAdapter2.kt
│ │ │ │ ├── SearchFragment.kt
│ │ │ │ └── SearchViewModel.kt
│ │ │ └── settings
│ │ │ │ └── SettingsFragment.kt
│ │ │ ├── util
│ │ │ ├── Apis.kt
│ │ │ ├── AppUtils.kt
│ │ │ ├── BackupUtils.kt
│ │ │ ├── Coroutines.kt
│ │ │ ├── Event.kt
│ │ │ ├── GlideApp.kt
│ │ │ ├── InAppUpdater.kt
│ │ │ ├── ParCollections.kt
│ │ │ ├── ResultCached.kt
│ │ │ ├── SettingsHelper.kt
│ │ │ ├── SingleSelectionHelper.kt
│ │ │ ├── SubtitleHelper.kt
│ │ │ └── UIHelper.kt
│ │ │ └── widget
│ │ │ ├── AutofitRecyclerView.kt
│ │ │ └── FlowLayout.kt
│ └── res
│ │ ├── anim
│ │ ├── enter_anim.xml
│ │ ├── exit_anim.xml
│ │ ├── nav_enter_anim.xml
│ │ ├── nav_exit_anim.xml
│ │ ├── nav_pop_enter.xml
│ │ ├── nav_pop_exit.xml
│ │ ├── pop_enter.xml
│ │ └── pop_exit.xml
│ │ ├── color
│ │ ├── check_selection_color.xml
│ │ ├── chip_color.xml
│ │ ├── chip_color_text.xml
│ │ ├── item_select_color.xml
│ │ ├── text_selection_color.xml
│ │ └── white_transparent_toggle.xml
│ │ ├── drawable
│ │ ├── background_shadow.xml
│ │ ├── baseline_restore_page_24.xml
│ │ ├── baseline_save_as_24.xml
│ │ ├── big_icon_boxnovel.png
│ │ ├── big_icon_novelpassion.xml
│ │ ├── big_icon_readlightnovel.png
│ │ ├── big_icon_royalroad.png
│ │ ├── big_icon_wuxiaworldsite.png
│ │ ├── bigger_font.xml
│ │ ├── books_emoji.xml
│ │ ├── checkmark_check.xml
│ │ ├── circle.xml
│ │ ├── circle_shape.xml
│ │ ├── circular_progress_bar_clockwise.xml
│ │ ├── color_selection.xml
│ │ ├── color_selection_check.xml
│ │ ├── color_selection_outline.xml
│ │ ├── cs3_cloud.xml
│ │ ├── dialog__window_background.xml
│ │ ├── download_add_bg.xml
│ │ ├── download_button_background.xml
│ │ ├── fiber_new_24px.xml
│ │ ├── format_padding_decrease_white_24dp.xml
│ │ ├── format_padding_increase_white_24dp.xml
│ │ ├── ic_baseline_add_24.xml
│ │ ├── ic_baseline_arrow_back_24.xml
│ │ ├── ic_baseline_arrow_downward_24.xml
│ │ ├── ic_baseline_arrow_forward_24.xml
│ │ ├── ic_baseline_arrow_upward_24.xml
│ │ ├── ic_baseline_autorenew_24.xml
│ │ ├── ic_baseline_bookmark_24.xml
│ │ ├── ic_baseline_bookmark_border_24.xml
│ │ ├── ic_baseline_check_24.xml
│ │ ├── ic_baseline_check_24_listview.xml
│ │ ├── ic_baseline_cloud_24.xml
│ │ ├── ic_baseline_code_24.xml
│ │ ├── ic_baseline_collections_bookmark_24.xml
│ │ ├── ic_baseline_color_lens_24.xml
│ │ ├── ic_baseline_create_24.xml
│ │ ├── ic_baseline_delete_outline_24.xml
│ │ ├── ic_baseline_discord_24.xml
│ │ ├── ic_baseline_edit_24.xml
│ │ ├── ic_baseline_fast_forward_24.xml
│ │ ├── ic_baseline_fast_rewind_24.xml
│ │ ├── ic_baseline_filter_list_24.xml
│ │ ├── ic_baseline_font_download_24.xml
│ │ ├── ic_baseline_grid_view_24.xml
│ │ ├── ic_baseline_history_24.xml
│ │ ├── ic_baseline_keyboard_arrow_down_24.xml
│ │ ├── ic_baseline_language_24.xml
│ │ ├── ic_baseline_list_24.xml
│ │ ├── ic_baseline_menu_24.xml
│ │ ├── ic_baseline_menu_book_24.xml
│ │ ├── ic_baseline_more_vert_24.xml
│ │ ├── ic_baseline_notifications_active_24.xml
│ │ ├── ic_baseline_open_in_new_24.xml
│ │ ├── ic_baseline_pause_24.xml
│ │ ├── ic_baseline_play_arrow_24.xml
│ │ ├── ic_baseline_public_24.xml
│ │ ├── ic_baseline_screen_lock_landscape_24.xml
│ │ ├── ic_baseline_screen_lock_portrait_24.xml
│ │ ├── ic_baseline_screen_rotation_24.xml
│ │ ├── ic_baseline_star_24.xml
│ │ ├── ic_baseline_stay_current_landscape_24.xml
│ │ ├── ic_baseline_stay_current_portrait_24.xml
│ │ ├── ic_baseline_stop_24.xml
│ │ ├── ic_baseline_system_update_24.xml
│ │ ├── ic_baseline_tune_24.xml
│ │ ├── ic_baseline_volume_up_24.xml
│ │ ├── ic_blank_24.xml
│ │ ├── ic_check_24.xml
│ │ ├── ic_github_logo.xml
│ │ ├── ic_icon_monochrome.xml
│ │ ├── ic_indowebnovel.png
│ │ ├── ic_launcher_background.xml
│ │ ├── ic_launcher_foreground.xml
│ │ ├── ic_meionovel.png
│ │ ├── ic_morenovel.png
│ │ ├── ic_outline_explore_24.xml
│ │ ├── ic_outline_settings_24.xml
│ │ ├── ic_outline_share_24.xml
│ │ ├── ic_quicknovel.xml
│ │ ├── ic_sakuranovel.png
│ │ ├── ic_sharp_clear_24.xml
│ │ ├── ic_sort_24dp.xml
│ │ ├── icon.xml
│ │ ├── icon_allnovel.png
│ │ ├── icon_azynovel.png
│ │ ├── icon_boxnovel.png
│ │ ├── icon_efremnet.png
│ │ ├── icon_engnovel.png
│ │ ├── icon_freewebnovel.png
│ │ ├── icon_hiraethtranslation.png
│ │ ├── icon_kolnovel.png
│ │ ├── icon_libread.png
│ │ ├── icon_mnovel.png
│ │ ├── icon_mtlnovel.png
│ │ ├── icon_novelbin.png
│ │ ├── icon_novelfull.png
│ │ ├── icon_novelfullvip.png
│ │ ├── icon_novelpassion.png
│ │ ├── icon_novelsonline.png
│ │ ├── icon_ranobes.png
│ │ ├── icon_readfromnet.png
│ │ ├── icon_readlightnovel.png
│ │ ├── icon_readlightnovel2.png
│ │ ├── icon_readlightnovel3.png
│ │ ├── icon_readlightnovel4.png
│ │ ├── icon_rewayatar.png
│ │ ├── icon_royalroad.png
│ │ ├── icon_royalroad2.png
│ │ ├── icon_wuxiaworldonline.png
│ │ ├── icon_wuxiaworldsite.png
│ │ ├── indicator_background.xml
│ │ ├── monke_eating.xml
│ │ ├── netflix_download.xml
│ │ ├── netflix_pause.xml
│ │ ├── netflix_play.xml
│ │ ├── nights_stay_24px.xml
│ │ ├── nothing.xml
│ │ ├── nulldrawable.xml
│ │ ├── outline.xml
│ │ ├── outline_drawable.xml
│ │ ├── outline_drawable_less.xml
│ │ ├── outline_less.xml
│ │ ├── pawread.png
│ │ ├── rddone.xml
│ │ ├── rderror.xml
│ │ ├── rdload.xml
│ │ ├── rdpause.xml
│ │ ├── ripple_regular.xml
│ │ ├── round_bg_button.xml
│ │ ├── rounded_dialog.xml
│ │ ├── rounded_text_bg.xml
│ │ ├── rounded_text_bg_left.xml
│ │ ├── rounded_text_bg_mid.xml
│ │ ├── rounded_text_bg_right.xml
│ │ ├── search_background.xml
│ │ ├── search_icon.xml
│ │ ├── search_icon_white.xml
│ │ ├── shadow.xml
│ │ ├── smaller_font.xml
│ │ ├── splash_background.xml
│ │ ├── swipe_vertical_24px.xml
│ │ ├── tab_selector.xml
│ │ ├── text_top_bottom_margin.xml
│ │ ├── text_top_bottom_margin_expand.xml
│ │ ├── title_shadow.xml
│ │ ├── translate_24px.xml
│ │ └── white_card.xml
│ │ ├── font
│ │ ├── google_sans.xml
│ │ ├── productsans_black.ttf
│ │ ├── productsans_blackitalic.ttf
│ │ ├── productsans_bold.ttf
│ │ ├── productsans_bolditalic.ttf
│ │ ├── productsans_italic.ttf
│ │ ├── productsans_light.ttf
│ │ ├── productsans_lightitalic.ttf
│ │ ├── productsans_medium.ttf
│ │ ├── productsans_mediumitalic.ttf
│ │ ├── productsans_regular.ttf
│ │ ├── productsans_thin.ttf
│ │ └── productsans_thinitalic.ttf
│ │ ├── layout
│ │ ├── .idea
│ │ │ ├── .gitignore
│ │ │ ├── misc.xml
│ │ │ ├── modules.xml
│ │ │ └── vcs.xml
│ │ ├── activity_main.xml
│ │ ├── bottom_preview.xml
│ │ ├── bottom_selection_dialog.xml
│ │ ├── browse_list_compact.xml
│ │ ├── chapter_select_dialog.xml
│ │ ├── checkmark_select_dialog.xml
│ │ ├── color_round_checkmark.xml
│ │ ├── custom_toolbar.xml
│ │ ├── download_result_compact.xml
│ │ ├── download_result_grid.xml
│ │ ├── filter_bottom_sheet.xml
│ │ ├── font_bottom_sheet.xml
│ │ ├── fragment_downloads.xml
│ │ ├── fragment_history.xml
│ │ ├── fragment_home.xml
│ │ ├── fragment_mainpage.xml
│ │ ├── fragment_result.xml
│ │ ├── fragment_search.xml
│ │ ├── history_result_compact.xml
│ │ ├── home_episodes_expanded.xml
│ │ ├── home_result_grid.xml
│ │ ├── homepage_parent.xml
│ │ ├── image_layout.xml
│ │ ├── loading_bottom.xml
│ │ ├── loading_downloads.xml
│ │ ├── loading_episode.xml
│ │ ├── loading_line.xml
│ │ ├── loading_line_short.xml
│ │ ├── loading_line_short2.xml
│ │ ├── loading_line_short_center.xml
│ │ ├── loading_list.xml
│ │ ├── loading_poster.xml
│ │ ├── loading_poster_dynamic.xml
│ │ ├── loading_review.xml
│ │ ├── read_bottom_settings.xml
│ │ ├── read_main.xml
│ │ ├── result_review.xml
│ │ ├── result_review_tag.xml
│ │ ├── result_tag.xml
│ │ ├── search_result_compact.xml
│ │ ├── search_result_grid.xml
│ │ ├── search_result_super_compact.xml
│ │ ├── simple_chapter.xml
│ │ ├── single_failed.xml
│ │ ├── single_finished_chapter.xml
│ │ ├── single_image.xml
│ │ ├── single_load.xml
│ │ ├── single_loading.xml
│ │ ├── single_overscroll_chapter.xml
│ │ ├── single_text.xml
│ │ ├── sort_bottom_sheet.xml
│ │ ├── sort_bottom_single_choice.xml
│ │ ├── sort_bottom_single_choice_down.xml
│ │ ├── sort_bottom_single_choice_up.xml
│ │ ├── spinner_select_dialog.xml
│ │ ├── toast.xml
│ │ └── viewpager_page.xml
│ │ ├── menu
│ │ ├── bottom_nav_menu.xml
│ │ ├── download_actionbar.xml
│ │ ├── history_actionbar.xml
│ │ ├── home_actionbar.xml
│ │ ├── mainpage_actionbar.xml
│ │ └── sleep_timer.xml
│ │ ├── mipmap-anydpi-v26
│ │ ├── ic_launcher.xml
│ │ └── ic_launcher_round.xml
│ │ ├── mipmap-hdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-mdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── mipmap-xxxhdpi
│ │ ├── ic_launcher.png
│ │ └── ic_launcher_round.png
│ │ ├── navigation
│ │ └── mobile_navigation.xml
│ │ ├── raw
│ │ └── dummy_sound_500ms.mp3
│ │ ├── values-tr
│ │ └── strings.xml
│ │ ├── values
│ │ ├── array.xml
│ │ ├── attrs.xml
│ │ ├── colors.xml
│ │ ├── dimens.xml
│ │ ├── ic_launcher_background.xml
│ │ ├── strings.xml
│ │ └── styles.xml
│ │ └── xml
│ │ ├── provider_paths.xml
│ │ └── settings.xml
│ └── test
│ └── java
│ └── com
│ └── example
│ └── quicknovel
│ └── ExampleUnitTest.kt
├── build.gradle
├── gradle.properties
├── gradle
└── wrapper
│ ├── gradle-wrapper.jar
│ └── gradle-wrapper.properties
├── gradlew
├── gradlew.bat
└── settings.gradle
/.github/downloads.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/.github/downloads.jpg
--------------------------------------------------------------------------------
/.github/home.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/.github/home.jpg
--------------------------------------------------------------------------------
/.github/reader.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/.github/reader.jpg
--------------------------------------------------------------------------------
/.github/result.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/.github/result.jpg
--------------------------------------------------------------------------------
/.github/search.jpg:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/.github/search.jpg
--------------------------------------------------------------------------------
/.github/workflows/build.yml:
--------------------------------------------------------------------------------
1 | name: Build App
2 |
3 | on:
4 | push:
5 | branches:
6 | - '*'
7 |
8 | jobs:
9 | check_wrapper:
10 | name: Validate Gradle Wrapper
11 | runs-on: ubuntu-latest
12 |
13 | steps:
14 | - name: Clone repo
15 | uses: actions/checkout@v2
16 |
17 | - name: Validate Gradle Wrapper
18 | uses: gradle/wrapper-validation-action@v1
19 |
20 | build:
21 | name: Build app
22 | needs: check_wrapper
23 | runs-on: ubuntu-latest
24 |
25 | steps:
26 | - name: Cancel previous runs
27 | uses: styfle/cancel-workflow-action@0.5.0
28 | with:
29 | access_token: ${{ secrets.GITHUB_TOKEN }}
30 |
31 | - name: Clone repo
32 | uses: actions/checkout@v2
33 |
34 | - name: Set up JDK 11
35 | uses: actions/setup-java@v1
36 | with:
37 | java-version: 11
38 |
39 | - name: Build app
40 | uses: eskatos/gradle-command-action@v1
41 | with:
42 | arguments: assembleRelease
43 | wrapper-cache-enabled: true
44 | dependencies-cache-enabled: true
45 | configuration-cache-enabled: true
46 |
47 | - name: Rename app
48 | run: |
49 | cd app/build/outputs/apk/release
50 | mv app-release-unsigned.apk QuickNovel.apk
51 | - name: Upload Artifact
52 | uses: actions/upload-artifact@v2
53 | with:
54 | name: QuickNovel
55 | path: app/build/outputs/apk/release/QuickNovel.apk
56 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /local.properties
4 | /.idea/caches
5 | /.idea/libraries
6 | /.idea/modules.xml
7 | /.idea/workspace.xml
8 | /.idea/navEditor.xml
9 | /.idea/assetWizardSettings.xml
10 | /.idea/deploymentTargetSelector.xml
11 | /.idea/kotlinc.xml
12 | /.idea/misc.xml
13 | .DS_Store
14 | /build
15 | /captures
16 | .externalNativeBuild
17 | .cxx
18 |
--------------------------------------------------------------------------------
/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/.idea/codeStyles/Project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/.idea/codeStyles/codeStyleConfig.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/.idea/compiler.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/.idea/gradle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
19 |
20 |
--------------------------------------------------------------------------------
/.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 |
--------------------------------------------------------------------------------
/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2021 Osten
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # QuickNovel
2 | Adfree FOSS Android app for downloading novels. It also functions as an Epub reader.
3 |
4 | **Discord:** https://discord.gg/5Hus6fM
5 |
6 | **Download:** https://github.com/LagradOst/QuickNovel/releases
7 |
8 | **Providers used:**
9 |
10 | - https://allnovel.org
11 | - https://annas-archive.org
12 | - https://bestlightnovel.com
13 | - https://freewebnovel.com
14 | - https://graycity.net
15 | - https://hiraethtranslation.com
16 | - https://indowebnovel.id
17 | - https://kolnovel.com
18 | - https://libread.com
19 | - https://meionovels.com
20 | - https://risenovel.com
21 | - https://www.mtlnovels.com
22 | - https://novelbin.com
23 | - https://novelfull.com
24 | - https://novelsonline.org
25 | - https://pawread.com
26 | - https://readfrom.net
27 | - https://readnovelfull.com
28 | - https://www.royalroad.com
29 | - https://sakuranovel.id
30 | - https://www.scribblehub.com
31 | - https://wtr-lab.com
32 |
33 | **Screenshoots:**
34 |
35 | 



36 |
37 | **Legal notice:**
38 |
39 | Any legal issues regarding the content on this application should be taken up with the actual file hosts and providers themselves as we are not affiliated with them.
40 |
41 | In case of copyright infringement, please directly contact the responsible parties or the streaming websites.
42 |
43 | The app is purely for educational and personal use.
44 |
45 | QuickNovel does not host any content on the app, and has no control over what media is put up or taken down. QuickNovel functions like any other search engine, such as Google. QuickNovel does not host, upload or manage any videos, films or content. It simply crawls, aggregates and displayes links in a convenient, user-friendly interface.
46 |
47 | It merely scrapes 3rd-party websites that are publicly accessable via any regular web browser. It is the responsibility of user to avoid any actions that might violate the laws governing his/her locality. Use QuickNovel at your own risk.
48 |
49 |
--------------------------------------------------------------------------------
/app/.gitignore:
--------------------------------------------------------------------------------
1 | /build
--------------------------------------------------------------------------------
/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/app/src/androidTest/java/com/example/quicknovel/ExampleInstrumentedTest.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel
2 |
3 | import androidx.test.platform.app.InstrumentationRegistry
4 | import androidx.test.ext.junit.runners.AndroidJUnit4
5 |
6 | import org.junit.Test
7 | import org.junit.runner.RunWith
8 |
9 | import org.junit.Assert.*
10 |
11 | /**
12 | * Instrumented test, which will execute on an Android device.
13 | *
14 | * See [testing documentation](http://d.android.com/tools/testing).
15 | */
16 | @RunWith(AndroidJUnit4::class)
17 | class ExampleInstrumentedTest {
18 | @Test
19 | fun useAppContext() {
20 | // Context of the app under test.
21 | val appContext = InstrumentationRegistry.getInstrumentation().targetContext
22 | assertEquals("com.lagradost.quicknovel", appContext.packageName)
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/ic_launcher-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/ic_launcher-playstore.png
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/FontAdapter.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel
2 |
3 | import android.content.Context
4 | import android.graphics.Typeface
5 | import android.view.LayoutInflater
6 | import android.view.View
7 | import android.view.ViewGroup
8 | import android.widget.BaseAdapter
9 | import android.widget.TextView
10 | import com.lagradost.quicknovel.util.UIHelper.parseFontFileName
11 | import java.io.File
12 |
13 | class FontAdapter(val context: Context, private val checked: Int?, private val fonts: ArrayList) : BaseAdapter() {
14 | override fun getCount(): Int {
15 | return fonts.size
16 | }
17 |
18 | override fun getItem(position: Int): Any {
19 | return fonts[position] ?: 0
20 | }
21 |
22 | override fun getItemId(position: Int): Long {
23 | return fonts[position]?.name?.hashCode()?.toLong() ?: 0
24 | }
25 |
26 | override fun getView(position: Int, convertView: View?, parent: ViewGroup?): View {
27 | val view =
28 | (convertView ?: LayoutInflater.from(context)
29 | .inflate(R.layout.sort_bottom_single_choice, parent, false)) as TextView
30 |
31 | val font = fonts[position]
32 | view.text = parseFontFileName(font?.name)
33 | view.isSelected = position == checked
34 | if (font != null) {
35 | view.typeface = Typeface.createFromFile(font)
36 | }
37 | return view
38 | }
39 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/extractors/LibgenLi.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.extractors
2 |
3 | import androidx.annotation.WorkerThread
4 | import com.lagradost.quicknovel.DownloadExtractLink
5 | import com.lagradost.quicknovel.DownloadLink
6 | import com.lagradost.quicknovel.DownloadLinkType
7 | import com.lagradost.quicknovel.get
8 |
9 | class LibgenLi : ExtractorApi() {
10 | override val mainUrl = "https://libgen.li"
11 | override val name = "LibgenLi"
12 | override val requiresReferer = false
13 |
14 | @WorkerThread
15 | override suspend fun getUrl(link : DownloadExtractLink): List? {
16 | val document = link.get().document
17 | val url = fixUrlNull(document.selectFirst("tbody>tr>td>a")?.attr("href"))
18 | return listOf(
19 | DownloadLink(
20 | url = url ?: return null,
21 | name = name,
22 | kbPerSec = 200
23 | )
24 | )
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/providers/IndoWebNovelProvider.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.providers
2 |
3 | import com.lagradost.quicknovel.R
4 |
5 | class IndoWebNovelProvider : WPReader() {
6 | override val name = "IndoWebNovel"
7 | override val mainUrl = "https://indowebnovel.id"
8 | override val iconId = R.drawable.ic_indowebnovel
9 | }
10 |
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/providers/MeioNovelProvider.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.providers
2 |
3 | import com.lagradost.quicknovel.R
4 |
5 | /*
6 | // https://boxnovel.com/
7 | // https://morenovel.net/
8 | // https://meionovel.id/
9 | */
10 | class MeioNovelProvider : BoxNovelProvider() {
11 | override val name = "MeioNovel"
12 | override val mainUrl = "https://meionovels.com"
13 | override val iconId = R.drawable.ic_meionovel
14 | override val iconBackgroundId = R.color.colorPrimaryBlue
15 | }
16 |
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/providers/MoreNovelProvider.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.providers
2 |
3 | import com.lagradost.quicknovel.*
4 |
5 | class MoreNovelProvider : BoxNovelProvider() {
6 | override val name = "MoreNovel"
7 | override val mainUrl = "https://risenovel.com" // domain change
8 | override val iconId = R.drawable.ic_morenovel
9 | override val mainCategories = listOf(
10 | "All" to "",
11 | "Novel Korea" to "korean",
12 | "Novel China" to "chinese",
13 | "Novel Jepang" to "japanese",
14 | "Novel Philipina" to "philippines"
15 | )
16 |
17 | override val tags = listOf(
18 | "All" to "",
19 | "Fantasy" to "fantasy",
20 | "Martial Arts" to "martial-arts",
21 | "Xuanhuan" to "xuanhuan",
22 | "Xianxia" to "xianxia",
23 | "Wuxia" to "wuxia",
24 | "Action" to "action",
25 | "Adventure" to "adventure",
26 | "Comedy" to "comedy",
27 | "Drama" to "drama",
28 | "Ecchi" to "ecchi",
29 | "Harem" to "harem",
30 | "Gender Bender" to "gender-bender",
31 | "Historical" to "historical",
32 | "Horror" to "horror",
33 | "Josei" to "josei",
34 | "Mature" to "mature",
35 | "Mecha" to "mecha",
36 | "Mystery" to "mystery",
37 | "Psychological" to "psychological",
38 | "Romance" to "romance",
39 | "Sci-fi" to "sci-fi",
40 | "Seinen" to "seinen",
41 | "School Life" to "school-life",
42 | "Shoujo" to "shoujo",
43 | "Shoujo Ai" to "shoujo-ai",
44 | "Shounen" to "shounen",
45 | "Shounen Ai" to "shounen-ai",
46 | "Slice of Life" to "slice-of-life",
47 | "Sports" to "sports",
48 | "Supernatural" to "supernatural",
49 | "Tragedy" to "tragedy",
50 | "Yaoi" to "yaoi",
51 | "Yuri" to "yuri",
52 | )
53 | }
54 |
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/providers/SakuraNovelProvider.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.providers
2 |
3 | import com.lagradost.quicknovel.*
4 |
5 | class SakuraNovelProvider : WPReader() {
6 | override val name = "SakuraNovel"
7 | override val mainUrl = "https://sakuranovel.id"
8 | override val iconId = R.drawable.ic_sakuranovel
9 | override val tags = listOf(
10 | "All" to "",
11 | "Action" to "action",
12 | "Adult" to "adult",
13 | "Adventure" to "adventure",
14 | "Comedy" to "comedy",
15 | "Drama" to "drama",
16 | "Ecchi" to "ecchi",
17 | "Fantasy" to "fantasy",
18 | "Gender Bender" to "gender-bender",
19 | "Harem" to "harem",
20 | "Historical" to "historical",
21 | "Horror" to "horror",
22 | "Martial Arts" to "martial-arts",
23 | "Mature" to "mature",
24 | "Mecha" to "mecha",
25 | "Mystery" to "mystery",
26 | "Psychological" to "psychological",
27 | "Romance" to "romance",
28 | "School Life" to "school-life",
29 | "Sci-fi" to "sci-fi",
30 | "Seinen" to "seinen",
31 | "Shoujo" to "shoujo",
32 | "Shounen" to "shounen",
33 | "Slice of Life" to "slice-of-life",
34 | "Supernatural" to "supernatural",
35 | "Tragedy" to "tragedy",
36 | )
37 | }
38 |
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/receivers/BecomingNoisyReceiver.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.receivers
2 |
3 | import android.content.BroadcastReceiver
4 | import android.content.Context
5 | import android.content.Intent
6 | import android.media.AudioManager
7 | import com.lagradost.quicknovel.ReadActivity2
8 | import com.lagradost.quicknovel.TTSHelper
9 |
10 | class BecomingNoisyReceiver : BroadcastReceiver() {
11 | override fun onReceive(context: Context, intent: Intent) {
12 | if (intent.action == AudioManager.ACTION_AUDIO_BECOMING_NOISY) {
13 |
14 | /*if (ReadActivity.readActivity.ttsStatus == ReadActivity.TTSStatus.IsRunning) {
15 | ReadActivity.readActivity.isTTSPaused = true
16 | }*/
17 | ReadActivity2.readActivity?.parseAction(TTSHelper.TTSActionType.Pause)
18 | }
19 | }
20 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/services/DownloadService.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.services
2 |
3 | import android.app.IntentService
4 | import android.content.Intent
5 | import com.lagradost.quicknovel.BookDownloader2
6 | import com.lagradost.quicknovel.DownloadActionType
7 |
8 | class DownloadService : IntentService("DownloadService") {
9 | override fun onHandleIntent(intent: Intent?) {
10 | if (intent != null) {
11 | val id = intent.getIntExtra("id", -1)
12 | val type = intent.getStringExtra("type")
13 | if (id != -1 && type != null) {
14 | val action = when(type) {
15 | "resume" -> DownloadActionType.Resume
16 | "pause" -> DownloadActionType.Pause
17 | "stop" -> DownloadActionType.Stop
18 | else -> null
19 | }
20 |
21 | if(action != null)
22 | BookDownloader2.addPendingAction(id, action)
23 | }
24 | }
25 | }
26 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/services/TTSPauseService.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.services
2 |
3 | import android.app.IntentService
4 | import android.content.Intent
5 | import com.lagradost.quicknovel.ReadActivity2
6 | import com.lagradost.quicknovel.TTSHelper
7 |
8 | class TTSPauseService : IntentService("TTSPauseService") {
9 | override fun onHandleIntent(intent: Intent?) {
10 | if (intent != null) {
11 | val id = intent.getIntExtra("id", -1)
12 |
13 | when (id) {
14 | TTSHelper.TTSActionType.Pause.ordinal -> {
15 | TTSHelper.TTSActionType.Pause
16 | }
17 | TTSHelper.TTSActionType.Resume.ordinal -> {
18 | TTSHelper.TTSActionType.Resume
19 | }
20 | TTSHelper.TTSActionType.Stop.ordinal -> {
21 | TTSHelper.TTSActionType.Stop
22 | }
23 | else -> null
24 | }?.let { action ->
25 | ReadActivity2.readActivity?.parseAction(action)
26 | }
27 | /*
28 | when (id) {
29 | TTSActionType.Pause.ordinal -> {
30 | ReadActivity.readActivity.isTTSPaused = true
31 | }
32 | TTSActionType.Resume.ordinal -> {
33 | ReadActivity.readActivity.isTTSPaused = false
34 | }
35 | TTSActionType.Stop.ordinal -> {
36 | ReadActivity.readActivity.stopTTS()
37 | }
38 | }*/
39 | }
40 | }
41 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/NonFinalAdapterListUpdateCallback.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui
2 |
3 | import android.annotation.SuppressLint
4 | import androidx.recyclerview.widget.DiffUtil
5 | import androidx.recyclerview.widget.ListUpdateCallback
6 | import androidx.recyclerview.widget.RecyclerView
7 |
8 |
9 | /**
10 | * ListUpdateCallback that dispatches update events to the given adapter.
11 | *
12 | * @see DiffUtil.DiffResult.dispatchUpdatesTo
13 | */
14 | open class NonFinalAdapterListUpdateCallback
15 | /**
16 | * Creates an AdapterListUpdateCallback that will dispatch update events to the given adapter.
17 | *
18 | * @param mAdapter The Adapter to send updates to.
19 | */(private var mAdapter: RecyclerView.Adapter<*>) :
20 | ListUpdateCallback {
21 |
22 | override fun onInserted(position: Int, count: Int) {
23 | mAdapter.notifyItemRangeInserted(position, count)
24 | }
25 |
26 | override fun onRemoved(position: Int, count: Int) {
27 | mAdapter.notifyItemRangeRemoved(position, count)
28 | }
29 |
30 | override fun onMoved(fromPosition: Int, toPosition: Int) {
31 | mAdapter.notifyItemMoved(fromPosition, toPosition)
32 | }
33 |
34 | @SuppressLint("UnknownNullness") // b/240775049: Cannot annotate properly
35 | override fun onChanged(position: Int, count: Int, payload: Any?) {
36 | mAdapter.notifyItemRangeChanged(position, count, payload)
37 | }
38 | }
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/OrientationType.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui
2 |
3 | import android.content.pm.ActivityInfo
4 | import androidx.annotation.DrawableRes
5 | import androidx.annotation.StringRes
6 | import com.lagradost.quicknovel.R
7 |
8 | enum class OrientationType(val prefValue: Int, val flag: Int, @StringRes val stringRes: Int, @DrawableRes val iconRes: Int) {
9 | DEFAULT(0, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.default_text, R.drawable.ic_baseline_screen_rotation_24),
10 | FREE(1, ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED, R.string.rotation_free, R.drawable.ic_baseline_screen_rotation_24),
11 | PORTRAIT(2, ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT, R.string.rotation_portrait, R.drawable.ic_baseline_stay_current_portrait_24),
12 | LANDSCAPE(3, ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE, R.string.rotation_landscape, R.drawable.ic_baseline_stay_current_landscape_24),
13 | LOCKED_PORTRAIT(4, ActivityInfo.SCREEN_ORIENTATION_PORTRAIT, R.string.rotation_force_portrait, R.drawable.ic_baseline_screen_lock_portrait_24),
14 | LOCKED_LANDSCAPE(5, ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE, R.string.rotation_force_landscape, R.drawable.ic_baseline_screen_lock_landscape_24);
15 |
16 | companion object {
17 | fun fromSpinner(position: Int?) = values().find { value -> value.prefValue == position } ?: DEFAULT
18 | }
19 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/ReadType.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui
2 |
3 | import androidx.annotation.StringRes
4 | import com.lagradost.quicknovel.R
5 |
6 | enum class ReadType(val prefValue: Int, @StringRes val stringRes: Int) {
7 | NONE(0, R.string.type_none),
8 | PLAN_TO_READ(1, R.string.type_plan_to_read),
9 | DROPPED(2, R.string.type_dropped),
10 | COMPLETED(3, R.string.type_completed),
11 | ON_HOLD(4, R.string.type_on_hold),
12 | READING(5, R.string.type_reading);
13 |
14 | companion object {
15 | fun fromSpinner(position: Int?) = values().find { value -> value.prefValue == position } ?: NONE
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/ReadingType.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui
2 |
3 | import android.content.pm.ActivityInfo
4 | import androidx.annotation.DrawableRes
5 | import androidx.annotation.StringRes
6 | import com.lagradost.quicknovel.R
7 |
8 | enum class ReadingType(val prefValue: Int, @StringRes val stringRes: Int) {
9 | DEFAULT(0, R.string.default_text),
10 | INF_SCROLL(1, R.string.inf_scroll),
11 | BTT_SCROLL(2, R.string.button_scroll),
12 | OVERSCROLL_SCROLL(3, R.string.overscroll_scroll);
13 |
14 | companion object {
15 | fun fromSpinner(position: Int?) = values().find { value -> value.prefValue == position } ?: DEFAULT
16 | }
17 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/TextImageView.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui
2 |
3 | import android.content.Context
4 | import android.util.AttributeSet
5 |
6 | class TextImageView : androidx.appcompat.widget.AppCompatImageView {
7 | constructor(context: Context) : super(context)
8 |
9 | internal constructor(c: Context, attrs: AttributeSet?) : super(c, attrs)
10 |
11 | var url : String? = null
12 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/home/BrowseAdapter2.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui.home
2 |
3 | import android.view.LayoutInflater
4 | import android.view.ViewGroup
5 | import androidx.core.content.ContextCompat
6 | import androidx.recyclerview.widget.DiffUtil
7 | import androidx.recyclerview.widget.ListAdapter
8 | import androidx.recyclerview.widget.RecyclerView
9 | import com.lagradost.quicknovel.CommonActivity.activity
10 | import com.lagradost.quicknovel.MainAPI
11 | import com.lagradost.quicknovel.MainActivity.Companion.navigate
12 | import com.lagradost.quicknovel.R
13 | import com.lagradost.quicknovel.databinding.BrowseListCompactBinding
14 | import com.lagradost.quicknovel.ui.mainpage.MainPageFragment
15 |
16 | class BrowseAdapter2 : ListAdapter(DiffCallback()) {
17 | override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): BrowseAdapter2Holder {
18 | val binding = BrowseListCompactBinding.inflate(LayoutInflater.from(parent.context),parent,false)
19 | return BrowseAdapter2Holder(binding)
20 | }
21 |
22 | override fun onBindViewHolder(holder: BrowseAdapter2Holder, position: Int) {
23 | val currentItem = getItem(position)
24 | holder.bind(currentItem)
25 | }
26 |
27 | class BrowseAdapter2Holder(private val binding : BrowseListCompactBinding) : RecyclerView.ViewHolder(binding.root) {
28 | fun bind(api : MainAPI) {
29 | binding.apply {
30 | browseText.text = api.name
31 | api.iconId?.let { browseIcon.setImageResource(it) }
32 | browseIconBackground.setCardBackgroundColor(ContextCompat.getColor(browseIconBackground.context, api.iconBackgroundId))
33 | browseBackground.setOnClickListener {
34 | activity?.navigate(R.id.global_to_navigation_mainpage,MainPageFragment.newInstance(api.name))
35 | }
36 | }
37 | }
38 | }
39 |
40 | class DiffCallback : DiffUtil.ItemCallback() {
41 | override fun areItemsTheSame(oldItem: MainAPI, newItem: MainAPI): Boolean = oldItem.name == newItem.name
42 | override fun areContentsTheSame(oldItem: MainAPI, newItem: MainAPI): Boolean = oldItem.name == newItem.name
43 | }
44 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/home/HomeFragment.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui.home
2 |
3 | import android.content.res.Configuration
4 | import android.os.Bundle
5 | import android.view.LayoutInflater
6 | import android.view.View
7 | import android.view.ViewGroup
8 | import androidx.fragment.app.Fragment
9 | import androidx.fragment.app.viewModels
10 | import androidx.recyclerview.widget.GridLayoutManager
11 | import com.lagradost.quicknovel.databinding.FragmentHomeBinding
12 | import com.lagradost.quicknovel.mvvm.observe
13 | import com.lagradost.quicknovel.util.UIHelper.fixPaddingStatusbar
14 |
15 | class HomeFragment : Fragment() {
16 | lateinit var binding: FragmentHomeBinding
17 | private val viewModel: HomeViewModel by viewModels()
18 |
19 | override fun onCreateView(
20 | inflater: LayoutInflater,
21 | container: ViewGroup?,
22 | savedInstanceState: Bundle?,
23 | ): View {
24 | binding = FragmentHomeBinding.inflate(inflater)
25 | return binding.root
26 | }
27 |
28 | private fun setupGridView() {
29 | val compactView = false
30 | val spanCountLandscape = if (compactView) 2 else 6
31 | val spanCountPortrait = if (compactView) 1 else 3
32 | val orientation = resources.configuration.orientation
33 | if (orientation == Configuration.ORIENTATION_LANDSCAPE) {
34 | binding.homeBrowselist.spanCount = spanCountLandscape
35 | } else {
36 | binding.homeBrowselist.spanCount = spanCountPortrait
37 | }
38 | }
39 |
40 | override fun onConfigurationChanged(newConfig: Configuration) {
41 | super.onConfigurationChanged(newConfig)
42 | setupGridView()
43 | }
44 |
45 | override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
46 | setupGridView()
47 | val browseAdapter = BrowseAdapter2()
48 | binding.homeBrowselist.apply {
49 | adapter = browseAdapter
50 | // layoutManager = GridLayoutManager(context, 1)
51 | setHasFixedSize(true)
52 | }
53 |
54 | observe(viewModel.homeApis) { list ->
55 | browseAdapter.submitList(list)
56 | }
57 |
58 | activity?.fixPaddingStatusbar(binding.homeToolbar)
59 | }
60 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/home/HomeViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui.home
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.lagradost.quicknovel.MainAPI
7 | import com.lagradost.quicknovel.util.Apis
8 | import com.lagradost.quicknovel.util.Apis.Companion.getApiProviderLangSettings
9 |
10 | class HomeViewModel : ViewModel() {
11 | val homeApis: LiveData> by lazy {
12 | MutableLiveData(
13 | let {
14 | val langs = getApiProviderLangSettings()
15 | Apis.apis.filter { api -> api.hasMainPage && (langs.contains(api.lang)) }
16 | }
17 | )
18 | }
19 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/ui/mainpage/MainPageRepository.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.ui.mainpage
2 |
3 | import com.lagradost.quicknovel.APIRepository
4 | import com.lagradost.quicknovel.HeadMainPageResponse
5 | import com.lagradost.quicknovel.MainAPI
6 | import com.lagradost.quicknovel.SearchResponse
7 | import com.lagradost.quicknovel.mvvm.Resource
8 | import com.lagradost.quicknovel.mvvm.safeApiCall
9 |
10 | class MainPageRepository(val api: APIRepository) {
11 | suspend fun loadMainPage(
12 | page: Int,
13 | mainCategory: Int?,
14 | orderBy: Int?,
15 | tag: Int?,
16 | ): Resource {
17 | return api.loadMainPage(
18 | page,
19 | if (mainCategory != null && api.mainCategories.size > mainCategory) api.mainCategories[mainCategory].second else null,
20 | if (orderBy != null && api.orderBys.size > orderBy) api.orderBys[orderBy].second else null,
21 | if (tag != null && api.tags.size > tag) api.tags[tag].second else null
22 | )
23 | }
24 |
25 | suspend fun search(query: String): Resource> {
26 | return api.search(query)
27 | }
28 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/AppUtils.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import com.fasterxml.jackson.databind.DeserializationFeature
4 | import com.fasterxml.jackson.databind.ObjectMapper
5 | import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper
6 | import com.fasterxml.jackson.module.kotlin.readValue
7 | import java.io.Reader
8 |
9 | object AppUtils {
10 | val mapper: ObjectMapper = jacksonObjectMapper().configure(
11 | DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES,
12 | false
13 | )
14 |
15 | /** Any object as json string */
16 | fun Any.toJson(): String {
17 | if (this is String) return this
18 | return mapper.writeValueAsString(this)
19 | }
20 |
21 | inline fun parseJson(value: String): T {
22 | return mapper.readValue(value)
23 | }
24 |
25 | inline fun parseJson(reader: Reader, valueType: Class): T {
26 | return mapper.readValue(reader, valueType)
27 | }
28 |
29 | inline fun tryParseJson(value: String?): T? {
30 | return try {
31 | parseJson(value ?: return null)
32 | } catch (_: Exception) {
33 | null
34 | }
35 | }
36 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/Coroutines.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import android.os.Handler
4 | import android.os.Looper
5 | import com.lagradost.quicknovel.mvvm.launchSafe
6 | import com.lagradost.quicknovel.mvvm.logError
7 | import kotlinx.coroutines.*
8 | import java.util.Collections
9 |
10 | object Coroutines {
11 | fun T.main(work: suspend ((T) -> Unit)): Job {
12 | val value = this
13 | return CoroutineScope(Dispatchers.Main).launchSafe {
14 | work(value)
15 | }
16 | }
17 |
18 | fun T.ioSafe(work: suspend (CoroutineScope.(T) -> Unit)): Job {
19 | val value = this
20 |
21 | return CoroutineScope(Dispatchers.IO).launchSafe {
22 | work(value)
23 | }
24 | }
25 |
26 | suspend fun V.ioWorkSafe(work: suspend (CoroutineScope.(V) -> T)): T? {
27 | val value = this
28 | return withContext(Dispatchers.IO) {
29 | try {
30 | work(value)
31 | } catch (e: Exception) {
32 | logError(e)
33 | null
34 | }
35 | }
36 | }
37 |
38 | suspend fun V.ioWork(work: suspend (CoroutineScope.(V) -> T)): T {
39 | val value = this
40 | return withContext(Dispatchers.IO) {
41 | work(value)
42 | }
43 | }
44 |
45 | suspend fun V.mainWork(work: suspend (CoroutineScope.(V) -> T)): T {
46 | val value = this
47 | return withContext(Dispatchers.Main) {
48 | work(value)
49 | }
50 | }
51 |
52 | fun runOnMainThread(work: (() -> Unit)) {
53 | val mainHandler = Handler(Looper.getMainLooper())
54 | mainHandler.post {
55 | work()
56 | }
57 | }
58 |
59 | /**
60 | * Safe to add and remove how you want
61 | * If you want to iterate over the list then you need to do:
62 | * synchronized(allProviders) { code here }
63 | **/
64 | fun threadSafeListOf(vararg items: T): MutableList {
65 | return Collections.synchronizedList(items.toMutableList())
66 | }
67 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/Event.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | class Event {
4 | private val observers = mutableSetOf<(T) -> Unit>()
5 |
6 | operator fun plusAssign(observer: (T) -> Unit) {
7 | observers.add(observer)
8 | }
9 |
10 | operator fun minusAssign(observer: (T) -> Unit) {
11 | observers.remove(observer)
12 | }
13 |
14 | operator fun invoke(value: T) {
15 | for (observer in observers)
16 | observer(value)
17 | }
18 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/GlideApp.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import android.annotation.SuppressLint
4 | import android.content.Context
5 | import com.bumptech.glide.GlideBuilder
6 | import com.bumptech.glide.annotation.GlideModule
7 | import com.bumptech.glide.load.engine.DiskCacheStrategy
8 | import com.bumptech.glide.module.AppGlideModule
9 | import com.bumptech.glide.request.RequestOptions
10 | import com.bumptech.glide.signature.ObjectKey
11 |
12 | @GlideModule
13 | class GlideModule : AppGlideModule() {
14 | @SuppressLint("CheckResult")
15 | override fun applyOptions(context: Context, builder: GlideBuilder) {
16 | super.applyOptions(context, builder)
17 | builder.apply {
18 | RequestOptions()
19 | .diskCacheStrategy(DiskCacheStrategy.ALL)
20 | .signature(ObjectKey(System.currentTimeMillis().toShort()))
21 | }
22 | }
23 |
24 | // Needed for DOH
25 | // https://stackoverflow.com/a/61634041
26 | /*override fun registerComponents(context: Context, glide: Glide, registry: Registry) {
27 | val client =
28 | Requests().apply {
29 | defaultHeaders = mapOf("user-agent" to USER_AGENT)
30 | }.initClient(context)
31 | .newBuilder()
32 | .addInterceptor(DdosGuardKiller(false))
33 | .build()
34 |
35 | registry.replace(
36 | GlideUrl::class.java,
37 | InputStream::class.java,
38 | OkHttpUrlLoader.Factory(client)
39 | )
40 | super.registerComponents(context, glide, registry)
41 | }*/
42 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/ParCollections.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import kotlinx.coroutines.CoroutineScope
4 | import kotlinx.coroutines.DelicateCoroutinesApi
5 | import kotlinx.coroutines.GlobalScope
6 | import kotlinx.coroutines.async
7 | import kotlinx.coroutines.runBlocking
8 | import java.util.*
9 | import java.util.concurrent.ExecutorService
10 | import java.util.concurrent.Executors
11 | import java.util.concurrent.TimeUnit
12 | import kotlin.collections.ArrayList
13 |
14 | //https://stackoverflow.com/questions/34697828/parallel-operations-on-kotlin-collections
15 | fun Iterable.pmap(
16 | numThreads: Int = maxOf(Runtime.getRuntime().availableProcessors() - 2, 1),
17 | exec: ExecutorService = Executors.newFixedThreadPool(numThreads),
18 | transform: (T) -> R,
19 | ): List {
20 |
21 | // default size is just an inlined version of kotlin.collections.collectionSizeOrDefault
22 | val defaultSize = if (this is Collection<*>) this.size else 10
23 | val destination = Collections.synchronizedList(ArrayList(defaultSize))
24 |
25 | for (item in this) {
26 | exec.submit { destination.add(transform(item)) }
27 | }
28 |
29 | exec.shutdown()
30 | exec.awaitTermination(1, TimeUnit.DAYS)
31 |
32 | return ArrayList(destination)
33 | }
34 |
35 | fun List.apmap(f: suspend (A) -> B): List = runBlocking {
36 | map { async { f(it) } }.map { it.await() }
37 | }
38 |
39 | @OptIn(DelicateCoroutinesApi::class)
40 | suspend fun List.amap(f: suspend (A) -> B): List =
41 | with(CoroutineScope(GlobalScope.coroutineContext)) {
42 | map { async { f(it) } }.map { it.await() }
43 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/ResultCached.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import com.lagradost.quicknovel.ui.UiImage
4 | import com.lagradost.quicknovel.ui.img
5 |
6 | data class ResultCached(
7 | val source : String,
8 | val name: String,
9 | val apiName : String,
10 | val id : Int,
11 | val author : String?,
12 | val poster: String?,
13 | val tags : List?,
14 | val rating : Int?,
15 | val totalChapters : Int,
16 | val cachedTime : Long, // milliseconds
17 | val synopsis : String? = null
18 | ) {
19 | val image : UiImage? get() = img(poster)
20 |
21 | override fun hashCode(): Int {
22 | return id
23 | }
24 | }
--------------------------------------------------------------------------------
/app/src/main/java/com/lagradost/quicknovel/util/SettingsHelper.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel.util
2 |
3 | import android.content.Context
4 | import androidx.preference.PreferenceManager
5 | import com.lagradost.quicknovel.R
6 | import com.lagradost.quicknovel.util.SettingsHelper.getDownloadFormat
7 |
8 | object SettingsHelper {
9 | fun Context.getRatingReview(score: Int): String {
10 | val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
11 | return when (settingsManager.getString(getString(R.string.rating_format_key), "star")) {
12 | "star" -> "${score / 200}★"
13 | else -> "${(score / 100)}/10"
14 | }
15 | }
16 |
17 | fun Context.getRating(score: Int): String {
18 | val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
19 |
20 | return when (settingsManager.getString(getString(R.string.rating_format_key), "star")) {
21 | "point10" -> "${(score / 100)}/10"
22 | "point10d" -> "${"%.1f".format(score / 100f).replace(',', '.')}/10.0"
23 | "point100" -> "${score / 10}/100"
24 | else -> "%.2f".format(score.toFloat() / 200f).replace(',', '.') + "★" // star
25 | }
26 | }
27 |
28 | fun Context.getGridIsCompact(): Boolean {
29 | return getGridFormat() != "grid"
30 | }
31 |
32 | private fun Context.getGridFormat(): String {
33 | val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
34 | return settingsManager.getString(getString(R.string.grid_format_key), "grid")!!
35 | }
36 |
37 | private fun Context.getDownloadFormat(): String {
38 | val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
39 | return settingsManager.getString(getString(R.string.download_format_key), "list")!!
40 | }
41 |
42 | /*
43 | fun Context.setDownloadGridIsCompact( item : Int) {
44 | val settingsManager = PreferenceManager.getDefaultSharedPreferences(this)
45 |
46 | when(item) {
47 | 0 ->"normal"
48 | 1 -> "grid"
49 | else -> "normal"
50 | }
51 | }*/
52 |
53 | fun Context.getDownloadIsCompact(): Boolean {
54 | return getDownloadFormat() != "grid"
55 | }
56 |
57 | }
--------------------------------------------------------------------------------
/app/src/main/res/anim/enter_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/exit_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/nav_enter_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/nav_exit_anim.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/nav_pop_enter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/nav_pop_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/pop_enter.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/anim/pop_exit.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
13 |
14 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/color/check_selection_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/chip_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/chip_color_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/item_select_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/text_selection_color.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/color/white_transparent_toggle.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/background_shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_restore_page_24.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/baseline_save_as_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/big_icon_boxnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/big_icon_boxnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/big_icon_readlightnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/big_icon_readlightnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/big_icon_royalroad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/big_icon_royalroad.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/big_icon_wuxiaworldsite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/big_icon_wuxiaworldsite.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/bigger_font.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/checkmark_check.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/circle.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/circle_shape.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/circular_progress_bar_clockwise.xml:
--------------------------------------------------------------------------------
1 |
2 |
6 |
11 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/color_selection.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/color_selection_check.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/color_selection_outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/dialog__window_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_add_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/download_button_background.xml:
--------------------------------------------------------------------------------
1 |
3 | -
4 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/fiber_new_24px.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/format_padding_decrease_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/format_padding_increase_white_24dp.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_add_24.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_arrow_back_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_arrow_downward_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_arrow_forward_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_arrow_upward_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_autorenew_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_bookmark_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_bookmark_border_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_check_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_check_24_listview.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_cloud_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_code_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_collections_bookmark_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_color_lens_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_create_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_delete_outline_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_edit_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_fast_forward_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_fast_rewind_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_filter_list_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_font_download_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_grid_view_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_history_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_keyboard_arrow_down_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_language_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_list_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_menu_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_menu_book_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_more_vert_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_notifications_active_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_open_in_new_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_pause_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_play_arrow_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_public_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_screen_lock_landscape_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_screen_lock_portrait_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_screen_rotation_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_star_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_stay_current_landscape_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_stay_current_portrait_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_stop_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_system_update_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_tune_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_baseline_volume_up_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_blank_24.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_check_24.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_github_logo.xml:
--------------------------------------------------------------------------------
1 |
3 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_icon_monochrome.xml:
--------------------------------------------------------------------------------
1 |
6 |
11 |
15 |
18 |
22 |
25 |
26 |
27 |
28 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_indowebnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/ic_indowebnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
6 |
10 |
13 |
16 |
19 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_meionovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/ic_meionovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_morenovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/ic_morenovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_outline_explore_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_outline_settings_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_outline_share_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sakuranovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/ic_sakuranovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sharp_clear_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ic_sort_24dp.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon.xml:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_allnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_allnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_azynovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_azynovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_boxnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_boxnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_efremnet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_efremnet.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_engnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_engnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_freewebnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_freewebnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_hiraethtranslation.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_hiraethtranslation.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_kolnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_kolnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_libread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_libread.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_mnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_mnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_mtlnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_mtlnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_novelbin.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_novelbin.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_novelfull.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_novelfull.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_novelfullvip.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_novelfullvip.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_novelpassion.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_novelpassion.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_novelsonline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_novelsonline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_ranobes.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_ranobes.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_readfromnet.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_readfromnet.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_readlightnovel.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_readlightnovel.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_readlightnovel2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_readlightnovel2.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_readlightnovel3.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_readlightnovel3.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_readlightnovel4.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_readlightnovel4.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_rewayatar.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_rewayatar.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_royalroad.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_royalroad.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_royalroad2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_royalroad2.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_wuxiaworldonline.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_wuxiaworldonline.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/icon_wuxiaworldsite.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/icon_wuxiaworldsite.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/indicator_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/netflix_download.xml:
--------------------------------------------------------------------------------
1 |
8 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/netflix_pause.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/netflix_play.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nights_stay_24px.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nothing.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/nulldrawable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/outline.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/outline_drawable.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/outline_drawable_less.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/outline_less.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
5 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/pawread.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/drawable/pawread.png
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rddone.xml:
--------------------------------------------------------------------------------
1 |
9 |
14 |
19 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rderror.xml:
--------------------------------------------------------------------------------
1 |
9 |
14 |
19 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rdload.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rdpause.xml:
--------------------------------------------------------------------------------
1 |
9 |
14 |
19 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/ripple_regular.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/round_bg_button.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_dialog.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_text_bg.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_text_bg_left.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_text_bg_mid.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/rounded_text_bg_right.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 |
19 |
20 |
21 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_icon.xml:
--------------------------------------------------------------------------------
1 |
8 |
14 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/search_icon_white.xml:
--------------------------------------------------------------------------------
1 |
8 |
14 |
20 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/smaller_font.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/splash_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | -
5 |
6 |
7 | -
8 |
9 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/swipe_vertical_24px.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/tab_selector.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/text_top_bottom_margin.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/text_top_bottom_margin_expand.xml:
--------------------------------------------------------------------------------
1 |
8 |
13 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/title_shadow.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/translate_24px.xml:
--------------------------------------------------------------------------------
1 |
7 |
10 |
11 |
--------------------------------------------------------------------------------
/app/src/main/res/drawable/white_card.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/app/src/main/res/font/google_sans.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
8 |
12 |
13 |
17 |
18 |
22 |
23 |
27 |
28 |
32 |
33 |
37 |
41 |
42 |
46 |
50 |
51 |
55 |
59 |
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_black.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_black.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_blackitalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_blackitalic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_bold.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_bolditalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_bolditalic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_italic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_light.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_lightitalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_lightitalic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_medium.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_mediumitalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_mediumitalic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_regular.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_thin.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_thin.ttf
--------------------------------------------------------------------------------
/app/src/main/res/font/productsans_thinitalic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/font/productsans_thinitalic.ttf
--------------------------------------------------------------------------------
/app/src/main/res/layout/.idea/.gitignore:
--------------------------------------------------------------------------------
1 | # Default ignored files
2 | /shelf/
3 | /workspace.xml
4 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/.idea/misc.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/.idea/modules.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
7 |
8 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/.idea/vcs.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/activity_main.xml:
--------------------------------------------------------------------------------
1 |
2 |
10 |
11 |
15 |
16 |
19 |
20 |
34 |
35 |
45 |
46 |
47 |
48 |
49 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/chapter_select_dialog.xml:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/checkmark_select_dialog.xml:
--------------------------------------------------------------------------------
1 |
21 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/color_round_checkmark.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/custom_toolbar.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
13 |
14 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/font_bottom_sheet.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
22 |
23 |
31 |
32 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/fragment_home.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
14 |
15 |
26 |
27 |
28 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/home_episodes_expanded.xml:
--------------------------------------------------------------------------------
1 |
2 |
9 |
10 |
16 |
17 |
26 |
27 |
34 |
35 |
36 |
41 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/home_result_grid.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
15 |
16 |
24 |
25 |
33 |
34 |
48 |
49 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/homepage_parent.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
15 |
16 |
25 |
26 |
33 |
34 |
35 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/image_layout.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
10 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_bottom.xml:
--------------------------------------------------------------------------------
1 |
2 |
12 |
13 |
25 |
26 |
36 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_downloads.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
10 |
11 |
18 |
19 |
20 |
21 |
22 |
23 |
24 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_episode.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
10 |
11 |
16 |
17 |
23 |
24 |
31 |
32 |
33 |
34 |
35 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_line.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_line_short.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_line_short2.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_line_short_center.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_list.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
15 |
16 |
17 |
18 |
21 |
22 |
23 |
24 |
27 |
28 |
29 |
30 |
33 |
34 |
35 |
36 |
39 |
40 |
41 |
42 |
45 |
46 |
47 |
48 |
51 |
52 |
53 |
54 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_poster.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_poster_dynamic.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
9 |
10 |
15 |
16 |
28 |
29 |
30 |
31 |
37 |
38 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/loading_review.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
22 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/result_review_tag.xml:
--------------------------------------------------------------------------------
1 |
2 |
23 |
24 |
25 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/result_tag.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
25 |
26 |
27 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/search_result_grid.xml:
--------------------------------------------------------------------------------
1 |
2 |
13 |
14 |
23 |
24 |
32 |
33 |
34 |
35 |
51 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/simple_chapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
11 |
12 |
19 |
20 |
28 |
29 |
37 |
38 |
39 |
40 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_failed.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_finished_chapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_image.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_load.xml:
--------------------------------------------------------------------------------
1 |
2 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_loading.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
18 |
19 |
20 |
21 |
37 |
38 |
39 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_overscroll_chapter.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
25 |
26 |
43 |
44 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/single_text.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/sort_bottom_sheet.xml:
--------------------------------------------------------------------------------
1 |
2 |
8 |
9 |
22 |
23 |
30 |
31 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/sort_bottom_single_choice.xml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/sort_bottom_single_choice_down.xml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/sort_bottom_single_choice_up.xml:
--------------------------------------------------------------------------------
1 |
14 |
15 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/spinner_select_dialog.xml:
--------------------------------------------------------------------------------
1 |
14 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/toast.xml:
--------------------------------------------------------------------------------
1 |
11 |
12 |
18 |
19 |
20 |
--------------------------------------------------------------------------------
/app/src/main/res/layout/viewpager_page.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/bottom_nav_menu.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/download_actionbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/history_actionbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/home_actionbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/mainpage_actionbar.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/menu/sleep_timer.xml:
--------------------------------------------------------------------------------
1 |
2 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/app/src/main/res/raw/dummy_sound_500ms.mp3:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/app/src/main/res/raw/dummy_sound_500ms.mp3
--------------------------------------------------------------------------------
/app/src/main/res/values/attrs.xml:
--------------------------------------------------------------------------------
1 |
2 |
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 |
--------------------------------------------------------------------------------
/app/src/main/res/values/dimens.xml:
--------------------------------------------------------------------------------
1 |
2 |
17 |
18 | 2dp
19 | 0dp
20 | 7dp
21 | 0dp
22 | 24dp
23 |
24 | 4dp
25 | 16dp
26 | 16dp
27 |
28 | 15dp
29 | 3dp
30 | 15dp
31 | 2000
32 |
--------------------------------------------------------------------------------
/app/src/main/res/values/ic_launcher_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #000000
4 |
--------------------------------------------------------------------------------
/app/src/main/res/xml/provider_paths.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
6 |
9 |
12 |
15 |
18 |
19 |
--------------------------------------------------------------------------------
/app/src/test/java/com/example/quicknovel/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.lagradost.quicknovel
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | /**
8 | * Example local unit test, which will execute on the development machine (host).
9 | *
10 | * See [testing documentation](http://d.android.com/tools/testing).
11 | */
12 | class ExampleUnitTest {
13 | @Test
14 | fun addition_isCorrect() {
15 | assertEquals(4, 2 + 2)
16 | }
17 | }
--------------------------------------------------------------------------------
/build.gradle:
--------------------------------------------------------------------------------
1 | // Top-level build file where you can add configuration options common to all sub-projects/modules.
2 | buildscript {
3 | ext.kotlin_version = "1.9.23"
4 |
5 | repositories {
6 | google()
7 | jcenter()
8 | }
9 | dependencies {
10 | classpath 'com.android.tools.build:gradle:8.9.0'
11 | classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
12 | // NOTE: Do not place your application dependencies here; they belong
13 | // in the individual module build.gradle files
14 | }
15 | }
16 |
17 | allprojects {
18 | repositories {
19 | google()
20 | jcenter()
21 | }
22 | }
23 |
24 | task clean(type: Delete) {
25 | delete rootProject.buildDir
26 | }
--------------------------------------------------------------------------------
/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 | # Kotlin code style for this project: "official" or "obsolete":
21 | kotlin.code.style=official
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/LagradOst/QuickNovel/7461c149cb6facbe9f7c59d1f2a5d7680a8f1ce3/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.11.1-bin.zip
4 | networkTimeout=10000
5 | validateDistributionUrl=true
6 | zipStoreBase=GRADLE_USER_HOME
7 | zipStorePath=wrapper/dists
8 |
--------------------------------------------------------------------------------
/settings.gradle:
--------------------------------------------------------------------------------
1 | include ':app'
2 | rootProject.name = "QuickNovel"
--------------------------------------------------------------------------------