From b04c1d16e65db3faa8750fbb5de9de87f548ce8a Mon Sep 17 00:00:00 2001 From: Goodwy Date: Tue, 14 Feb 2023 18:57:31 +0300 Subject: [PATCH] v.1.9.7 --- .editorconfig | 13 +- .gitattributes | 2 + .github/ISSUE_TEMPLATE/bug.yml | 45 + .github/ISSUE_TEMPLATE/bug_report.md | 23 - .github/ISSUE_TEMPLATE/config.yml | 5 + .github/ISSUE_TEMPLATE/feature_request.md | 20 - .github/workflows/main.yml | 72 +- .gitignore | 1 - .idea/.gitignore | 9 +- .idea/assetWizardSettings.xml | 163 +- .idea/codeStyles/Project.xml | 113 +- .idea/codeStyles/codeStyleConfig.xml | 2 +- .idea/deploymentTargetDropDown.xml | 4 +- .idea/dictionaries/goodwy.xml | 2 + .idea/gradle.xml | 32 +- .idea/inspectionProfiles/Project_Default.xml | 1 + .idea/inspectionProfiles/ktlint.xml | 29 + .../inspectionProfiles/profiles_settings.xml | 6 + .idea/jarRepositories.xml | 15 - .idea/jsonSchemas.xml | 28 + .idea/misc.xml | 155 +- .idea/modules.xml | 18 - .tx/config | 31 +- Gemfile | 3 - PRIVACY.md | 72 +- app/.gitignore | 2 + app/build.gradle.kts | 275 +-- app/lint.xml | 28 - app/proguard.pro | 27 - .../assets/covers/Dream in a boat/cover.jpg | 3 + .../assets/covers/Dream in a boat/info.txt | 3 + .../assets/covers/Dream in a boat/proof.pdf | Bin 0 -> 131 bytes .../assets/covers/El Guitarrero/cover.jpg | 3 + .../assets/covers/El Guitarrero/info.txt | 3 + .../assets/covers/El Guitarrero/proof.pdf | Bin 0 -> 131 bytes .../assets/covers/Snakey/cover.jpg | 3 + .../androidTest/assets/covers/Snakey/info.txt | 3 + .../assets/covers/Snakey/proof.pdf | Bin 0 -> 131 bytes .../covers/The boy and the cave/cover.jpg | 3 + .../covers/The boy and the cave/info.txt | 3 + .../covers/The boy and the cave/proof.pdf | Bin 0 -> 131 bytes .../covers/The fabulous Geysha/cover.jpg | 3 + .../covers/The fabulous Geysha/info.txt | 3 + .../covers/The fabulous Geysha/proof.pdf | Bin 0 -> 131 bytes .../assets/covers/Treeman/cover.jpg | 3 + .../assets/covers/Treeman/info.txt | 3 + .../assets/covers/Treeman/proof.pdf | Bin 0 -> 131 bytes .../audiobook/misc/MediaAnalyzerTest.kt | 61 - .../misc/MediaAnalyzerInstrumentationTest.kt | 72 + .../voice/app/misc/ScreenshotCapture.kt | 191 ++ app/src/androidTest/res/raw/intact2.mp3 | Bin 2445446 -> 0 bytes app/src/main/AndroidManifest.xml | 202 +-- app/src/main/assets/themes/cyanea_themes.json | 67 - .../goodwy/audiobook/features/BaseActivity.kt | 58 - .../goodwy/audiobook/features/BookAdder.kt | 448 ----- .../audiobook/features/GalleryPicker.kt | 40 - .../goodwy/audiobook/features/MainActivity.kt | 313 ---- .../features/about/AboutController.kt | 200 --- .../features/about/AboutViewEffect.kt | 7 - .../features/about/AboutViewModel.kt | 29 - .../features/about/AboutViewState.kt | 7 - .../features/audio/LoudnessDialog.kt | 82 - .../bookCategory/BookCategoryAdapter.kt | 39 - .../bookCategory/BookCategoryController.kt | 174 -- .../BookCategoryItemDecoration.kt | 43 - .../bookCategory/BookCategoryViewModel.kt | 76 - .../bookOverview/BookOverviewController.kt | 442 ----- .../bookOverview/BookOverviewState.kt | 27 - .../bookOverview/BookOverviewViewModel.kt | 157 -- .../EditBookAuthorDialogController.kt | 60 - .../EditBookBottomSheetController.kt | 225 --- .../EditBookTitleDialogController.kt | 59 - .../bookOverview/EditCoverDialogController.kt | 130 -- .../features/bookOverview/GridMode.kt | 7 - .../bookOverview/list/BookOverviewAdapter.kt | 36 - .../bookOverview/list/BookOverviewClick.kt | 6 - .../bookOverview/list/BookOverviewDiff.kt | 20 - .../bookOverview/list/BookOverviewItem.kt | 93 - .../list/BookOverviewItemDecoration.kt | 59 - .../list/GridBookOverviewComponent.kt | 143 -- .../bookOverview/list/LoadBookCover.kt | 92 - .../list/header/BookOverviewHeader.kt | 40 - .../bookPlaying/BookPlayController.kt | 535 ------ .../bookPlaying/BookPlayViewEffect.kt | 6 - .../features/bookPlaying/BookPlayViewModel.kt | 165 -- .../features/bookPlaying/BookPlayViewState.kt | 38 - .../JumpToPositionDialogController.kt | 95 - .../bookPlaying/SeekDialogController.kt | 56 - .../bookPlaying/SeekRewindDialogController.kt | 56 - .../bookPlaying/SleepTimerDialogController.kt | 148 -- .../SleepTimerListDialogController.kt | 218 --- .../selectchapter/SelectChapterDialog.kt | 181 -- .../selectchapter/SelectChapterViewEffect.kt | 5 - .../selectchapter/SelectChapterViewModel.kt | 69 - .../selectchapter/SelectChapterViewState.kt | 15 - .../bookmarks/dialogs/DeleteBookmarkDialog.kt | 54 - .../features/bookmarks/list/BookMarkHolder.kt | 63 - .../contribute/ColorContributeView.kt | 37 - .../contribute/ContributeController.kt | 151 -- .../contribute/ContributeViewModel.kt | 84 - .../contribute/ContributeViewState.kt | 7 - .../features/contribute/DarkContributeView.kt | 37 - .../features/contribute/IconContributeView.kt | 37 - .../contribute/LifebuoyContributeView.kt | 37 - .../features/contribute/PlusContributeView.kt | 37 - .../NoExternalStorageActivity.kt | 41 - .../folderChooser/FolderChooserActivity.kt | 180 -- .../folderChooser/FolderChooserAdapter.kt | 37 - .../folderChooser/FolderChooserPresenter.kt | 209 --- .../folderChooser/FolderChooserView.kt | 51 - .../features/folderChooser/Holder.kt | 43 - .../folderChooser/StorageDirFinder.kt | 161 -- .../features/folderOverview/FolderModel.kt | 14 - .../folderOverview/FolderOverviewAdapter.kt | 36 - .../FolderOverviewController.kt | 219 --- .../FolderOverviewDiffHelper.kt | 28 - .../folderOverview/FolderOverviewHolder.kt | 39 - .../folderOverview/FolderOverviewPresenter.kt | 66 - .../audiobook/features/gridCount/GridCount.kt | 44 - .../CoverFromInternetController.kt | 327 ---- .../prefAppearanceUI/MiniPlayerButtonView.kt | 38 - .../MiniPlayerFloatingView.kt | 38 - .../MiniPlayerStyleDialogController.kt | 55 - .../PrefAppearanceUIController.kt | 99 -- .../PrefAppearanceUIViewEffect.kt | 6 - .../PrefAppearanceUIViewModel.kt | 58 - .../PrefAppearanceUIViewState.kt | 8 - .../CoverSettingsDialogController.kt | 86 - .../PlayStyleClassicView.kt | 38 - .../PlayStyleDialogController.kt | 51 - .../PlayStyleRoundedView.kt | 38 - .../PrefAppearanceUIPlayerController.kt | 141 -- .../PrefAppearanceUIPlayerViewEffect.kt | 10 - .../PrefAppearanceUIPlayerViewModel.kt | 59 - .../PrefAppearanceUIPlayerViewState.kt | 8 - .../RewindStyleClassicView.kt | 38 - .../RewindStyleDialogController.kt | 51 - .../RewindStyleRoundedView.kt | 38 - .../features/prefBeta/PrefBetaController.kt | 109 -- .../features/prefBeta/PrefBetaViewEffect.kt | 7 - .../features/prefBeta/PrefBetaViewModel.kt | 129 -- .../features/prefBeta/PrefBetaViewState.kt | 9 - .../PrefSkipIntervalController.kt | 107 -- .../PrefSkipIntervalViewEffect.kt | 8 - .../PrefSkipIntervalViewModel.kt | 66 - .../PrefSkipIntervalViewState.kt | 7 - .../features/settings/ChevronSettingView.kt | 43 - .../settings/ColorPrimaryDarkSettingView.kt | 41 - .../settings/ColorPrimarySettingView.kt | 41 - .../features/settings/DividerSettingView.kt | 41 - .../features/settings/DoubleSettingView.kt | 40 - .../features/settings/OneSettingView.kt | 40 - .../features/settings/PaySettingView.kt | 37 - .../features/settings/SettingsController.kt | 431 ----- .../features/settings/SettingsViewEffect.kt | 10 - .../features/settings/SettingsViewModel.kt | 145 -- .../features/settings/SettingsViewState.kt | 13 - .../features/settings/SingleSettingView.kt | 43 - .../features/settings/SwitchSettingView.kt | 41 - .../features/settings/TripleSettingView.kt | 50 - .../dialogs/AutoRewindDialogController.kt | 59 - .../dialogs/ChangelogDialogController.kt | 32 - .../dialogs/ColorAccentIosDialogController.kt | 137 -- .../ColorAccentMaterialDialogController.kt | 141 -- .../ColorAccentOriginalDialogController.kt | 166 -- .../ColorAccentPalettesDialogController.kt | 46 - .../ColorPrimaryIosDialogController.kt | 275 --- .../ColorPrimaryMaterialDialogController.kt | 284 --- .../ColorPrimaryOriginalDialogController.kt | 291 --- .../ColorPrinaryPalettesDialogController.kt | 58 - .../dialogs/LicenseDialogController.kt | 42 - .../dialogs/PlaybackSpeedDialogController.kt | 82 - .../dialogs/SupportDialogController.kt | 43 - .../dialogs/WhatNewDialogController.kt | 32 - .../audiobook/injection/AndroidModule.kt | 91 - .../com/goodwy/audiobook/injection/App.kt | 194 -- .../audiobook/injection/AppComponent.kt | 130 -- .../audiobook/injection/PlaybackModule.kt | 18 - .../audiobook/injection/SortingModule.kt | 46 - .../misc/ApplicationIdProviderImpl.kt | 11 - .../audiobook/misc/CircleOutlineProvider.kt | 12 - .../audiobook/misc/DarkThemeSettable.kt | 11 - .../goodwy/audiobook/misc/FileRecognition.kt | 57 - .../goodwy/audiobook/misc/MediaAnalyzer.kt | 99 -- .../audiobook/misc/MultiLineSpinnerAdapter.kt | 83 - .../goodwy/audiobook/misc/PermissionHelper.kt | 58 - .../com/goodwy/audiobook/misc/Permissions.kt | 68 - .../com/goodwy/audiobook/misc/Resources.kt | 16 - .../misc/RoundRectOutlineProvider.kt | 12 - .../goodwy/audiobook/misc/RouterProvider.kt | 11 - .../goodwy/audiobook/misc/StorageMounted.kt | 9 - .../goodwy/audiobook/misc/StrictModeInit.kt | 22 - .../java/com/goodwy/audiobook/misc/UUID.kt | 13 - .../com/goodwy/audiobook/misc/UUIDAdapter.kt | 15 - .../audiobook/misc/androidExtensions.kt | 50 - .../ClearAfterDestroyViewNullable.kt | 41 - .../conductor/ControllerLifecycleOwner.kt | 45 - .../audiobook/misc/groupie/BindingItem.kt | 30 - .../recyclerComponent/AdapterComponent.kt | 21 - .../CompositeAdapterHelper.kt | 42 - .../recyclerComponent/CompositeListAdapter.kt | 37 - .../goodwy/audiobook/misc/viewExtensions.kt | 70 - .../goodwy/audiobook/mvp/PresenterDelegate.kt | 37 - .../goodwy/audiobook/mvp/RxBaseActivity.kt | 50 - .../playback/OnlyAudioRenderersFactory.kt | 63 - .../audiobook/playback/ShakeDetector.kt | 29 - .../audiobook/playback/ShakeListener.kt | 33 - .../goodwy/audiobook/playback/SleepTimer.kt | 173 -- .../uitools/AudioVolumeContentObserver.java | 50 - .../audiobook/uitools/AudioVolumeObserver.kt | 39 - .../goodwy/audiobook/uitools/BetterSnack.kt | 52 - .../goodwy/audiobook/uitools/BlurFactory.kt | 128 -- .../audiobook/uitools/BookChangeHandler.kt | 75 - .../CircularRevealBookPlayTransition.kt | 63 - .../com/goodwy/audiobook/uitools/Colors.kt | 118 -- .../uitools/CoverFromDiscCollector.kt | 109 -- .../uitools/DefaultAnimatorListener.kt | 10 - .../audiobook/uitools/ExtensionsHolder.kt | 20 - .../uitools/OnAudioVolumeChangedListener.kt | 5 - .../uitools/PlayPauseColorDrawableSetter.kt | 43 - .../audiobook/uitools/ResourceHelper.kt | 27 - .../audiobook/uitools/RoundProgressView.kt | 116 -- .../uitools/RoundedTransformation.java | 45 - .../goodwy/audiobook/uitools/SimpleTarget.kt | 14 - .../audiobook/uitools/SquareProgressView.kt | 52 - .../audiobook/uitools/TextIconDrawable.kt | 54 - .../com/goodwy/audiobook/uitools/ThemeUtil.kt | 17 - .../AnimatorListenerWrapper.kt | 25 - .../noPauseAnimator/NoPauseAnimator.kt | 109 -- .../main/kotlin/voice/app/AppController.kt | 96 + .../voice/app/features/BillingViewModel.kt | 253 +++ .../kotlin/voice/app/features/MainActivity.kt | 357 ++++ .../bookOverview/EditCoverDialogController.kt | 92 + .../features/bookmarks/BookmarkController.kt | 91 +- .../features/bookmarks/BookmarkPresenter.kt | 63 +- .../app}/features/bookmarks/BookmarkView.kt | 6 +- .../bookmarks/dialogs/AddBookmarkDialog.kt | 23 +- .../bookmarks/dialogs/EditBookmarkDialog.kt | 35 +- .../features/bookmarks/list/BookMarkHolder.kt | 89 + .../bookmarks/list/BookmarkAdapter.kt | 10 +- .../bookmarks/list/BookmarkClickListener.kt | 4 +- .../list/BookmarkDiffUtilCallback.kt | 6 +- .../CoverFromInternetController.kt | 208 +++ .../app}/features/imagepicker/CropOverlay.kt | 91 +- .../features/widget/BaseWidgetProvider.kt | 8 +- .../features/widget/TriggerWidgetOnChange.kt | 34 +- .../app}/features/widget/WidgetUpdater.kt | 182 +- .../voice/app/injection/AndroidModule.kt | 96 + .../main/kotlin/voice/app/injection/App.kt | 102 ++ .../voice/app/injection/AppComponent.kt | 48 + .../voice/app}/injection/PrefsModule.kt | 285 ++- .../voice/app/misc/AppInfoProviderImpl.kt | 13 + .../kotlin/voice/app/misc/StrictModeInit.kt | 37 + .../app}/misc/ToBookIntentProviderImpl.kt | 10 +- .../ChangeHandlerCoordinatorLayout.kt | 11 +- .../voice/app/misc/conductor/Conductor.kt} | 11 +- .../voice/app}/mvp/MvpController.kt | 14 +- .../voice/app}/mvp/Presenter.kt | 10 +- .../KotlinxDataStoreSerializer.kt | 24 + .../SerializableDataStoreFactory.kt | 32 + .../voice/app/serialization/UriSerializer.kt | 19 + .../voice/app/uitools/AnimateFloat.kt} | 4 +- .../voice/app}/uitools/CropTransformation.kt | 22 +- .../voice/app}/uitools/InsetUtil.kt | 4 +- .../voice/app}/uitools/Interpolators.kt | 2 +- .../app/uitools/SettingsContentObserver.kt | 40 + .../app}/uitools/VerticalChangeHandler.kt | 10 +- .../uitools/VerticalDividerItemDecoration.kt | 11 +- .../voice/app}/uitools/ViewBindingHolder.kt | 6 +- app/src/main/res/anim/rotate.xml | 8 - .../color-v26/gradient_launcher_finish.xml | 9 - .../color-v26/gradient_launcher_shadow.xml | 10 - .../copy_abc_primary_text_material_dark.xml | 4 +- .../copy_abc_secondary_text_material_dark.xml | 4 +- .../res/color/gradient_launcher_finish.xml | 9 + .../res/color/gradient_launcher_shadow.xml | 10 + .../dialog_title_backgroung.xml | 18 - .../main/res/drawable-night/mini_player.xml | 96 - .../res/drawable-night/mini_player_button.png | Bin 190074 -> 0 bytes .../drawable-night/mini_player_floating.png | Bin 196558 -> 0 bytes app/src/main/res/drawable/alarm.xml | 10 - app/src/main/res/drawable/audiobook.xml | 9 - .../main/res/drawable/avd_pause_to_play.xml | 44 - .../res/drawable/avd_pause_to_play_color.xml | 44 - .../main/res/drawable/avd_play_to_pause.xml | 44 - .../res/drawable/avd_play_to_pause_color.xml | 44 - app/src/main/res/drawable/backspace.xml | 9 - .../res/drawable/book_play_backgroung.xml | 9 - app/src/main/res/drawable/bookmark.xml | 9 - .../main/res/drawable/bookmark_outline.xml | 9 - app/src/main/res/drawable/check.xml | 14 +- .../main/res/drawable/checkbox_selector.xml | 7 - app/src/main/res/drawable/chip_background.xml | 10 - app/src/main/res/drawable/circle.xml | 10 +- app/src/main/res/drawable/close.xml | 9 - app/src/main/res/drawable/crop.xml | 14 +- .../current_playing_circle_background.xml | 16 - .../res/drawable/dialog_title_backgroung.xml | 18 - .../res/drawable/fab_label_background.xml | 10 - .../main/res/drawable/folder_libraries.xml | 28 - app/src/main/res/drawable/folder_multiple.xml | 13 - app/src/main/res/drawable/format_author.xml | 9 - app/src/main/res/drawable/format_text.xml | 9 - app/src/main/res/drawable/home.xml | 14 +- app/src/main/res/drawable/ic_album.xml | 10 - app/src/main/res/drawable/ic_arrow_back.xml | 19 +- app/src/main/res/drawable/ic_arrow_upward.xml | 9 - app/src/main/res/drawable/ic_changelog.xml | 10 - app/src/main/res/drawable/ic_check_circle.xml | 10 - .../res/drawable/ic_check_circle_rotation.xml | 15 - app/src/main/res/drawable/ic_chevron_down.xml | 9 - app/src/main/res/drawable/ic_chevron_left.xml | 9 - .../main/res/drawable/ic_chevron_right.xml | 9 - app/src/main/res/drawable/ic_chevron_up.xml | 9 - app/src/main/res/drawable/ic_clock.xml | 9 - app/src/main/res/drawable/ic_contents.xml | 9 - .../drawable/{delete.xml => ic_delete.xml} | 2 +- app/src/main/res/drawable/ic_download.xml | 9 - app/src/main/res/drawable/ic_equalizer.xml | 10 - app/src/main/res/drawable/ic_favorite.xml | 9 - app/src/main/res/drawable/ic_folder.xml | 10 - app/src/main/res/drawable/ic_folder_24dp.xml | 10 - app/src/main/res/drawable/ic_folder_up.xml | 10 - app/src/main/res/drawable/ic_github.xml | 10 - app/src/main/res/drawable/ic_headphones.xml | 5 - app/src/main/res/drawable/ic_image.xml | 9 - app/src/main/res/drawable/ic_info.xml | 9 - app/src/main/res/drawable/ic_launcher.xml | 6 + .../res/drawable/ic_launcher_background.xml | 74 - .../res/drawable/ic_launcher_foreground.xml | 27 + .../res/drawable/ic_launcher_monochrome.xml | 27 + .../main/res/drawable/ic_launcher_splash.xml | 27 + app/src/main/res/drawable/ic_licenses.xml | 9 - app/src/main/res/drawable/ic_lock.xml | 9 - app/src/main/res/drawable/ic_more.xml | 9 + app/src/main/res/drawable/ic_more_horiz.xml | 9 - app/src/main/res/drawable/ic_more_vert.xml | 9 - app/src/main/res/drawable/ic_new.xml | 6 - app/src/main/res/drawable/ic_palettes.xml | 9 - app/src/main/res/drawable/ic_pay.xml | 9 - app/src/main/res/drawable/ic_percent.xml | 12 - .../main/res/drawable/ic_percent_white.xml | 9 - .../res/drawable/ic_playbooks_background.xml | 74 - app/src/main/res/drawable/ic_point.xml | 9 - app/src/main/res/drawable/ic_repeat_off.xml | 14 - app/src/main/res/drawable/ic_setting.xml | 9 - app/src/main/res/drawable/ic_settings.xml | 11 - app/src/main/res/drawable/ic_share.xml | 9 - .../main/res/drawable/ic_shortcut_play.xml | 5 + .../drawable/ic_shortcut_play_foreground.xml | 13 - app/src/main/res/drawable/ic_skip_next.xml | 14 - .../main/res/drawable/ic_skip_previous.xml | 14 - app/src/main/res/drawable/ic_sleep.xml | 6 +- app/src/main/res/drawable/ic_translate.xml | 10 - .../main/res/drawable/ic_uncheck_circle.xml | 9 - app/src/main/res/drawable/ic_view_grid.xml | 18 - app/src/main/res/drawable/ic_view_list.xml | 15 - app/src/main/res/drawable/ic_volume_down.xml | 9 - app/src/main/res/drawable/ic_volume_up.xml | 9 - app/src/main/res/drawable/image_color.xml | 9 - app/src/main/res/drawable/image_dark.xml | 9 - app/src/main/res/drawable/image_lifebuoy.xml | 9 - app/src/main/res/drawable/image_plus.xml | 9 - app/src/main/res/drawable/logo.xml | 24 - app/src/main/res/drawable/mini_player.xml | 96 - .../main/res/drawable/mini_player_button.png | Bin 185593 -> 0 bytes .../res/drawable/mini_player_floating.png | Bin 191578 -> 0 bytes .../res/drawable/notification_divider.xml | 8 +- app/src/main/res/drawable/outline.xml | 61 - app/src/main/res/drawable/plus.xml | 14 +- app/src/main/res/drawable/refresh.xml | 14 +- .../drawable/selected_spinner_background.xml | 13 - app/src/main/res/drawable/shadow_top.xml | 8 - app/src/main/res/drawable/sort_variant.xml | 9 - app/src/main/res/drawable/speedometer.xml | 12 - app/src/main/res/drawable/splash_drawable.xml | 8 + app/src/main/res/drawable/splash_screen.xml | 10 - app/src/main/res/drawable/usb.xml | 9 - app/src/main/res/drawable/volume_plus.xml | 9 - .../main/res/drawable/widget_background.xml | 6 +- .../res/drawable/widget_white_background.xml | 6 - app/src/main/res/drawable/wifi_off.xml | 10 - .../main/res/layout-land/book_overview.xml | 156 -- app/src/main/res/layout-land/book_play.xml | 385 ---- .../main/res/layout-long-land/book_play.xml | 384 ---- .../main/res/layout-long-port/book_play.xml | 417 ----- .../res/layout-sw600dp-land/book_overview.xml | 156 -- .../res/layout-sw600dp-land/book_play.xml | 388 ---- .../res/layout-sw600dp-port/book_overview.xml | 156 -- .../main/res/layout-sw600dp/book_overview.xml | 156 -- app/src/main/res/layout-sw600dp/book_play.xml | 407 ----- app/src/main/res/layout/about.xml | 370 ---- app/src/main/res/layout/activity_book.xml | 11 +- .../res/layout/activity_folder_chooser.xml | 135 -- ...vity_folder_chooser_adapter_row_layout.xml | 35 - .../activity_folder_overview_row_layout.xml | 46 - .../main/res/layout/activity_no_external.xml | 33 - app/src/main/res/layout/book_category.xml | 27 - .../res/layout/book_more_bottom_sheet.xml | 110 -- app/src/main/res/layout/book_overview.xml | 156 -- .../main/res/layout/book_overview_header.xml | 26 - .../res/layout/book_overview_row_grid.xml | 168 -- .../res/layout/book_overview_row_list.xml | 169 -- app/src/main/res/layout/book_play.xml | 417 ----- app/src/main/res/layout/book_play_spinner.xml | 12 - app/src/main/res/layout/bookmark.xml | 59 +- .../main/res/layout/bookmark_row_layout.xml | 148 +- app/src/main/res/layout/circle.xml | 12 +- app/src/main/res/layout/contribute.xml | 108 -- .../main/res/layout/dialog_amount_chooser.xml | 25 - app/src/main/res/layout/dialog_cover_edit.xml | 31 +- .../res/layout/dialog_mini_player_style.xml | 29 - .../res/layout/dialog_play_button_style.xml | 29 - .../main/res/layout/dialog_radius_chooser.xml | 55 - .../res/layout/dialog_rewind_button_style.xml | 21 - .../layout/dialog_select_chapter_title.xml | 85 - app/src/main/res/layout/dialog_sleep.xml | 203 --- app/src/main/res/layout/dialog_sleep_list.xml | 137 -- .../main/res/layout/dialog_sleep_modern.xml | 256 --- .../main/res/layout/dialog_time_picker.xml | 31 - app/src/main/res/layout/folder_overview.xml | 86 - app/src/main/res/layout/image_picker.xml | 141 +- app/src/main/res/layout/loudness.xml | 36 - .../res/layout/merge_contribute_row_color.xml | 51 - .../res/layout/merge_contribute_row_dark.xml | 51 - .../res/layout/merge_contribute_row_icon.xml | 51 - .../layout/merge_contribute_row_lifebuoy.xml | 51 - .../res/layout/merge_contribute_row_plus.xml | 51 - .../res/layout/merge_mini_player_button.xml | 50 - .../res/layout/merge_mini_player_floating.xml | 50 - .../res/layout/merge_play_style_classic.xml | 56 - .../res/layout/merge_play_style_rounded.xml | 57 - .../res/layout/merge_rewind_style_classic.xml | 61 - .../res/layout/merge_rewind_style_rounded.xml | 89 - .../res/layout/merge_setting_row_chevron.xml | 51 - .../merge_setting_row_color_primary.xml | 52 - .../merge_setting_row_color_primary_dark.xml | 52 - .../res/layout/merge_setting_row_divider.xml | 28 - .../res/layout/merge_setting_row_double.xml | 27 - .../main/res/layout/merge_setting_row_one.xml | 17 - .../main/res/layout/merge_setting_row_pay.xml | 64 - .../res/layout/merge_setting_row_single.xml | 38 - .../res/layout/merge_setting_row_switch.xml | 52 - .../res/layout/merge_setting_row_triple.xml | 50 - .../main/res/layout/pref_appearance_ui.xml | 60 - .../res/layout/pref_appearance_ui_player.xml | 60 - app/src/main/res/layout/pref_beta.xml | 80 - .../main/res/layout/pref_skip_interval.xml | 59 - app/src/main/res/layout/rotate_view.xml | 11 - .../main/res/layout/select_chapter_row.xml | 54 - app/src/main/res/layout/settings.xml | 298 ---- app/src/main/res/layout/widget.xml | 170 +- app/src/main/res/menu/book_category.xml | 11 - app/src/main/res/menu/book_overview.xml | 25 - app/src/main/res/menu/book_play.xml | 66 - app/src/main/res/menu/bookmark_popup.xml | 12 +- app/src/main/res/menu/crop_menu.xml | 12 +- app/src/main/res/menu/image_picker.xml | 22 +- app/src/main/res/menu/menu_about.xml | 12 - app/src/main/res/menu/menu_settings.xml | 44 - app/src/main/res/menu/sort_menu.xml | 19 - .../main/res/mipmap-anydpi-v26/ic_goodwy.xml | 5 - .../res/mipmap-anydpi-v26/ic_launcher.xml | 5 - .../mipmap-anydpi-v26/ic_shortcut_play.xml | 5 - app/src/main/res/mipmap-hdpi/ic_goodwy.png | Bin 3526 -> 0 bytes .../res/mipmap-hdpi/ic_goodwy_foreground.png | Bin 2609 -> 0 bytes app/src/main/res/mipmap-hdpi/ic_launcher.png | Bin 6130 -> 0 bytes .../mipmap-hdpi/ic_launcher_background.png | Bin 858 -> 0 bytes .../mipmap-hdpi/ic_launcher_foreground.png | Bin 9540 -> 0 bytes .../main/res/mipmap-hdpi/ic_shortcut_play.png | Bin 890 -> 0 bytes .../ic_shortcut_play_foregound.png | Bin 0 -> 696 bytes app/src/main/res/mipmap-mdpi/ic_goodwy.png | Bin 2207 -> 0 bytes .../res/mipmap-mdpi/ic_goodwy_foreground.png | Bin 1616 -> 0 bytes app/src/main/res/mipmap-mdpi/ic_launcher.png | Bin 3648 -> 0 bytes .../mipmap-mdpi/ic_launcher_background.png | Bin 464 -> 0 bytes .../mipmap-mdpi/ic_launcher_foreground.png | Bin 5145 -> 0 bytes .../main/res/mipmap-mdpi/ic_shortcut_play.png | Bin 663 -> 0 bytes .../ic_shortcut_play_foregound.png | Bin 0 -> 466 bytes app/src/main/res/mipmap-xhdpi/ic_goodwy.png | Bin 5068 -> 0 bytes .../res/mipmap-xhdpi/ic_goodwy_foreground.png | Bin 3630 -> 0 bytes app/src/main/res/mipmap-xhdpi/ic_launcher.png | Bin 9285 -> 0 bytes .../mipmap-xhdpi/ic_launcher_background.png | Bin 1321 -> 0 bytes .../mipmap-xhdpi/ic_launcher_foreground.png | Bin 14036 -> 0 bytes .../res/mipmap-xhdpi/ic_shortcut_play.png | Bin 1271 -> 0 bytes .../ic_shortcut_play_foregound.png | Bin 0 -> 832 bytes app/src/main/res/mipmap-xxhdpi/ic_goodwy.png | Bin 7921 -> 0 bytes .../mipmap-xxhdpi/ic_goodwy_foreground.png | Bin 6352 -> 0 bytes .../main/res/mipmap-xxhdpi/ic_launcher.png | Bin 15983 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_background.png | Bin 2953 -> 0 bytes .../mipmap-xxhdpi/ic_launcher_foreground.png | Bin 23854 -> 0 bytes .../res/mipmap-xxhdpi/ic_shortcut_play.png | Bin 2029 -> 0 bytes .../ic_shortcut_play_foregound.png | Bin 0 -> 1671 bytes app/src/main/res/mipmap-xxxhdpi/ic_goodwy.png | Bin 11373 -> 0 bytes .../mipmap-xxxhdpi/ic_goodwy_foreground.png | Bin 17016 -> 0 bytes .../main/res/mipmap-xxxhdpi/ic_launcher.png | Bin 23142 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_background.png | Bin 4236 -> 0 bytes .../mipmap-xxxhdpi/ic_launcher_foreground.png | Bin 33490 -> 0 bytes .../res/mipmap-xxxhdpi/ic_shortcut_play.png | Bin 3018 -> 0 bytes .../ic_shortcut_play_foregound.png | Bin 0 -> 2221 bytes app/src/main/res/values-night/bool.xml | 4 +- app/src/main/res/values-night/colors.xml | 22 - app/src/main/res/values/attrs.xml | 48 +- app/src/main/res/values/bool.xml | 4 +- app/src/main/res/values/changelog.xml | 216 --- app/src/main/res/values/colors.xml | 53 +- app/src/main/res/values/dimen.xml | 17 +- app/src/main/res/values/donottranslate.xml | 34 +- .../values/ic_shortcut_play_background.xml | 4 - app/src/main/res/values/licenses.xml | 19 - app/src/main/res/values/styles.xml | 173 +- app/src/main/res/xml/automotive_app_desc.xml | 2 +- app/src/main/res/xml/cover_paths.xml | 6 +- app/src/main/res/xml/shortcuts.xml | 23 +- app/src/main/res/xml/widget_info.xml | 16 +- .../java/com/goodwy/audiobook/BookFactory.kt | 59 - .../com/goodwy/audiobook/ChapterFactory.kt | 23 - .../bookOverview/list/BookComparatorTest.kt | 34 - .../list/header/BookOverviewCategoryTest.kt | 41 - .../bookSearch/BookSearchHandlerTest.kt | 229 --- .../voice/app}/misc/FormatTimeKtTest.kt | 19 +- .../voice/app}/mvp/PresenterTest.kt | 11 +- apply_ktlint.gradle | 24 - bookOverview/build.gradle.kts | 26 + .../BookMigrationExplanationQualifier.kt | 9 + .../bottomSheet/BottomSheetContent.kt | 67 + .../bottomSheet/BottomSheetItemViewModel.kt | 9 + .../bottomSheet/BottomSheetViewModel.kt | 43 + .../bottomSheet/EditBookBottomSheetState.kt | 31 + .../deleteBook/DeleteBookDialog.kt | 80 + .../deleteBook/DeleteBookViewModel.kt | 90 + .../bookOverview/di/BookOverviewComponent.kt | 34 + .../EditBookCategoryViewModel.kt | 68 + .../editTitle/EditBookTitleDialog.kt | 47 + .../editTitle/EditBookTitleState.kt | 11 + .../editTitle/EditBookTitleViewModel.kt | 64 + .../fileCover/FileCoverViewModel.kt | 37 + .../internetCover/InternetCoverViewModel.kt | 29 + .../overview}/BookOverviewCategory.kt | 23 +- .../overview/BookOverviewItemViewState.kt | 37 + .../overview/BookOverviewLayoutMode.kt | 5 + .../overview/BookOverviewViewModel.kt | 150 ++ .../overview/BookOverviewViewState.kt | 56 + .../search/BookSearchComponent.kt | 9 + .../bookOverview/search/BookSearchScreen.kt | 183 ++ .../search/BookSearchViewModel.kt | 106 ++ .../search/BookSearchViewState.kt | 20 + .../voice/bookOverview/views/AddBookHint.kt | 19 + .../bookOverview/views/BookFolderIcon.kt | 51 + .../voice/bookOverview/views/BookOverview.kt | 459 +++++ .../voice/bookOverview/views/BookProgress.kt | 52 + .../bookOverview/views/ExplanationTooltip.kt | 95 + .../voice/bookOverview/views/GridBooks.kt | 220 +++ .../kotlin/voice/bookOverview/views/Header.kt | 20 + .../voice/bookOverview/views/ListBooks.kt | 221 +++ .../voice/bookOverview/views/MigrateHint.kt | 33 + .../voice/bookOverview/views/MigrateIcon.kt | 33 + .../voice/bookOverview/views/PlayButton.kt | 37 + .../voice/bookOverview/views/SettingsIcon.kt | 41 + .../kotlin/voice/bookOverview/BookFactory.kt | 51 + .../bookOverview/BookOverviewCategoryTest.kt | 50 + build.gradle.kts | 119 +- buildSrc/.gitignore | 2 - buildSrc/build.gradle.kts | 7 - .../main/kotlin/deps/DependencyStability.kt | 21 - buildSrc/src/main/kotlin/deps/Deps.kt | 148 -- common/build.gradle.kts | 49 +- common/default_album_art_license.md | 2 + common/libs/material-color-util.jar | Bin 0 -> 51182 bytes common/src/main/AndroidManifest.xml | 1 - .../audiobook/common/ApplicationIdProvider.kt | 5 - .../audiobook/common/CoverReplacement.kt | 44 - .../goodwy/audiobook/common/ImageHelper.kt | 122 -- .../comparator/NaturalOrderComparator.kt | 58 - .../kotlin/voice/common/AndroidExtensions.kt | 70 + .../kotlin/voice/common/AppInfoProvider.kt | 6 + .../src/main/kotlin/voice/common/AppScope.kt | 3 + .../src/main/kotlin/voice/common/AudioWave.kt | 110 ++ .../kotlin/voice/common/BlurTransformation.kt | 245 +++ common/src/main/kotlin/voice/common/BookId.kt | 36 + .../src/main/kotlin/voice/common/Combine.kt | 28 + .../kotlin/voice/common/DarkThemeSettable.kt | 5 + .../kotlin/voice/common/DispatcherProvider.kt | 8 + .../main/kotlin/voice/common}/FormatTime.kt | 44 +- .../voice/common}/PlayPauseDrawableSetter.kt | 13 +- .../voice/common/RecomposeHighlighter.kt | 108 ++ .../main/kotlin/voice/common/RootComponent.kt | 5 + .../comparator/IntelliJStringComparator.kt | 10 +- .../comparator/NaturalOrderComparator.kt | 40 + .../voice/common/compose/ComposeController.kt | 54 + .../voice/common/compose/ImmutableFile.kt | 7 + .../voice/common/compose/LongClickableCard.kt | 40 + .../voice/common/compose/PaddingValues.kt | 29 + .../voice/common/compose/SharedComponent.kt | 26 + .../kotlin/voice/common/compose/ViewModel.kt | 17 + .../kotlin/voice/common/compose/VoiceTheme.kt | 679 +++++++ .../voice/common/conductor}/BaseController.kt | 4 +- .../conductor/ClearAfterDestroyView.kt | 18 +- .../conductor/ControllerLifecycleOwner.kt | 47 + .../common/conductor}/DialogController.kt | 8 +- .../conductor/LifecycleScopeProperty.kt | 11 +- .../conductor}/ViewBindingController.kt | 10 +- .../kotlin/voice/common/grid/GridCount.kt | 18 + .../main/kotlin/voice/common/grid/GridMode.kt | 7 + .../kotlin/voice/common/navigation/Base64.kt | 7 + .../common/navigation/NavigationCommand.kt | 42 + .../voice/common/navigation/Navigator.kt | 30 + .../voice}/common/pref/PrefKeys.kt | 58 +- .../ic_fast_forward_black_36dp.png | Bin 392 -> 0 bytes .../ic_fast_forward_white_36dp.png | Bin .../res/drawable-hdpi/ic_notification.png | Bin 436 -> 0 bytes .../res/drawable-hdpi/ic_pause_black_36dp.png | Bin 180 -> 0 bytes .../res/drawable-hdpi/ic_pause_white_36dp.png | Bin .../res/drawable-hdpi/ic_play_black_36dp.png | Bin 267 -> 0 bytes .../res/drawable-hdpi/ic_play_white_36dp.png | Bin .../drawable-hdpi/ic_rewind_black_36dp.png | Bin 393 -> 0 bytes .../drawable-hdpi/ic_rewind_white_36dp.png | Bin .../ic_fast_forward_black_36dp.png | Bin 283 -> 0 bytes .../ic_fast_forward_white_36dp.png | Bin .../res/drawable-mdpi/ic_notification.png | Bin 339 -> 0 bytes .../res/drawable-mdpi/ic_pause_black_36dp.png | Bin 144 -> 0 bytes .../res/drawable-mdpi/ic_pause_white_36dp.png | Bin .../res/drawable-mdpi/ic_play_black_36dp.png | Bin 215 -> 0 bytes .../res/drawable-mdpi/ic_play_white_36dp.png | Bin .../drawable-mdpi/ic_rewind_black_36dp.png | Bin 272 -> 0 bytes .../drawable-mdpi/ic_rewind_white_36dp.png | Bin .../ic_fast_forward_black_36dp.png | Bin 409 -> 0 bytes .../ic_fast_forward_white_36dp.png | Bin .../res/drawable-xhdpi/ic_notification.png | Bin 570 -> 0 bytes .../drawable-xhdpi/ic_pause_black_36dp.png | Bin 205 -> 0 bytes .../drawable-xhdpi/ic_pause_white_36dp.png | Bin .../res/drawable-xhdpi/ic_play_black_36dp.png | Bin 348 -> 0 bytes .../res/drawable-xhdpi/ic_play_white_36dp.png | Bin .../drawable-xhdpi/ic_rewind_black_36dp.png | Bin 485 -> 0 bytes .../drawable-xhdpi/ic_rewind_white_36dp.png | Bin .../ic_fast_forward_black_36dp.png | Bin 733 -> 0 bytes .../ic_fast_forward_white_36dp.png | Bin .../res/drawable-xxhdpi/ic_notification.png | Bin 839 -> 0 bytes .../drawable-xxhdpi/ic_pause_black_36dp.png | Bin 298 -> 0 bytes .../drawable-xxhdpi/ic_pause_white_36dp.png | Bin .../drawable-xxhdpi/ic_play_black_36dp.png | Bin 470 -> 0 bytes .../drawable-xxhdpi/ic_play_white_36dp.png | Bin .../drawable-xxhdpi/ic_rewind_black_36dp.png | Bin 680 -> 0 bytes .../drawable-xxhdpi/ic_rewind_white_36dp.png | Bin .../ic_fast_forward_black_36dp.png | Bin 791 -> 0 bytes .../ic_fast_forward_white_36dp.png | Bin .../drawable-xxxhdpi/ic_pause_black_36dp.png | Bin 354 -> 0 bytes .../drawable-xxxhdpi/ic_pause_white_36dp.png | Bin .../drawable-xxxhdpi/ic_play_black_36dp.png | Bin 611 -> 0 bytes .../drawable-xxxhdpi/ic_play_white_36dp.png | Bin .../drawable-xxxhdpi/ic_rewind_black_36dp.png | Bin 924 -> 0 bytes .../drawable-xxxhdpi/ic_rewind_white_36dp.png | Bin common/src/main/res/drawable/alarm.xml | 10 + .../src/main/res/drawable/alarm_off.xml | 8 +- common/src/main/res/drawable/album_art.xml | 6 + .../main/res/drawable/avd_pause_to_play.xml | 44 + .../main/res/drawable/avd_play_to_pause.xml | 44 + common/src/main/res/drawable/close.xml | 9 + .../res/drawable/ic_chevron_compact_down.xml | 16 + .../src/main/res/drawable/ic_circle.xml | 5 +- .../src/main/res/drawable/ic_fast_forward.xml | 10 +- .../res/drawable/ic_fast_forward_time.xml | 10 - .../src/main/res/drawable/ic_fast_rewind.xml | 10 +- .../main/res/drawable/ic_fast_rewind_time.xml | 10 - .../src/main/res/drawable/ic_headphones.xml | 9 + .../main/res/drawable/ic_invert_colors.xml | 27 + common/src/main/res/drawable/ic_lifebuoy.xml | 42 + .../src/main/res/drawable/ic_mini_player.xml | 33 + .../ic_notification.xml | 0 common/src/main/res/drawable/ic_palette.xml | 42 + common/src/main/res/drawable/ic_play.xml | 10 - .../src/main/res/drawable/ic_play_square.xml | 8 + common/src/main/res/drawable/ic_playbook.xml | 23 + .../src/main/res/drawable/ic_plus_round.xml | 27 + .../src/main/res/drawable/ic_plus_support.xml | 42 + .../src/main/res/drawable/ic_repeat_all.xml | 8 +- .../src/main/res/drawable/ic_repeat_off.xml | 14 + .../src/main/res/drawable/ic_repeat_one.xml | 8 +- common/src/main/res/drawable/ic_settings.xml | 17 + common/src/main/res/drawable/ic_skip_next.xml | 14 +- .../main/res/drawable/ic_skip_previous.xml | 14 +- common/src/main/res/drawable/ic_square.xml | 8 + .../src/main/res/drawable/ic_square_blur.xml | 11 + common/src/main/res/drawable/ic_time_left.xml | 14 + common/src/main/res/drawable/logo_goodwy.png | Bin 0 -> 16387 bytes common/src/main/res/values-af/strings.xml | 101 ++ common/src/main/res/values-ar/strings.xml | 98 + common/src/main/res/values-bg/strings.xml | 101 ++ common/src/main/res/values-br/strings.xml | 101 ++ common/src/main/res/values-cs/strings.xml | 101 ++ common/src/main/res/values-da/strings.xml | 101 ++ common/src/main/res/values-de/strings.xml | 101 ++ common/src/main/res/values-el/strings.xml | 101 ++ common/src/main/res/values-es/strings.xml | 101 ++ common/src/main/res/values-fa-rIR/strings.xml | 101 ++ common/src/main/res/values-fr/strings.xml | 101 ++ common/src/main/res/values-ga/strings.xml | 101 ++ common/src/main/res/values-hi-rIN/strings.xml | 101 ++ common/src/main/res/values-hi/strings.xml | 101 ++ common/src/main/res/values-hu/strings.xml | 101 ++ common/src/main/res/values-it/strings.xml | 101 ++ common/src/main/res/values-ja/strings.xml | 101 ++ common/src/main/res/values-kab/strings.xml | 101 ++ common/src/main/res/values-ko/strings.xml | 101 ++ common/src/main/res/values-lt-rLT/strings.xml | 101 ++ common/src/main/res/values-ne-rNP/strings.xml | 101 ++ common/src/main/res/values-night/colors.xml | 7 - common/src/main/res/values-nl-rNL/strings.xml | 101 ++ common/src/main/res/values-oc/strings.xml | 101 ++ common/src/main/res/values-pl-rPL/strings.xml | 101 ++ common/src/main/res/values-pl/strings.xml | 101 ++ common/src/main/res/values-pt-rBR/strings.xml | 101 ++ common/src/main/res/values-pt-rPT/strings.xml | 101 ++ common/src/main/res/values-ru/strings.xml | 101 ++ common/src/main/res/values-sk/strings.xml | 101 ++ common/src/main/res/values-sl/strings.xml | 101 ++ common/src/main/res/values-sv/strings.xml | 101 ++ common/src/main/res/values-sw/strings.xml | 101 ++ common/src/main/res/values-tr/strings.xml | 101 ++ common/src/main/res/values-uk/strings.xml | 101 ++ .../src/main/res/values-v31/covercolors.xml | 7 + common/src/main/res/values-vi/strings.xml | 101 ++ common/src/main/res/values-zh-rCN/strings.xml | 101 ++ common/src/main/res/values/colors.xml | 9 - common/src/main/res/values/covercolors.xml | 7 + common/src/main/res/values/donottranslate.xml | 4 + common/src/main/res/values/strings.xml | 101 ++ .../comparator/NaturalOrderComparatorTest.kt | 75 - .../comparator/NaturalOrderComparatorTest.kt | 126 ++ .../voice/common/navigation/Base64Test.kt | 15 + core/build.gradle.kts | 24 - core/lint.xml | 7 - core/src/main/AndroidManifest.xml | 5 - core/src/main/res/values-af/strings.xml | 219 --- core/src/main/res/values-ar/strings.xml | 209 --- core/src/main/res/values-bg/strings.xml | 219 --- core/src/main/res/values-cs/strings.xml | 229 --- core/src/main/res/values-da/strings.xml | 223 --- core/src/main/res/values-de/strings.xml | 223 --- core/src/main/res/values-el/strings.xml | 223 --- core/src/main/res/values-es/strings.xml | 218 --- core/src/main/res/values-fa-rIR/strings.xml | 129 -- core/src/main/res/values-fr/strings.xml | 223 --- core/src/main/res/values-ga/strings.xml | 206 --- core/src/main/res/values-hi-rIN/strings.xml | 217 --- core/src/main/res/values-hi/strings.xml | 217 --- core/src/main/res/values-it/strings.xml | 222 --- core/src/main/res/values-ja/strings.xml | 217 --- core/src/main/res/values-ko/strings.xml | 220 --- core/src/main/res/values-lt-rLT/strings.xml | 227 --- core/src/main/res/values-nl-rNL/strings.xml | 223 --- core/src/main/res/values-pl/strings.xml | 227 --- core/src/main/res/values-pt-rBR/strings.xml | 223 --- core/src/main/res/values-pt-rPT/strings.xml | 199 --- core/src/main/res/values-ru/strings.xml | 266 --- core/src/main/res/values-sk/strings.xml | 227 --- core/src/main/res/values-sl/strings.xml | 221 --- core/src/main/res/values-sv/strings.xml | 223 --- core/src/main/res/values-sw/strings.xml | 210 --- core/src/main/res/values-tr/strings.xml | 223 --- core/src/main/res/values-uk/strings.xml | 233 --- core/src/main/res/values-vi/strings.xml | 220 --- core/src/main/res/values-zh-rCN/strings.xml | 282 --- core/src/main/res/values/strings.xml | 285 --- covercolorextractor/build.gradle.kts | 31 - .../src/main/AndroidManifest.xml | 2 - .../CoverColorExtractor.kt | 74 - .../src/main/res/values/strings.xml | 3 - crashreporting/.gitignore | 2 - crashreporting/build.gradle.kts | 40 - crashreporting/src/main/AndroidManifest.xml | 1 - .../crashreporting/CrashLoggingTree.kt | 13 - .../audiobook/crashreporting/CrashReporter.kt | 16 - .../audiobook/crashreporting/CrashReporter.kt | 28 - data/build.gradle.kts | 98 +- .../43.json | 0 .../44.json | 0 .../45.json | 0 .../46.json | 0 .../47.json | 0 .../48.json | 0 .../49.json | 0 .../50.json | 2 +- .../51.json | 3 +- .../52.json | 2 +- .../voice.data.repo.internals.AppDb/53.json | 452 +++++ .../voice.data.repo.internals.AppDb/54.json | 452 +++++ .../voice.data.repo.internals.AppDb/55.json | 452 +++++ .../voice.data.repo.internals.AppDb/56.json | 459 +++++ .../voice.data.repo.internals.AppDb/57.json | 535 ++++++ .../voice.data.repo.internals.AppDb/58.json | 541 ++++++ data/src/main/AndroidManifest.xml | 1 - .../java/com/goodwy/audiobook/data/Book.kt | 68 - .../goodwy/audiobook/data/BookComparator.kt | 19 - .../com/goodwy/audiobook/data/BookContent.kt | 44 - .../com/goodwy/audiobook/data/Bookmark.kt | 45 - .../java/com/goodwy/audiobook/data/Chapter.kt | 85 - .../audiobook/data/repo/BookRepository.kt | 95 - .../audiobook/data/repo/BookmarkRepo.kt | 67 - .../audiobook/data/repo/internals/AppDb.kt | 27 - .../data/repo/internals/BookMetaDataDao.kt | 28 - .../data/repo/internals/BookSettingsDao.kt | 28 - .../data/repo/internals/BookStorage.kt | 115 -- .../data/repo/internals/BookmarkDao.kt | 22 - .../data/repo/internals/ChapterDao.kt | 21 - .../data/repo/internals/Converters.kt | 51 - .../data/repo/internals/MemoryRepo.kt | 71 - .../data/repo/internals/PersistenceModule.kt | 110 -- .../internals/migrations/Migration27to28.kt | 13 - .../internals/migrations/Migration34to35.kt | 15 - .../internals/migrations/Migration40to41.kt | 13 - .../repo/internals/migrations/Migration49.kt | 42 - .../internals/migrations/Migration51to52.kt | 15 - data/src/main/kotlin/voice/data/Book.kt | 55 + .../main/kotlin/voice/data/BookComparator.kt | 19 + .../src/main/kotlin/voice/data/BookContent.kt | 39 + data/src/main/kotlin/voice/data/Bookmark.kt | 36 + data/src/main/kotlin/voice/data/Chapter.kt | 70 + .../src/main/kotlin/voice/data/ChapterMark.kt | 29 + .../kotlin/voice/data/RecentBookSearch.kt | 10 + .../voice/data/RunForMaxSqlVariableNumber.kt | 20 + .../voice/data/SupportedAudioFormats.kt | 28 + .../voice/data/folders/AudiobookFolders.kt | 99 ++ .../kotlin/voice/data/folders/FolderType.kt | 7 + .../voice/data/legacy/LegacyBookMetaData.kt} | 10 +- .../voice/data/legacy/LegacyBookSettings.kt} | 18 +- .../voice/data/legacy/LegacyBookType.kt | 9 + .../voice/data/legacy/LegacyBookmark.kt | 25 + .../kotlin/voice/data/legacy/LegacyChapter.kt | 52 + .../voice/data/legacy/LegacyChapterMark.kt | 19 + .../kotlin/voice/data/repo/BookContentRepo.kt | 85 + .../kotlin/voice/data/repo/BookRepository.kt | 81 + .../kotlin/voice/data/repo/BookmarkRepo.kt | 55 + .../kotlin/voice/data/repo/ChapterRepo.kt | 57 + .../kotlin/voice/data/repo/internals/AppDb.kt | 56 + .../voice/data/repo/internals/Converters.kt | 96 + .../voice}/data/repo/internals/Cursor.kt | 2 +- .../data/repo/internals/DataBaseExtensions.kt | 37 +- .../data/repo/internals/PersistenceModule.kt | 46 + .../data/repo/internals/dao/BookContentDao.kt | 44 + .../data/repo/internals/dao/BookmarkDao.kt | 21 + .../data/repo/internals/dao/ChapterDao.kt | 20 + .../data/repo/internals/dao/LegacyBookDao.kt | 53 + .../repo/internals/dao/RecentBookSearchDao.kt | 32 + .../migrations/IncrementalMigration.kt | 2 +- .../internals/migrations/Migration23to24.kt | 20 +- .../internals/migrations/Migration24to25.kt | 69 +- .../internals/migrations/Migration25to26.kt | 19 +- .../internals/migrations/Migration26to27.kt | 21 +- .../internals/migrations/Migration27to28.kt | 19 + .../internals/migrations/Migration28to29.kt | 19 +- .../internals/migrations/Migration29to30.kt | 19 +- .../internals/migrations/Migration30to31.kt | 20 +- .../internals/migrations/Migration31to32.kt | 25 +- .../internals/migrations/Migration32to34.kt | 25 +- .../internals/migrations/Migration34to35.kt | 21 + .../internals/migrations/Migration35to36.kt | 31 +- .../internals/migrations/Migration36to37.kt | 31 +- .../internals/migrations/Migration37to38.kt | 15 +- .../internals/migrations/Migration38to39.kt | 13 +- .../internals/migrations/Migration39to40.kt | 19 +- .../internals/migrations/Migration40to41.kt | 19 + .../internals/migrations/Migration41to42.kt | 13 +- .../internals/migrations/Migration42to43.kt | 13 +- .../internals/migrations/Migration43to44.kt | 46 +- .../repo/internals/migrations/Migration44.kt | 23 +- .../repo/internals/migrations/Migration45.kt | 32 +- .../repo/internals/migrations/Migration46.kt | 16 +- .../repo/internals/migrations/Migration47.kt | 13 +- .../repo/internals/migrations/Migration48.kt | 13 +- .../repo/internals/migrations/Migration49.kt | 56 + .../repo/internals/migrations/Migration50.kt | 13 +- .../repo/internals/migrations/Migration51.kt | 19 + .../repo/internals/migrations/Migration54.kt | 32 + .../com/goodwy/audiobook/data/BookFactory.kt | 51 - .../com/goodwy/audiobook/data/BookSubject.kt | 52 - .../com/goodwy/audiobook/data/BookTest.kt | 168 -- .../goodwy/audiobook/data/ChapterFactory.kt | 23 - .../audiobook/data/repo/BookRepositoryTest.kt | 68 - .../data/repo/internals/BookStorageTest.kt | 71 - .../data/repo/internals/BookmarkDaoTest.kt | 70 - .../kotlin/voice/data/BookComparatorTest.kt | 26 + .../src/test/kotlin/voice/data/BookFactory.kt | 46 + data/src/test/kotlin/voice/data/BookTest.kt | 185 ++ .../kotlin/voice/data/RecentBookSearchTest.kt | 57 + .../voice/data/SqlStatementSplitterTest.kt | 52 + .../test/kotlin/voice/data/TestComponent.kt | 36 + .../data/repo/internals/ConvertersTest.kt | 20 +- .../repo/internals/DataBaseMigratorTest.kt | 156 +- .../migrations/Migration39to40Test.kt | 28 +- .../migrations/Migration40to41Test.kt | 28 +- dependency_updates.gradle | 8 - fastlane/.gitignore | 2 - fastlane/Fastfile | 44 - ffmpeg/build.gradle.kts | 26 +- ffmpeg/src/main/AndroidManifest.xml | 1 - .../com/goodwy/audiobook/ffmpeg/ffmpeg.kt | 39 - ffmpeg/src/main/kotlin/voice/ffmpeg/FFMpeg.kt | 65 + folderPicker/build.gradle.kts | 28 + .../voice/folderPicker/FolderTypeIcon.kt | 35 + .../folderPicker/FileTypeSelectionDialog.kt | 137 ++ .../folderPicker/FolderPickerView.kt | 224 +++ .../folderPicker/FolderPickerViewModel.kt | 86 + .../folderPicker/FolderPickerViewState.kt | 20 + .../folderPicker/selectType/AddingFab.kt | 58 + .../selectType/DocumentFileCache.kt | 50 + .../folderPicker/selectType/FolderMode.kt | 6 + .../folderPicker/selectType/FolderModeBook.kt | 53 + .../selectType/FolderModeSelectionCard.kt | 97 + .../selectType/SelectFolderType.kt | 204 +++ .../selectType/SelectFolderTypeViewModel.kt | 129 ++ .../selectType/SelectFolderTypeViewState.kt | 15 + .../SelectFolderTypeViewModelTest.kt | 69 + gradle.properties | 16 +- gradle/libs.versions.toml | 159 ++ gradle/wrapper/gradle-wrapper.jar | Bin 58694 -> 61574 bytes gradle/wrapper/gradle-wrapper.properties | 4 +- gradlew | 269 +-- gradlew.bat | 35 +- lint.xml | 21 + logging/core/build.gradle.kts | 3 + .../main/kotlin/voice/logging/core/Logger.kt | 89 + logging/crashlytics/build.gradle.kts | 8 + .../crashlytics/src/main/AndroidManifest.xml | 18 + .../crashlytics/CrashlyticsLogWriter.kt | 21 + .../CrashlyticsLogWriterInitializer.kt | 15 + logging/debug/build.gradle.kts | 7 + logging/debug/src/main/AndroidManifest.xml | 18 + .../voice/logging/debug/DebugLogWriter.kt | 72 + .../debug/DebugLogWriterInitializer.kt | 15 + metadata/en-US/Description.txt | 14 - metadata/en-US/images/0.jpg | Bin 456269 -> 0 bytes metadata/en-US/images/Mini/phone1.jpg | Bin 79869 -> 0 bytes metadata/en-US/images/Mini/phone2.jpg | Bin 81002 -> 0 bytes metadata/en-US/images/Mini/phone3.jpg | Bin 74407 -> 0 bytes metadata/en-US/images/Mini/phone4.jpg | Bin 74586 -> 0 bytes metadata/en-US/images/Mini/phone5.jpg | Bin 85153 -> 0 bytes metadata/en-US/images/Mini/phone6.jpg | Bin 85354 -> 0 bytes metadata/en-US/images/Mini/tab1.jpg | Bin 102687 -> 0 bytes metadata/en-US/images/Mini/tab2.jpg | Bin 93189 -> 0 bytes metadata/en-US/images/Mini/tab3.jpg | Bin 96172 -> 0 bytes metadata/en-US/images/featureGraphic.jpg | Bin 144100 -> 0 bytes metadata/en-US/images/icon.png | Bin 29419 -> 0 bytes metadata/en-US/images/phone1.jpg | Bin 381706 -> 0 bytes metadata/en-US/images/phone2.jpg | Bin 390076 -> 0 bytes metadata/en-US/images/phone3.jpg | Bin 384249 -> 0 bytes metadata/en-US/images/phone4.jpg | Bin 390415 -> 0 bytes metadata/en-US/images/phone5.jpg | Bin 410506 -> 0 bytes metadata/en-US/images/phone6.jpg | Bin 421425 -> 0 bytes metadata/en-US/images/tab1.jpg | Bin 341174 -> 0 bytes metadata/en-US/images/tab2.jpg | Bin 338273 -> 0 bytes metadata/en-US/images/tab3.jpg | Bin 323850 -> 0 bytes metadata/ru-RU/Description.txt | 14 - metadata/ru-RU/images/0.jpg | Bin 456269 -> 0 bytes metadata/ru-RU/images/featureGraphic.jpg | Bin 144100 -> 0 bytes metadata/ru-RU/images/icon.png | Bin 29419 -> 0 bytes metadata/ru-RU/images/phone1.jpg | Bin 381706 -> 0 bytes metadata/ru-RU/images/phone2.jpg | Bin 390076 -> 0 bytes metadata/ru-RU/images/phone3.jpg | Bin 384249 -> 0 bytes metadata/ru-RU/images/phone4.jpg | Bin 390415 -> 0 bytes metadata/ru-RU/images/phone5.jpg | Bin 410506 -> 0 bytes metadata/ru-RU/images/phone6.jpg | Bin 421425 -> 0 bytes metadata/ru-RU/images/tab1.jpg | Bin 341174 -> 0 bytes metadata/ru-RU/images/tab2.jpg | Bin 338273 -> 0 bytes metadata/ru-RU/images/tab3.jpg | Bin 323850 -> 0 bytes metadata/zh-CN/Description.txt | 14 - metadata/zh-CN/images/0.jpg | Bin 456269 -> 0 bytes metadata/zh-CN/images/featureGraphic.jpg | Bin 144100 -> 0 bytes metadata/zh-CN/images/icon.png | Bin 29419 -> 0 bytes metadata/zh-CN/images/phone1.jpg | Bin 381706 -> 0 bytes metadata/zh-CN/images/phone2.jpg | Bin 390076 -> 0 bytes metadata/zh-CN/images/phone3.jpg | Bin 384249 -> 0 bytes metadata/zh-CN/images/phone4.jpg | Bin 390415 -> 0 bytes metadata/zh-CN/images/phone5.jpg | Bin 410506 -> 0 bytes metadata/zh-CN/images/phone6.jpg | Bin 421425 -> 0 bytes metadata/zh-CN/images/tab1.jpg | Bin 341174 -> 0 bytes metadata/zh-CN/images/tab2.jpg | Bin 338273 -> 0 bytes metadata/zh-CN/images/tab3.jpg | Bin 323850 -> 0 bytes migration/build.gradle.kts | 24 + .../voice/migration/MigrationViewModel.kt | 241 +++ .../kotlin/voice/migration/views/Migration.kt | 290 +++ .../migration/views/MigrationViewState.kt | 33 + playback/build.gradle.kts | 60 +- playback/src/main/AndroidManifest.xml | 1 - .../NotifyOnAutoConnectionChange.kt | 38 - .../audiobook/playback/di/PerService.kt | 6 - .../playback/di/PlaybackServiceModule.kt | 24 - .../playback/notification/CachedImage.kt | 13 - .../NotificationChannelCreator.kt | 42 - .../notification/ToBookIntentProvider.kt | 8 - .../playback/player/DataSourceConverter.kt | 52 - .../audiobook/playback/player/Equalizer.kt | 47 - .../audiobook/playback/player/LoudnessGain.kt | 66 - .../audiobook/playback/player/MediaPlayer.kt | 497 ------ .../playback/player/exoExtensions.kt | 94 - .../playback/playstate/PlayStateManager.kt | 62 - .../playback/playstate/PlayerState.kt | 8 - .../playback/session/BookUriConverter.kt | 66 - .../playback/session/MediaSessionCallback.kt | 222 --- .../playback/session/headset/HeadsetState.kt | 7 - .../playback/session/search/BookSearch.kt | 12 - .../session/search/BookSearchHandler.kt | 101 -- .../session/search/BookSearchParser.kt | 28 - .../voice}/playback/PlayerController.kt | 58 +- .../AndroidAutoConnectedReceiver.kt | 22 +- .../NotifyOnAutoConnectionChange.kt | 38 + .../voice}/playback/di/PlaybackComponent.kt | 11 +- .../di/PlaybackComponentFactoryProvider.kt | 2 +- .../kotlin/voice/playback/di/PlaybackScope.kt | 6 + .../playback/di/PlaybackServiceModule.kt | 60 + .../kotlin/voice/playback/misc/Decibel.kt | 13 + .../playback/misc/FlowBroadcastReceiver.kt} | 4 +- .../kotlin/voice/playback/misc/VolumeGain.kt | 114 ++ .../playback/notification/CachedImage.kt | 10 + .../NotificationChannelCreator.kt | 39 + .../notification/NotificationCreator.kt | 93 +- .../notification/ToBookIntentProvider.kt | 8 + .../playback/player/DataSourceConverter.kt | 14 + .../kotlin/voice/playback/player/ExoPlayer.kt | 114 ++ .../voice/playback/player/MediaPlayer.kt | 465 +++++ .../player/OnlyAudioRenderersFactory.kt | 36 + .../playback/playstate/PlayStateManager.kt | 49 + .../voice/playback/playstate/PlayerState.kt | 8 + .../playback/session/BookUriConverter.kt | 62 + .../voice}/playback/session/ChangeNotifier.kt | 135 +- .../playback/session/MediaBrowserHelper.kt | 90 +- .../playback/session/MediaSessionCallback.kt | 278 +++ .../playback/session/PlaybackService.kt | 139 +- .../playback/session/headset/HeadsetState.kt | 7 + .../headset/HeadsetStateChangeFlow.kt} | 12 +- .../session/search/BookSearchHandler.kt | 104 ++ .../session/search/BookSearchParser.kt | 31 + .../playback/session/search/VoiceSearch.kt | 8 + .../playback/session}/BookUriConverterTest.kt | 22 +- .../session/search/BookSearchHandlerTest.kt | 169 ++ playbackScreen/build.gradle.kts | 33 + .../voice/playbackScreen/AudioVolume.kt | 25 + .../playbackScreen/BatteryOptimization.kt | 18 + .../playbackScreen/BookPlayController.kt | 149 ++ .../voice/playbackScreen/BookPlayView.kt | 1575 +++++++++++++++++ .../playbackScreen/BookPlayViewEffect.kt | 7 + .../voice/playbackScreen/BookPlayViewModel.kt | 328 ++++ .../voice/playbackScreen/BookPlayViewState.kt | 63 + .../playbackScreen/SelectChapterDialog.kt | 51 + .../voice/playbackScreen/SpeedDialog.kt | 108 ++ .../voice/playbackScreen/VolumeGainDialog.kt | 32 + .../playbackScreen/VolumeGainFormatter.kt | 15 + plugins/build.gradle.kts | 32 + plugins/settings.gradle.kts | 16 + plugins/src/main/kotlin/AppPlugin.kt | 17 + plugins/src/main/kotlin/ComposePlugin.kt | 51 + plugins/src/main/kotlin/LibraryPlugin.kt | 17 + plugins/src/main/kotlin/baseSetup.kt | 73 + prefs/.gitignore | 1 - prefs/build.gradle.kts | 39 - prefs/src/main/AndroidManifest.xml | 1 - .../java/com/goodwy/audiobook/prefs/Pref.kt | 12 - release.main.kts | 38 - renovate.json | 18 + {covercolorextractor => scanner}/.gitignore | 0 scanner/build.gradle.kts | 32 + .../kotlin/voice/app/scanner/BookParser.kt | 132 ++ .../voice/app/scanner/BookmarkMigrator.kt | 54 + .../kotlin/voice/app/scanner/ChapterParser.kt | 54 + .../kotlin/voice/app/scanner/CoverSaver.kt | 103 ++ .../kotlin/voice/app/scanner/CoverScanner.kt | 111 ++ .../voice/app/scanner/FFProbeAnalyze.kt | 47 + .../kotlin/voice/app/scanner/MediaAnalyzer.kt | 51 + .../voice/app/scanner/MediaScanTrigger.kt | 57 + .../kotlin/voice/app/scanner/MediaScanner.kt | 56 + .../kotlin/voice/app/scanner}/Metadata.kt | 16 +- .../voice/app/scanner/MediaAnalyzerTest.kt | 44 + .../voice/app/scanner/MediaScannerTest.kt | 209 +++ search/build.gradle.kts | 13 + .../main/kotlin/voice/search/BookSearch.kt | 25 + .../test/kotlin/voice/search/BookFactory.kt | 48 + .../kotlin/voice/search/BookSearchTest.kt | 137 ++ settings.gradle.kts | 50 +- settings/build.gradle.kts | 27 + .../kotlin/voice/settings/SettingsListener.kt | 38 + .../voice/settings/SettingsViewModel.kt | 275 +++ .../voice/settings/SettingsViewState.kt | 29 + .../main/kotlin/voice/settings/about/About.kt | 260 +++ .../voice/settings/about/AboutListener.kt | 9 + .../voice/settings/about/AboutViewModel.kt | 51 + .../voice/settings/about/AboutViewState.kt | 6 + .../voice/settings/purchase/Purchase.kt | 403 +++++ .../settings/purchase/PurchaseListener.kt | 9 + .../settings/purchase/PurchaseViewModel.kt | 59 + .../settings/purchase/PurchaseViewState.kt | 8 + .../kotlin/voice/settings/views/AppVersion.kt | 41 + .../voice/settings/views/AutoRewindRow.kt | 74 + .../voice/settings/views/ColorThemeRow.kt | 61 + .../voice/settings/views/DarkThemeRow.kt | 36 + .../voice/settings/views/GridModeRow.kt | 69 + .../voice/settings/views/HsvColorDialog.kt | 193 ++ .../settings/views/MiniPlayerStyleRow.kt | 63 + .../settings/views/PlayButtonStyleRow.kt | 73 + .../settings/views/PlayerBackgroundRow.kt | 61 + .../voice/settings/views/RadioButtonDialog.kt | 142 ++ .../voice/settings/views/ResumeOnReplugRow.kt | 57 + .../voice/settings/views/SeekTimeRow.kt | 76 + .../kotlin/voice/settings/views/Settings.kt | 494 ++++++ .../settings/views/ShowSliderVolumeRow.kt | 39 + .../settings/views/SkipButtonStyleRow.kt | 73 + .../kotlin/voice/settings/views/ThemeRow.kt | 70 + .../voice/settings/views/TimeSettingDialog.kt | 71 + .../views/TransparentNavigationRow.kt | 44 + settings/src/main/res/values/dimen.xml | 4 + signing/.gitignore | 3 +- signing/ci/{ci.jks => signing.keystore} | Bin signing/ci/signing.properties | 1 - sleepTimer/build.gradle.kts | 33 + .../kotlin/voice/sleepTimer/ShakeDetector.kt | 34 + .../kotlin/voice/sleepTimer/SleepTimer.kt | 181 ++ .../sleepTimer/SleepTimerDialogController.kt | 113 ++ .../sleepTimer/SleepTimerDialogViewModel.kt | 90 + .../SleepTimerListDialogController.kt | 107 ++ .../src/main/res/drawable/backspace.xml | 9 + .../src/main/res/drawable/bottom_sheet.xml | 6 +- sleepTimer/src/main/res/drawable/check.xml | 9 + .../src/main/res/drawable/divider.xml | 4 +- .../src/main/res/layout/dialog_sleep.xml | 230 +++ .../src/main/res/layout/dialog_sleep_list.xml | 137 ++ sleepTimer/src/main/res/values/styles.xml | 22 + .../SleepTimerDialogViewModelTest.kt | 152 ++ {core => strings}/.gitignore | 0 strings/build.gradle.kts | 3 + strings/src/main/res/values-af/strings.xml | 62 + strings/src/main/res/values-ar/strings.xml | 42 + strings/src/main/res/values-bg/strings.xml | 58 + strings/src/main/res/values-br/strings.xml | 20 + strings/src/main/res/values-cs/strings.xml | 65 + strings/src/main/res/values-da/strings.xml | 113 ++ strings/src/main/res/values-de/strings.xml | 115 ++ strings/src/main/res/values-el/strings.xml | 61 + strings/src/main/res/values-es/strings.xml | 85 + .../src/main/res/values-fa-rIR/strings.xml | 54 + strings/src/main/res/values-fr/strings.xml | 117 ++ strings/src/main/res/values-ga/strings.xml | 42 + .../src/main/res/values-hi-rIN/strings.xml | 57 + strings/src/main/res/values-hi/strings.xml | 57 + strings/src/main/res/values-hu/strings.xml | 88 + strings/src/main/res/values-it/strings.xml | 64 + strings/src/main/res/values-ja/strings.xml | 113 ++ strings/src/main/res/values-kab/strings.xml | 30 + strings/src/main/res/values-ko/strings.xml | 61 + .../src/main/res/values-lt-rLT/strings.xml | 117 ++ .../src/main/res/values-ne-rNP/strings.xml | 42 + .../src/main/res/values-nl-rNL/strings.xml | 115 ++ strings/src/main/res/values-oc/strings.xml | 52 + .../src/main/res/values-pl-rPL/strings.xml | 21 + strings/src/main/res/values-pl/strings.xml | 119 ++ .../src/main/res/values-pt-rBR/strings.xml | 64 + .../src/main/res/values-pt-rPT/strings.xml | 46 + strings/src/main/res/values-ru/strings.xml | 119 ++ strings/src/main/res/values-sk/strings.xml | 68 + strings/src/main/res/values-sl/strings.xml | 59 + strings/src/main/res/values-sv/strings.xml | 115 ++ strings/src/main/res/values-sw/strings.xml | 54 + strings/src/main/res/values-tr/strings.xml | 63 + strings/src/main/res/values-uk/strings.xml | 90 + strings/src/main/res/values-vi/strings.xml | 61 + .../src/main/res/values-zh-rCN/strings.xml | 114 ++ strings/src/main/res/values/strings.xml | 130 ++ update_screenshots.main.kts | 47 + 1165 files changed, 32464 insertions(+), 37111 deletions(-) create mode 100644 .gitattributes create mode 100644 .github/ISSUE_TEMPLATE/bug.yml delete mode 100644 .github/ISSUE_TEMPLATE/bug_report.md create mode 100644 .github/ISSUE_TEMPLATE/config.yml delete mode 100644 .github/ISSUE_TEMPLATE/feature_request.md create mode 100644 .idea/inspectionProfiles/ktlint.xml create mode 100644 .idea/inspectionProfiles/profiles_settings.xml create mode 100644 .idea/jsonSchemas.xml delete mode 100644 .idea/modules.xml delete mode 100644 Gemfile delete mode 100644 app/lint.xml create mode 100644 app/src/androidTest/assets/covers/Dream in a boat/cover.jpg create mode 100644 app/src/androidTest/assets/covers/Dream in a boat/info.txt create mode 100644 app/src/androidTest/assets/covers/Dream in a boat/proof.pdf create mode 100644 app/src/androidTest/assets/covers/El Guitarrero/cover.jpg create mode 100644 app/src/androidTest/assets/covers/El Guitarrero/info.txt create mode 100644 app/src/androidTest/assets/covers/El Guitarrero/proof.pdf create mode 100644 app/src/androidTest/assets/covers/Snakey/cover.jpg create mode 100644 app/src/androidTest/assets/covers/Snakey/info.txt create mode 100644 app/src/androidTest/assets/covers/Snakey/proof.pdf create mode 100644 app/src/androidTest/assets/covers/The boy and the cave/cover.jpg create mode 100644 app/src/androidTest/assets/covers/The boy and the cave/info.txt create mode 100644 app/src/androidTest/assets/covers/The boy and the cave/proof.pdf create mode 100644 app/src/androidTest/assets/covers/The fabulous Geysha/cover.jpg create mode 100644 app/src/androidTest/assets/covers/The fabulous Geysha/info.txt create mode 100644 app/src/androidTest/assets/covers/The fabulous Geysha/proof.pdf create mode 100644 app/src/androidTest/assets/covers/Treeman/cover.jpg create mode 100644 app/src/androidTest/assets/covers/Treeman/info.txt create mode 100644 app/src/androidTest/assets/covers/Treeman/proof.pdf delete mode 100644 app/src/androidTest/java/com/goodwy/audiobook/misc/MediaAnalyzerTest.kt create mode 100644 app/src/androidTest/kotlin/voice/app/misc/MediaAnalyzerInstrumentationTest.kt create mode 100644 app/src/androidTest/kotlin/voice/app/misc/ScreenshotCapture.kt delete mode 100644 app/src/androidTest/res/raw/intact2.mp3 delete mode 100644 app/src/main/assets/themes/cyanea_themes.json delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/BaseActivity.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/BookAdder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/GalleryPicker.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/MainActivity.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/about/AboutController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/about/AboutViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/about/AboutViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/about/AboutViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/audio/LoudnessDialog.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookCategory/BookCategoryAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookCategory/BookCategoryController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookCategory/BookCategoryItemDecoration.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookCategory/BookCategoryViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/BookOverviewController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/BookOverviewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/BookOverviewViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/EditBookAuthorDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/EditBookBottomSheetController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/EditBookTitleDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/EditCoverDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/GridMode.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/BookOverviewAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/BookOverviewClick.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/BookOverviewDiff.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/BookOverviewItem.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/BookOverviewItemDecoration.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/GridBookOverviewComponent.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/LoadBookCover.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/header/BookOverviewHeader.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/BookPlayController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/BookPlayViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/BookPlayViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/BookPlayViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/JumpToPositionDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/SeekDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/SeekRewindDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/SleepTimerDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/SleepTimerListDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/selectchapter/SelectChapterDialog.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/selectchapter/SelectChapterViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/selectchapter/SelectChapterViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookPlaying/selectchapter/SelectChapterViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookmarks/dialogs/DeleteBookmarkDialog.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/bookmarks/list/BookMarkHolder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/ColorContributeView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/ContributeController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/ContributeViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/ContributeViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/DarkContributeView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/IconContributeView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/LifebuoyContributeView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/contribute/PlusContributeView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/externalStorageMissing/NoExternalStorageActivity.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/FolderChooserActivity.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/FolderChooserAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/FolderChooserPresenter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/FolderChooserView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/Holder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderChooser/StorageDirFinder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderOverviewAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderOverviewController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderOverviewDiffHelper.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderOverviewHolder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/folderOverview/FolderOverviewPresenter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/gridCount/GridCount.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/imagepicker/CoverFromInternetController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/MiniPlayerButtonView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/MiniPlayerFloatingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/MiniPlayerStyleDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/PrefAppearanceUIController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/PrefAppearanceUIViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/PrefAppearanceUIViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUI/PrefAppearanceUIViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/CoverSettingsDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PlayStyleClassicView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PlayStyleDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PlayStyleRoundedView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PrefAppearanceUIPlayerController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PrefAppearanceUIPlayerViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PrefAppearanceUIPlayerViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/PrefAppearanceUIPlayerViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/RewindStyleClassicView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/RewindStyleDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefAppearanceUIPlayer/RewindStyleRoundedView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefBeta/PrefBetaController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefBeta/PrefBetaViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefBeta/PrefBetaViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefBeta/PrefBetaViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefSkipInterval/PrefSkipIntervalController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefSkipInterval/PrefSkipIntervalViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefSkipInterval/PrefSkipIntervalViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/prefSkipInterval/PrefSkipIntervalViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/ChevronSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/ColorPrimaryDarkSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/ColorPrimarySettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/DividerSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/DoubleSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/OneSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/PaySettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SettingsController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SettingsViewEffect.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SettingsViewModel.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SettingsViewState.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SingleSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/SwitchSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/TripleSettingView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/AutoRewindDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ChangelogDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorAccentIosDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorAccentMaterialDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorAccentOriginalDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorAccentPalettesDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorPrimaryIosDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorPrimaryMaterialDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorPrimaryOriginalDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/ColorPrinaryPalettesDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/LicenseDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/PlaybackSpeedDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/SupportDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/features/settings/dialogs/WhatNewDialogController.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/injection/AndroidModule.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/injection/App.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/injection/AppComponent.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/injection/PlaybackModule.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/injection/SortingModule.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/ApplicationIdProviderImpl.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/CircleOutlineProvider.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/DarkThemeSettable.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/FileRecognition.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/MediaAnalyzer.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/MultiLineSpinnerAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/PermissionHelper.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/Permissions.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/Resources.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/RoundRectOutlineProvider.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/RouterProvider.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/StorageMounted.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/StrictModeInit.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/UUID.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/UUIDAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/androidExtensions.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/conductor/ClearAfterDestroyViewNullable.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/conductor/ControllerLifecycleOwner.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/groupie/BindingItem.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/recyclerComponent/AdapterComponent.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/recyclerComponent/CompositeAdapterHelper.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/recyclerComponent/CompositeListAdapter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/misc/viewExtensions.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/mvp/PresenterDelegate.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/mvp/RxBaseActivity.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/playback/OnlyAudioRenderersFactory.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/playback/ShakeDetector.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/playback/ShakeListener.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/playback/SleepTimer.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/AudioVolumeContentObserver.java delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/AudioVolumeObserver.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/BetterSnack.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/BlurFactory.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/BookChangeHandler.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/CircularRevealBookPlayTransition.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/Colors.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/CoverFromDiscCollector.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/DefaultAnimatorListener.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/ExtensionsHolder.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/OnAudioVolumeChangedListener.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/PlayPauseColorDrawableSetter.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/ResourceHelper.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/RoundProgressView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/RoundedTransformation.java delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/SimpleTarget.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/SquareProgressView.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/TextIconDrawable.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/ThemeUtil.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/noPauseAnimator/AnimatorListenerWrapper.kt delete mode 100644 app/src/main/java/com/goodwy/audiobook/uitools/noPauseAnimator/NoPauseAnimator.kt create mode 100644 app/src/main/kotlin/voice/app/AppController.kt create mode 100644 app/src/main/kotlin/voice/app/features/BillingViewModel.kt create mode 100644 app/src/main/kotlin/voice/app/features/MainActivity.kt create mode 100644 app/src/main/kotlin/voice/app/features/bookOverview/EditCoverDialogController.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/BookmarkController.kt (65%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/BookmarkPresenter.kt (56%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/BookmarkView.kt (58%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/dialogs/AddBookmarkDialog.kt (78%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/dialogs/EditBookmarkDialog.kt (71%) create mode 100644 app/src/main/kotlin/voice/app/features/bookmarks/list/BookMarkHolder.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/list/BookmarkAdapter.kt (82%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/list/BookmarkClickListener.kt (67%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/bookmarks/list/BookmarkDiffUtilCallback.kt (81%) create mode 100644 app/src/main/kotlin/voice/app/features/imagepicker/CoverFromInternetController.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/imagepicker/CropOverlay.kt (82%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/widget/BaseWidgetProvider.kt (83%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/widget/TriggerWidgetOnChange.kt (57%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/features/widget/WidgetUpdater.kt (60%) create mode 100644 app/src/main/kotlin/voice/app/injection/AndroidModule.kt create mode 100644 app/src/main/kotlin/voice/app/injection/App.kt create mode 100644 app/src/main/kotlin/voice/app/injection/AppComponent.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/injection/PrefsModule.kt (50%) create mode 100644 app/src/main/kotlin/voice/app/misc/AppInfoProviderImpl.kt create mode 100644 app/src/main/kotlin/voice/app/misc/StrictModeInit.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/misc/ToBookIntentProviderImpl.kt (52%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/misc/conductor/ChangeHandlerCoordinatorLayout.kt (83%) rename app/src/main/{java/com/goodwy/audiobook/misc/conductor/conductorExtensions.kt => kotlin/voice/app/misc/conductor/Conductor.kt} (72%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/mvp/MvpController.kt (85%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/mvp/Presenter.kt (85%) create mode 100644 app/src/main/kotlin/voice/app/serialization/KotlinxDataStoreSerializer.kt create mode 100644 app/src/main/kotlin/voice/app/serialization/SerializableDataStoreFactory.kt create mode 100644 app/src/main/kotlin/voice/app/serialization/UriSerializer.kt rename app/src/main/{java/com/goodwy/audiobook/uitools/AnimationHelper.kt => kotlin/voice/app/uitools/AnimateFloat.kt} (81%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/CropTransformation.kt (50%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/InsetUtil.kt (97%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/Interpolators.kt (90%) create mode 100644 app/src/main/kotlin/voice/app/uitools/SettingsContentObserver.kt rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/VerticalChangeHandler.kt (83%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/VerticalDividerItemDecoration.kt (81%) rename app/src/main/{java/com/goodwy/audiobook => kotlin/voice/app}/uitools/ViewBindingHolder.kt (81%) delete mode 100644 app/src/main/res/anim/rotate.xml delete mode 100644 app/src/main/res/color-v26/gradient_launcher_finish.xml delete mode 100644 app/src/main/res/color-v26/gradient_launcher_shadow.xml create mode 100644 app/src/main/res/color/gradient_launcher_finish.xml create mode 100644 app/src/main/res/color/gradient_launcher_shadow.xml delete mode 100644 app/src/main/res/drawable-night/dialog_title_backgroung.xml delete mode 100644 app/src/main/res/drawable-night/mini_player.xml delete mode 100644 app/src/main/res/drawable-night/mini_player_button.png delete mode 100644 app/src/main/res/drawable-night/mini_player_floating.png delete mode 100644 app/src/main/res/drawable/alarm.xml delete mode 100644 app/src/main/res/drawable/audiobook.xml delete mode 100644 app/src/main/res/drawable/avd_pause_to_play.xml delete mode 100644 app/src/main/res/drawable/avd_pause_to_play_color.xml delete mode 100644 app/src/main/res/drawable/avd_play_to_pause.xml delete mode 100644 app/src/main/res/drawable/avd_play_to_pause_color.xml delete mode 100644 app/src/main/res/drawable/backspace.xml delete mode 100644 app/src/main/res/drawable/book_play_backgroung.xml delete mode 100644 app/src/main/res/drawable/bookmark.xml delete mode 100644 app/src/main/res/drawable/bookmark_outline.xml delete mode 100644 app/src/main/res/drawable/checkbox_selector.xml delete mode 100644 app/src/main/res/drawable/chip_background.xml delete mode 100644 app/src/main/res/drawable/close.xml delete mode 100644 app/src/main/res/drawable/current_playing_circle_background.xml delete mode 100644 app/src/main/res/drawable/dialog_title_backgroung.xml delete mode 100644 app/src/main/res/drawable/fab_label_background.xml delete mode 100644 app/src/main/res/drawable/folder_libraries.xml delete mode 100644 app/src/main/res/drawable/folder_multiple.xml delete mode 100644 app/src/main/res/drawable/format_author.xml delete mode 100644 app/src/main/res/drawable/format_text.xml delete mode 100644 app/src/main/res/drawable/ic_album.xml delete mode 100644 app/src/main/res/drawable/ic_arrow_upward.xml delete mode 100644 app/src/main/res/drawable/ic_changelog.xml delete mode 100644 app/src/main/res/drawable/ic_check_circle.xml delete mode 100644 app/src/main/res/drawable/ic_check_circle_rotation.xml delete mode 100644 app/src/main/res/drawable/ic_chevron_down.xml delete mode 100644 app/src/main/res/drawable/ic_chevron_left.xml delete mode 100644 app/src/main/res/drawable/ic_chevron_right.xml delete mode 100644 app/src/main/res/drawable/ic_chevron_up.xml delete mode 100644 app/src/main/res/drawable/ic_clock.xml delete mode 100644 app/src/main/res/drawable/ic_contents.xml rename app/src/main/res/drawable/{delete.xml => ic_delete.xml} (87%) delete mode 100644 app/src/main/res/drawable/ic_download.xml delete mode 100644 app/src/main/res/drawable/ic_equalizer.xml delete mode 100644 app/src/main/res/drawable/ic_favorite.xml delete mode 100644 app/src/main/res/drawable/ic_folder.xml delete mode 100644 app/src/main/res/drawable/ic_folder_24dp.xml delete mode 100644 app/src/main/res/drawable/ic_folder_up.xml delete mode 100644 app/src/main/res/drawable/ic_github.xml delete mode 100644 app/src/main/res/drawable/ic_headphones.xml delete mode 100644 app/src/main/res/drawable/ic_image.xml delete mode 100644 app/src/main/res/drawable/ic_info.xml create mode 100644 app/src/main/res/drawable/ic_launcher.xml delete mode 100644 app/src/main/res/drawable/ic_launcher_background.xml create mode 100644 app/src/main/res/drawable/ic_launcher_foreground.xml create mode 100644 app/src/main/res/drawable/ic_launcher_monochrome.xml create mode 100644 app/src/main/res/drawable/ic_launcher_splash.xml delete mode 100644 app/src/main/res/drawable/ic_licenses.xml delete mode 100644 app/src/main/res/drawable/ic_lock.xml create mode 100644 app/src/main/res/drawable/ic_more.xml delete mode 100644 app/src/main/res/drawable/ic_more_horiz.xml delete mode 100644 app/src/main/res/drawable/ic_more_vert.xml delete mode 100644 app/src/main/res/drawable/ic_new.xml delete mode 100644 app/src/main/res/drawable/ic_palettes.xml delete mode 100644 app/src/main/res/drawable/ic_pay.xml delete mode 100644 app/src/main/res/drawable/ic_percent.xml delete mode 100644 app/src/main/res/drawable/ic_percent_white.xml delete mode 100644 app/src/main/res/drawable/ic_playbooks_background.xml delete mode 100644 app/src/main/res/drawable/ic_point.xml delete mode 100644 app/src/main/res/drawable/ic_repeat_off.xml delete mode 100644 app/src/main/res/drawable/ic_setting.xml delete mode 100644 app/src/main/res/drawable/ic_settings.xml delete mode 100644 app/src/main/res/drawable/ic_share.xml create mode 100644 app/src/main/res/drawable/ic_shortcut_play.xml delete mode 100644 app/src/main/res/drawable/ic_shortcut_play_foreground.xml delete mode 100644 app/src/main/res/drawable/ic_skip_next.xml delete mode 100644 app/src/main/res/drawable/ic_skip_previous.xml delete mode 100644 app/src/main/res/drawable/ic_translate.xml delete mode 100644 app/src/main/res/drawable/ic_uncheck_circle.xml delete mode 100644 app/src/main/res/drawable/ic_view_grid.xml delete mode 100644 app/src/main/res/drawable/ic_view_list.xml delete mode 100644 app/src/main/res/drawable/ic_volume_down.xml delete mode 100644 app/src/main/res/drawable/ic_volume_up.xml delete mode 100644 app/src/main/res/drawable/image_color.xml delete mode 100644 app/src/main/res/drawable/image_dark.xml delete mode 100644 app/src/main/res/drawable/image_lifebuoy.xml delete mode 100644 app/src/main/res/drawable/image_plus.xml delete mode 100644 app/src/main/res/drawable/logo.xml delete mode 100644 app/src/main/res/drawable/mini_player.xml delete mode 100644 app/src/main/res/drawable/mini_player_button.png delete mode 100644 app/src/main/res/drawable/mini_player_floating.png delete mode 100644 app/src/main/res/drawable/outline.xml delete mode 100644 app/src/main/res/drawable/selected_spinner_background.xml delete mode 100644 app/src/main/res/drawable/shadow_top.xml delete mode 100644 app/src/main/res/drawable/sort_variant.xml delete mode 100644 app/src/main/res/drawable/speedometer.xml create mode 100644 app/src/main/res/drawable/splash_drawable.xml delete mode 100644 app/src/main/res/drawable/splash_screen.xml delete mode 100644 app/src/main/res/drawable/usb.xml delete mode 100644 app/src/main/res/drawable/volume_plus.xml delete mode 100644 app/src/main/res/drawable/widget_white_background.xml delete mode 100644 app/src/main/res/drawable/wifi_off.xml delete mode 100644 app/src/main/res/layout-land/book_overview.xml delete mode 100644 app/src/main/res/layout-land/book_play.xml delete mode 100644 app/src/main/res/layout-long-land/book_play.xml delete mode 100644 app/src/main/res/layout-long-port/book_play.xml delete mode 100644 app/src/main/res/layout-sw600dp-land/book_overview.xml delete mode 100644 app/src/main/res/layout-sw600dp-land/book_play.xml delete mode 100644 app/src/main/res/layout-sw600dp-port/book_overview.xml delete mode 100644 app/src/main/res/layout-sw600dp/book_overview.xml delete mode 100644 app/src/main/res/layout-sw600dp/book_play.xml delete mode 100644 app/src/main/res/layout/about.xml delete mode 100644 app/src/main/res/layout/activity_folder_chooser.xml delete mode 100644 app/src/main/res/layout/activity_folder_chooser_adapter_row_layout.xml delete mode 100644 app/src/main/res/layout/activity_folder_overview_row_layout.xml delete mode 100644 app/src/main/res/layout/activity_no_external.xml delete mode 100644 app/src/main/res/layout/book_category.xml delete mode 100644 app/src/main/res/layout/book_more_bottom_sheet.xml delete mode 100644 app/src/main/res/layout/book_overview.xml delete mode 100644 app/src/main/res/layout/book_overview_header.xml delete mode 100644 app/src/main/res/layout/book_overview_row_grid.xml delete mode 100644 app/src/main/res/layout/book_overview_row_list.xml delete mode 100644 app/src/main/res/layout/book_play.xml delete mode 100644 app/src/main/res/layout/book_play_spinner.xml delete mode 100644 app/src/main/res/layout/contribute.xml delete mode 100644 app/src/main/res/layout/dialog_amount_chooser.xml delete mode 100644 app/src/main/res/layout/dialog_mini_player_style.xml delete mode 100644 app/src/main/res/layout/dialog_play_button_style.xml delete mode 100644 app/src/main/res/layout/dialog_radius_chooser.xml delete mode 100644 app/src/main/res/layout/dialog_rewind_button_style.xml delete mode 100644 app/src/main/res/layout/dialog_select_chapter_title.xml delete mode 100644 app/src/main/res/layout/dialog_sleep.xml delete mode 100644 app/src/main/res/layout/dialog_sleep_list.xml delete mode 100644 app/src/main/res/layout/dialog_sleep_modern.xml delete mode 100644 app/src/main/res/layout/dialog_time_picker.xml delete mode 100644 app/src/main/res/layout/folder_overview.xml delete mode 100644 app/src/main/res/layout/loudness.xml delete mode 100644 app/src/main/res/layout/merge_contribute_row_color.xml delete mode 100644 app/src/main/res/layout/merge_contribute_row_dark.xml delete mode 100644 app/src/main/res/layout/merge_contribute_row_icon.xml delete mode 100644 app/src/main/res/layout/merge_contribute_row_lifebuoy.xml delete mode 100644 app/src/main/res/layout/merge_contribute_row_plus.xml delete mode 100644 app/src/main/res/layout/merge_mini_player_button.xml delete mode 100644 app/src/main/res/layout/merge_mini_player_floating.xml delete mode 100644 app/src/main/res/layout/merge_play_style_classic.xml delete mode 100644 app/src/main/res/layout/merge_play_style_rounded.xml delete mode 100644 app/src/main/res/layout/merge_rewind_style_classic.xml delete mode 100644 app/src/main/res/layout/merge_rewind_style_rounded.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_chevron.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_color_primary.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_color_primary_dark.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_divider.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_double.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_one.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_pay.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_single.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_switch.xml delete mode 100644 app/src/main/res/layout/merge_setting_row_triple.xml delete mode 100644 app/src/main/res/layout/pref_appearance_ui.xml delete mode 100644 app/src/main/res/layout/pref_appearance_ui_player.xml delete mode 100644 app/src/main/res/layout/pref_beta.xml delete mode 100644 app/src/main/res/layout/pref_skip_interval.xml delete mode 100644 app/src/main/res/layout/rotate_view.xml delete mode 100644 app/src/main/res/layout/select_chapter_row.xml delete mode 100644 app/src/main/res/layout/settings.xml delete mode 100644 app/src/main/res/menu/book_category.xml delete mode 100644 app/src/main/res/menu/book_overview.xml delete mode 100644 app/src/main/res/menu/book_play.xml delete mode 100644 app/src/main/res/menu/menu_about.xml delete mode 100644 app/src/main/res/menu/menu_settings.xml delete mode 100644 app/src/main/res/menu/sort_menu.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_goodwy.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml delete mode 100644 app/src/main/res/mipmap-anydpi-v26/ic_shortcut_play.xml delete mode 100644 app/src/main/res/mipmap-hdpi/ic_goodwy.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_goodwy_foreground.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_play.png create mode 100644 app/src/main/res/mipmap-hdpi/ic_shortcut_play_foregound.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_goodwy.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_goodwy_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_play.png create mode 100644 app/src/main/res/mipmap-mdpi/ic_shortcut_play_foregound.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_goodwy.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_goodwy_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_play.png create mode 100644 app/src/main/res/mipmap-xhdpi/ic_shortcut_play_foregound.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_goodwy.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_goodwy_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_play.png create mode 100644 app/src/main/res/mipmap-xxhdpi/ic_shortcut_play_foregound.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_goodwy.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_goodwy_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png delete mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_play.png create mode 100644 app/src/main/res/mipmap-xxxhdpi/ic_shortcut_play_foregound.png delete mode 100644 app/src/main/res/values-night/colors.xml delete mode 100644 app/src/main/res/values/changelog.xml delete mode 100644 app/src/main/res/values/ic_shortcut_play_background.xml delete mode 100644 app/src/main/res/values/licenses.xml delete mode 100644 app/src/test/java/com/goodwy/audiobook/BookFactory.kt delete mode 100644 app/src/test/java/com/goodwy/audiobook/ChapterFactory.kt delete mode 100644 app/src/test/java/com/goodwy/audiobook/features/bookOverview/list/BookComparatorTest.kt delete mode 100644 app/src/test/java/com/goodwy/audiobook/features/bookOverview/list/header/BookOverviewCategoryTest.kt delete mode 100644 app/src/test/java/com/goodwy/audiobook/features/bookSearch/BookSearchHandlerTest.kt rename app/src/test/{java/com/goodwy/audiobook => kotlin/voice/app}/misc/FormatTimeKtTest.kt (70%) rename app/src/test/{java/com/goodwy/audiobook => kotlin/voice/app}/mvp/PresenterTest.kt (56%) delete mode 100644 apply_ktlint.gradle create mode 100644 bookOverview/build.gradle.kts create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/BookMigrationExplanationQualifier.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/bottomSheet/BottomSheetContent.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/bottomSheet/BottomSheetItemViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/bottomSheet/BottomSheetViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/bottomSheet/EditBookBottomSheetState.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/deleteBook/DeleteBookDialog.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/deleteBook/DeleteBookViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/di/BookOverviewComponent.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/editBookCategory/EditBookCategoryViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/editTitle/EditBookTitleDialog.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/editTitle/EditBookTitleState.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/editTitle/EditBookTitleViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/fileCover/FileCoverViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/internetCover/InternetCoverViewModel.kt rename {app/src/main/java/com/goodwy/audiobook/features/bookOverview/list/header => bookOverview/src/main/kotlin/voice/bookOverview/overview}/BookOverviewCategory.kt (56%) create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/overview/BookOverviewItemViewState.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/overview/BookOverviewLayoutMode.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/overview/BookOverviewViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/overview/BookOverviewViewState.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/search/BookSearchComponent.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/search/BookSearchScreen.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/search/BookSearchViewModel.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/search/BookSearchViewState.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/AddBookHint.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/BookFolderIcon.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/BookOverview.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/BookProgress.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/ExplanationTooltip.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/GridBooks.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/Header.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/ListBooks.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/MigrateHint.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/MigrateIcon.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/PlayButton.kt create mode 100644 bookOverview/src/main/kotlin/voice/bookOverview/views/SettingsIcon.kt create mode 100644 bookOverview/src/test/kotlin/voice/bookOverview/BookFactory.kt create mode 100644 bookOverview/src/test/kotlin/voice/bookOverview/BookOverviewCategoryTest.kt delete mode 100644 buildSrc/.gitignore delete mode 100644 buildSrc/build.gradle.kts delete mode 100644 buildSrc/src/main/kotlin/deps/DependencyStability.kt delete mode 100644 buildSrc/src/main/kotlin/deps/Deps.kt create mode 100644 common/default_album_art_license.md create mode 100644 common/libs/material-color-util.jar delete mode 100644 common/src/main/AndroidManifest.xml delete mode 100644 common/src/main/java/com/goodwy/audiobook/common/ApplicationIdProvider.kt delete mode 100644 common/src/main/java/com/goodwy/audiobook/common/CoverReplacement.kt delete mode 100644 common/src/main/java/com/goodwy/audiobook/common/ImageHelper.kt delete mode 100644 common/src/main/java/com/goodwy/audiobook/common/comparator/NaturalOrderComparator.kt create mode 100644 common/src/main/kotlin/voice/common/AndroidExtensions.kt create mode 100644 common/src/main/kotlin/voice/common/AppInfoProvider.kt create mode 100644 common/src/main/kotlin/voice/common/AppScope.kt create mode 100644 common/src/main/kotlin/voice/common/AudioWave.kt create mode 100644 common/src/main/kotlin/voice/common/BlurTransformation.kt create mode 100644 common/src/main/kotlin/voice/common/BookId.kt create mode 100644 common/src/main/kotlin/voice/common/Combine.kt create mode 100644 common/src/main/kotlin/voice/common/DarkThemeSettable.kt create mode 100644 common/src/main/kotlin/voice/common/DispatcherProvider.kt rename {app/src/main/java/com/goodwy/audiobook/misc => common/src/main/kotlin/voice/common}/FormatTime.kt (60%) rename {app/src/main/java/com/goodwy/audiobook/uitools => common/src/main/kotlin/voice/common}/PlayPauseDrawableSetter.kt (61%) create mode 100644 common/src/main/kotlin/voice/common/RecomposeHighlighter.kt create mode 100644 common/src/main/kotlin/voice/common/RootComponent.kt rename common/src/main/{java/com/goodwy/audiobook => kotlin/voice}/common/comparator/IntelliJStringComparator.kt (91%) create mode 100644 common/src/main/kotlin/voice/common/comparator/NaturalOrderComparator.kt create mode 100644 common/src/main/kotlin/voice/common/compose/ComposeController.kt create mode 100644 common/src/main/kotlin/voice/common/compose/ImmutableFile.kt create mode 100644 common/src/main/kotlin/voice/common/compose/LongClickableCard.kt create mode 100644 common/src/main/kotlin/voice/common/compose/PaddingValues.kt create mode 100644 common/src/main/kotlin/voice/common/compose/SharedComponent.kt create mode 100644 common/src/main/kotlin/voice/common/compose/ViewModel.kt create mode 100644 common/src/main/kotlin/voice/common/compose/VoiceTheme.kt rename {app/src/main/java/com/goodwy/audiobook/features => common/src/main/kotlin/voice/common/conductor}/BaseController.kt (73%) rename {app/src/main/java/com/goodwy/audiobook/misc => common/src/main/kotlin/voice/common}/conductor/ClearAfterDestroyView.kt (76%) create mode 100644 common/src/main/kotlin/voice/common/conductor/ControllerLifecycleOwner.kt rename {app/src/main/java/com/goodwy/audiobook/misc => common/src/main/kotlin/voice/common/conductor}/DialogController.kt (90%) rename {app/src/main/java/com/goodwy/audiobook/misc => common/src/main/kotlin/voice/common}/conductor/LifecycleScopeProperty.kt (91%) rename {app/src/main/java/com/goodwy/audiobook/features => common/src/main/kotlin/voice/common/conductor}/ViewBindingController.kt (77%) create mode 100644 common/src/main/kotlin/voice/common/grid/GridCount.kt create mode 100644 common/src/main/kotlin/voice/common/grid/GridMode.kt create mode 100644 common/src/main/kotlin/voice/common/navigation/Base64.kt create mode 100644 common/src/main/kotlin/voice/common/navigation/NavigationCommand.kt create mode 100644 common/src/main/kotlin/voice/common/navigation/Navigator.kt rename common/src/main/{java/com/goodwy/audiobook => kotlin/voice}/common/pref/PrefKeys.kt (55%) delete mode 100644 common/src/main/res/drawable-hdpi/ic_fast_forward_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-hdpi/ic_fast_forward_white_36dp.png delete mode 100644 common/src/main/res/drawable-hdpi/ic_notification.png delete mode 100644 common/src/main/res/drawable-hdpi/ic_pause_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-hdpi/ic_pause_white_36dp.png delete mode 100644 common/src/main/res/drawable-hdpi/ic_play_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-hdpi/ic_play_white_36dp.png delete mode 100644 common/src/main/res/drawable-hdpi/ic_rewind_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-hdpi/ic_rewind_white_36dp.png delete mode 100644 common/src/main/res/drawable-mdpi/ic_fast_forward_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-mdpi/ic_fast_forward_white_36dp.png delete mode 100644 common/src/main/res/drawable-mdpi/ic_notification.png delete mode 100644 common/src/main/res/drawable-mdpi/ic_pause_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-mdpi/ic_pause_white_36dp.png delete mode 100644 common/src/main/res/drawable-mdpi/ic_play_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-mdpi/ic_play_white_36dp.png delete mode 100644 common/src/main/res/drawable-mdpi/ic_rewind_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-mdpi/ic_rewind_white_36dp.png delete mode 100644 common/src/main/res/drawable-xhdpi/ic_fast_forward_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xhdpi/ic_fast_forward_white_36dp.png delete mode 100644 common/src/main/res/drawable-xhdpi/ic_notification.png delete mode 100644 common/src/main/res/drawable-xhdpi/ic_pause_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xhdpi/ic_pause_white_36dp.png delete mode 100644 common/src/main/res/drawable-xhdpi/ic_play_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xhdpi/ic_play_white_36dp.png delete mode 100644 common/src/main/res/drawable-xhdpi/ic_rewind_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xhdpi/ic_rewind_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxhdpi/ic_fast_forward_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxhdpi/ic_fast_forward_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxhdpi/ic_notification.png delete mode 100644 common/src/main/res/drawable-xxhdpi/ic_pause_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxhdpi/ic_pause_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxhdpi/ic_play_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxhdpi/ic_play_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxhdpi/ic_rewind_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxhdpi/ic_rewind_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxxhdpi/ic_fast_forward_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxxhdpi/ic_fast_forward_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxxhdpi/ic_pause_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxxhdpi/ic_pause_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxxhdpi/ic_play_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxxhdpi/ic_play_white_36dp.png delete mode 100644 common/src/main/res/drawable-xxxhdpi/ic_rewind_black_36dp.png mode change 100644 => 100755 common/src/main/res/drawable-xxxhdpi/ic_rewind_white_36dp.png create mode 100644 common/src/main/res/drawable/alarm.xml rename {app => common}/src/main/res/drawable/alarm_off.xml (81%) create mode 100644 common/src/main/res/drawable/album_art.xml create mode 100644 common/src/main/res/drawable/avd_pause_to_play.xml create mode 100644 common/src/main/res/drawable/avd_play_to_pause.xml create mode 100644 common/src/main/res/drawable/close.xml create mode 100644 common/src/main/res/drawable/ic_chevron_compact_down.xml rename app/src/main/res/drawable/play_button.xml => common/src/main/res/drawable/ic_circle.xml (54%) delete mode 100644 common/src/main/res/drawable/ic_fast_forward_time.xml delete mode 100644 common/src/main/res/drawable/ic_fast_rewind_time.xml create mode 100644 common/src/main/res/drawable/ic_headphones.xml create mode 100755 common/src/main/res/drawable/ic_invert_colors.xml create mode 100755 common/src/main/res/drawable/ic_lifebuoy.xml create mode 100644 common/src/main/res/drawable/ic_mini_player.xml rename common/src/main/res/{drawable-anydpi => drawable}/ic_notification.xml (100%) mode change 100644 => 100755 create mode 100755 common/src/main/res/drawable/ic_palette.xml delete mode 100644 common/src/main/res/drawable/ic_play.xml create mode 100644 common/src/main/res/drawable/ic_play_square.xml create mode 100644 common/src/main/res/drawable/ic_playbook.xml create mode 100755 common/src/main/res/drawable/ic_plus_round.xml create mode 100755 common/src/main/res/drawable/ic_plus_support.xml rename {app => common}/src/main/res/drawable/ic_repeat_all.xml (85%) create mode 100644 common/src/main/res/drawable/ic_repeat_off.xml rename {app => common}/src/main/res/drawable/ic_repeat_one.xml (87%) create mode 100644 common/src/main/res/drawable/ic_settings.xml create mode 100644 common/src/main/res/drawable/ic_square.xml create mode 100644 common/src/main/res/drawable/ic_square_blur.xml create mode 100644 common/src/main/res/drawable/ic_time_left.xml create mode 100755 common/src/main/res/drawable/logo_goodwy.png create mode 100644 common/src/main/res/values-af/strings.xml create mode 100644 common/src/main/res/values-ar/strings.xml create mode 100644 common/src/main/res/values-bg/strings.xml create mode 100644 common/src/main/res/values-br/strings.xml create mode 100644 common/src/main/res/values-cs/strings.xml create mode 100644 common/src/main/res/values-da/strings.xml create mode 100644 common/src/main/res/values-de/strings.xml create mode 100644 common/src/main/res/values-el/strings.xml create mode 100644 common/src/main/res/values-es/strings.xml create mode 100644 common/src/main/res/values-fa-rIR/strings.xml create mode 100644 common/src/main/res/values-fr/strings.xml create mode 100644 common/src/main/res/values-ga/strings.xml create mode 100644 common/src/main/res/values-hi-rIN/strings.xml create mode 100644 common/src/main/res/values-hi/strings.xml create mode 100644 common/src/main/res/values-hu/strings.xml create mode 100644 common/src/main/res/values-it/strings.xml create mode 100644 common/src/main/res/values-ja/strings.xml create mode 100644 common/src/main/res/values-kab/strings.xml create mode 100644 common/src/main/res/values-ko/strings.xml create mode 100644 common/src/main/res/values-lt-rLT/strings.xml create mode 100644 common/src/main/res/values-ne-rNP/strings.xml delete mode 100644 common/src/main/res/values-night/colors.xml create mode 100644 common/src/main/res/values-nl-rNL/strings.xml create mode 100644 common/src/main/res/values-oc/strings.xml create mode 100644 common/src/main/res/values-pl-rPL/strings.xml create mode 100644 common/src/main/res/values-pl/strings.xml create mode 100644 common/src/main/res/values-pt-rBR/strings.xml create mode 100644 common/src/main/res/values-pt-rPT/strings.xml create mode 100644 common/src/main/res/values-ru/strings.xml create mode 100644 common/src/main/res/values-sk/strings.xml create mode 100644 common/src/main/res/values-sl/strings.xml create mode 100644 common/src/main/res/values-sv/strings.xml create mode 100644 common/src/main/res/values-sw/strings.xml create mode 100644 common/src/main/res/values-tr/strings.xml create mode 100644 common/src/main/res/values-uk/strings.xml create mode 100644 common/src/main/res/values-v31/covercolors.xml create mode 100644 common/src/main/res/values-vi/strings.xml create mode 100644 common/src/main/res/values-zh-rCN/strings.xml delete mode 100644 common/src/main/res/values/colors.xml create mode 100644 common/src/main/res/values/covercolors.xml create mode 100644 common/src/main/res/values/donottranslate.xml create mode 100644 common/src/main/res/values/strings.xml delete mode 100644 common/src/test/java/com/goodwy/audiobook/common/comparator/NaturalOrderComparatorTest.kt create mode 100644 common/src/test/kotlin/voice/common/comparator/NaturalOrderComparatorTest.kt create mode 100644 common/src/test/kotlin/voice/common/navigation/Base64Test.kt delete mode 100644 core/build.gradle.kts delete mode 100644 core/lint.xml delete mode 100644 core/src/main/AndroidManifest.xml delete mode 100644 core/src/main/res/values-af/strings.xml delete mode 100644 core/src/main/res/values-ar/strings.xml delete mode 100644 core/src/main/res/values-bg/strings.xml delete mode 100644 core/src/main/res/values-cs/strings.xml delete mode 100644 core/src/main/res/values-da/strings.xml delete mode 100644 core/src/main/res/values-de/strings.xml delete mode 100644 core/src/main/res/values-el/strings.xml delete mode 100644 core/src/main/res/values-es/strings.xml delete mode 100644 core/src/main/res/values-fa-rIR/strings.xml delete mode 100644 core/src/main/res/values-fr/strings.xml delete mode 100644 core/src/main/res/values-ga/strings.xml delete mode 100644 core/src/main/res/values-hi-rIN/strings.xml delete mode 100644 core/src/main/res/values-hi/strings.xml delete mode 100644 core/src/main/res/values-it/strings.xml delete mode 100644 core/src/main/res/values-ja/strings.xml delete mode 100644 core/src/main/res/values-ko/strings.xml delete mode 100644 core/src/main/res/values-lt-rLT/strings.xml delete mode 100644 core/src/main/res/values-nl-rNL/strings.xml delete mode 100644 core/src/main/res/values-pl/strings.xml delete mode 100644 core/src/main/res/values-pt-rBR/strings.xml delete mode 100644 core/src/main/res/values-pt-rPT/strings.xml delete mode 100644 core/src/main/res/values-ru/strings.xml delete mode 100644 core/src/main/res/values-sk/strings.xml delete mode 100644 core/src/main/res/values-sl/strings.xml delete mode 100644 core/src/main/res/values-sv/strings.xml delete mode 100644 core/src/main/res/values-sw/strings.xml delete mode 100644 core/src/main/res/values-tr/strings.xml delete mode 100644 core/src/main/res/values-uk/strings.xml delete mode 100644 core/src/main/res/values-vi/strings.xml delete mode 100644 core/src/main/res/values-zh-rCN/strings.xml delete mode 100644 core/src/main/res/values/strings.xml delete mode 100644 covercolorextractor/build.gradle.kts delete mode 100644 covercolorextractor/src/main/AndroidManifest.xml delete mode 100644 covercolorextractor/src/main/java/com/goodwy/audiobook/covercolorextractor/CoverColorExtractor.kt delete mode 100644 covercolorextractor/src/main/res/values/strings.xml delete mode 100644 crashreporting/.gitignore delete mode 100644 crashreporting/build.gradle.kts delete mode 100644 crashreporting/src/main/AndroidManifest.xml delete mode 100644 crashreporting/src/main/java/com/goodwy/audiobook/crashreporting/CrashLoggingTree.kt delete mode 100644 crashreporting/src/opensource/java/com/goodwy/audiobook/crashreporting/CrashReporter.kt delete mode 100644 crashreporting/src/proprietary/java/com/goodwy/audiobook/crashreporting/CrashReporter.kt rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/43.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/44.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/45.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/46.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/47.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/48.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/49.json (100%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/50.json (99%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/51.json (99%) rename data/schemas/{com.goodwy.audiobook.data.repo.internals.AppDb => voice.data.repo.internals.AppDb}/52.json (99%) create mode 100644 data/schemas/voice.data.repo.internals.AppDb/53.json create mode 100644 data/schemas/voice.data.repo.internals.AppDb/54.json create mode 100644 data/schemas/voice.data.repo.internals.AppDb/55.json create mode 100644 data/schemas/voice.data.repo.internals.AppDb/56.json create mode 100644 data/schemas/voice.data.repo.internals.AppDb/57.json create mode 100644 data/schemas/voice.data.repo.internals.AppDb/58.json delete mode 100644 data/src/main/AndroidManifest.xml delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/Book.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/BookComparator.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/BookContent.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/Bookmark.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/Chapter.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/BookRepository.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/BookmarkRepo.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/AppDb.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/BookMetaDataDao.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/BookSettingsDao.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/BookStorage.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/BookmarkDao.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/ChapterDao.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/Converters.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/MemoryRepo.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/PersistenceModule.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/migrations/Migration27to28.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/migrations/Migration34to35.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/migrations/Migration40to41.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/migrations/Migration49.kt delete mode 100644 data/src/main/java/com/goodwy/audiobook/data/repo/internals/migrations/Migration51to52.kt create mode 100644 data/src/main/kotlin/voice/data/Book.kt create mode 100644 data/src/main/kotlin/voice/data/BookComparator.kt create mode 100644 data/src/main/kotlin/voice/data/BookContent.kt create mode 100644 data/src/main/kotlin/voice/data/Bookmark.kt create mode 100644 data/src/main/kotlin/voice/data/Chapter.kt create mode 100644 data/src/main/kotlin/voice/data/ChapterMark.kt create mode 100644 data/src/main/kotlin/voice/data/RecentBookSearch.kt create mode 100644 data/src/main/kotlin/voice/data/RunForMaxSqlVariableNumber.kt create mode 100644 data/src/main/kotlin/voice/data/SupportedAudioFormats.kt create mode 100644 data/src/main/kotlin/voice/data/folders/AudiobookFolders.kt create mode 100644 data/src/main/kotlin/voice/data/folders/FolderType.kt rename data/src/main/{java/com/goodwy/audiobook/data/BookMetaData.kt => kotlin/voice/data/legacy/LegacyBookMetaData.kt} (74%) rename data/src/main/{java/com/goodwy/audiobook/data/BookSettings.kt => kotlin/voice/data/legacy/LegacyBookSettings.kt} (58%) create mode 100644 data/src/main/kotlin/voice/data/legacy/LegacyBookType.kt create mode 100644 data/src/main/kotlin/voice/data/legacy/LegacyBookmark.kt create mode 100644 data/src/main/kotlin/voice/data/legacy/LegacyChapter.kt create mode 100644 data/src/main/kotlin/voice/data/legacy/LegacyChapterMark.kt create mode 100644 data/src/main/kotlin/voice/data/repo/BookContentRepo.kt create mode 100644 data/src/main/kotlin/voice/data/repo/BookRepository.kt create mode 100644 data/src/main/kotlin/voice/data/repo/BookmarkRepo.kt create mode 100644 data/src/main/kotlin/voice/data/repo/ChapterRepo.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/AppDb.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/Converters.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/Cursor.kt (93%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/DataBaseExtensions.kt (76%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/PersistenceModule.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/dao/BookContentDao.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/dao/BookmarkDao.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/dao/ChapterDao.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/dao/LegacyBookDao.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/dao/RecentBookSearchDao.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/IncrementalMigration.kt (66%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration23to24.kt (65%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration24to25.kt (80%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration25to26.kt (63%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration26to27.kt (66%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration27to28.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration28to29.kt (69%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration29to30.kt (91%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration30to31.kt (65%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration31to32.kt (74%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration32to34.kt (74%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration34to35.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration35to36.kt (74%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration36to37.kt (66%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration37to38.kt (57%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration38to39.kt (62%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration39to40.kt (56%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration40to41.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration41to42.kt (62%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration42to43.kt (54%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration43to44.kt (83%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration44.kt (69%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration45.kt (58%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration46.kt (55%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration47.kt (58%) rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration48.kt (54%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration49.kt rename data/src/main/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration50.kt (55%) create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration51.kt create mode 100644 data/src/main/kotlin/voice/data/repo/internals/migrations/Migration54.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/BookFactory.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/BookSubject.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/BookTest.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/ChapterFactory.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/repo/BookRepositoryTest.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/repo/internals/BookStorageTest.kt delete mode 100644 data/src/test/java/com/goodwy/audiobook/data/repo/internals/BookmarkDaoTest.kt create mode 100644 data/src/test/kotlin/voice/data/BookComparatorTest.kt create mode 100644 data/src/test/kotlin/voice/data/BookFactory.kt create mode 100644 data/src/test/kotlin/voice/data/BookTest.kt create mode 100644 data/src/test/kotlin/voice/data/RecentBookSearchTest.kt create mode 100644 data/src/test/kotlin/voice/data/SqlStatementSplitterTest.kt create mode 100644 data/src/test/kotlin/voice/data/TestComponent.kt rename data/src/test/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/ConvertersTest.kt (71%) rename data/src/test/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/DataBaseMigratorTest.kt (64%) rename data/src/test/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration39to40Test.kt (82%) rename data/src/test/{java/com/goodwy/audiobook => kotlin/voice}/data/repo/internals/migrations/Migration40to41Test.kt (84%) delete mode 100644 dependency_updates.gradle delete mode 100644 fastlane/.gitignore delete mode 100644 fastlane/Fastfile delete mode 100644 ffmpeg/src/main/AndroidManifest.xml delete mode 100644 ffmpeg/src/main/java/com/goodwy/audiobook/ffmpeg/ffmpeg.kt create mode 100644 ffmpeg/src/main/kotlin/voice/ffmpeg/FFMpeg.kt create mode 100644 folderPicker/build.gradle.kts create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/FolderTypeIcon.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/folderPicker/FileTypeSelectionDialog.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/folderPicker/FolderPickerView.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/folderPicker/FolderPickerViewModel.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/folderPicker/FolderPickerViewState.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/AddingFab.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/DocumentFileCache.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/FolderMode.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/FolderModeBook.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/FolderModeSelectionCard.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/SelectFolderType.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/SelectFolderTypeViewModel.kt create mode 100644 folderPicker/src/main/kotlin/voice/folderPicker/selectType/SelectFolderTypeViewState.kt create mode 100644 folderPicker/src/test/kotlin/voice/folderPicker/selectType/SelectFolderTypeViewModelTest.kt create mode 100644 gradle/libs.versions.toml create mode 100644 lint.xml create mode 100644 logging/core/build.gradle.kts create mode 100644 logging/core/src/main/kotlin/voice/logging/core/Logger.kt create mode 100644 logging/crashlytics/build.gradle.kts create mode 100644 logging/crashlytics/src/main/AndroidManifest.xml create mode 100644 logging/crashlytics/src/main/kotlin/voice/logging/crashlytics/CrashlyticsLogWriter.kt create mode 100644 logging/crashlytics/src/main/kotlin/voice/logging/crashlytics/CrashlyticsLogWriterInitializer.kt create mode 100644 logging/debug/build.gradle.kts create mode 100644 logging/debug/src/main/AndroidManifest.xml create mode 100644 logging/debug/src/main/kotlin/voice/logging/debug/DebugLogWriter.kt create mode 100644 logging/debug/src/main/kotlin/voice/logging/debug/DebugLogWriterInitializer.kt delete mode 100644 metadata/en-US/Description.txt delete mode 100644 metadata/en-US/images/0.jpg delete mode 100644 metadata/en-US/images/Mini/phone1.jpg delete mode 100644 metadata/en-US/images/Mini/phone2.jpg delete mode 100644 metadata/en-US/images/Mini/phone3.jpg delete mode 100644 metadata/en-US/images/Mini/phone4.jpg delete mode 100644 metadata/en-US/images/Mini/phone5.jpg delete mode 100644 metadata/en-US/images/Mini/phone6.jpg delete mode 100644 metadata/en-US/images/Mini/tab1.jpg delete mode 100644 metadata/en-US/images/Mini/tab2.jpg delete mode 100644 metadata/en-US/images/Mini/tab3.jpg delete mode 100644 metadata/en-US/images/featureGraphic.jpg delete mode 100644 metadata/en-US/images/icon.png delete mode 100644 metadata/en-US/images/phone1.jpg delete mode 100644 metadata/en-US/images/phone2.jpg delete mode 100644 metadata/en-US/images/phone3.jpg delete mode 100644 metadata/en-US/images/phone4.jpg delete mode 100644 metadata/en-US/images/phone5.jpg delete mode 100644 metadata/en-US/images/phone6.jpg delete mode 100644 metadata/en-US/images/tab1.jpg delete mode 100644 metadata/en-US/images/tab2.jpg delete mode 100644 metadata/en-US/images/tab3.jpg delete mode 100644 metadata/ru-RU/Description.txt delete mode 100644 metadata/ru-RU/images/0.jpg delete mode 100644 metadata/ru-RU/images/featureGraphic.jpg delete mode 100644 metadata/ru-RU/images/icon.png delete mode 100644 metadata/ru-RU/images/phone1.jpg delete mode 100644 metadata/ru-RU/images/phone2.jpg delete mode 100644 metadata/ru-RU/images/phone3.jpg delete mode 100644 metadata/ru-RU/images/phone4.jpg delete mode 100644 metadata/ru-RU/images/phone5.jpg delete mode 100644 metadata/ru-RU/images/phone6.jpg delete mode 100644 metadata/ru-RU/images/tab1.jpg delete mode 100644 metadata/ru-RU/images/tab2.jpg delete mode 100644 metadata/ru-RU/images/tab3.jpg delete mode 100644 metadata/zh-CN/Description.txt delete mode 100644 metadata/zh-CN/images/0.jpg delete mode 100644 metadata/zh-CN/images/featureGraphic.jpg delete mode 100644 metadata/zh-CN/images/icon.png delete mode 100644 metadata/zh-CN/images/phone1.jpg delete mode 100644 metadata/zh-CN/images/phone2.jpg delete mode 100644 metadata/zh-CN/images/phone3.jpg delete mode 100644 metadata/zh-CN/images/phone4.jpg delete mode 100644 metadata/zh-CN/images/phone5.jpg delete mode 100644 metadata/zh-CN/images/phone6.jpg delete mode 100644 metadata/zh-CN/images/tab1.jpg delete mode 100644 metadata/zh-CN/images/tab2.jpg delete mode 100644 metadata/zh-CN/images/tab3.jpg create mode 100644 migration/build.gradle.kts create mode 100644 migration/src/main/kotlin/voice/migration/MigrationViewModel.kt create mode 100644 migration/src/main/kotlin/voice/migration/views/Migration.kt create mode 100644 migration/src/main/kotlin/voice/migration/views/MigrationViewState.kt delete mode 100644 playback/src/main/AndroidManifest.xml delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/androidauto/NotifyOnAutoConnectionChange.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/di/PerService.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/di/PlaybackServiceModule.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/notification/CachedImage.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/notification/NotificationChannelCreator.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/notification/ToBookIntentProvider.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/player/DataSourceConverter.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/player/Equalizer.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/player/LoudnessGain.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/player/MediaPlayer.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/player/exoExtensions.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/playstate/PlayStateManager.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/playstate/PlayerState.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/BookUriConverter.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/MediaSessionCallback.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/headset/HeadsetState.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/search/BookSearch.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/search/BookSearchHandler.kt delete mode 100644 playback/src/main/java/com/goodwy/audiobook/playback/session/search/BookSearchParser.kt rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/PlayerController.kt (57%) rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/androidauto/AndroidAutoConnectedReceiver.kt (62%) create mode 100644 playback/src/main/kotlin/voice/playback/androidauto/NotifyOnAutoConnectionChange.kt rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/di/PlaybackComponent.kt (57%) rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/di/PlaybackComponentFactoryProvider.kt (69%) create mode 100644 playback/src/main/kotlin/voice/playback/di/PlaybackScope.kt create mode 100644 playback/src/main/kotlin/voice/playback/di/PlaybackServiceModule.kt create mode 100644 playback/src/main/kotlin/voice/playback/misc/Decibel.kt rename playback/src/main/{java/com/goodwy/audiobook/playback/misc/flowBroadcast.kt => kotlin/voice/playback/misc/FlowBroadcastReceiver.kt} (90%) create mode 100644 playback/src/main/kotlin/voice/playback/misc/VolumeGain.kt create mode 100644 playback/src/main/kotlin/voice/playback/notification/CachedImage.kt create mode 100644 playback/src/main/kotlin/voice/playback/notification/NotificationChannelCreator.kt rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/notification/NotificationCreator.kt (67%) create mode 100644 playback/src/main/kotlin/voice/playback/notification/ToBookIntentProvider.kt create mode 100644 playback/src/main/kotlin/voice/playback/player/DataSourceConverter.kt create mode 100644 playback/src/main/kotlin/voice/playback/player/ExoPlayer.kt create mode 100644 playback/src/main/kotlin/voice/playback/player/MediaPlayer.kt create mode 100644 playback/src/main/kotlin/voice/playback/player/OnlyAudioRenderersFactory.kt create mode 100644 playback/src/main/kotlin/voice/playback/playstate/PlayStateManager.kt create mode 100644 playback/src/main/kotlin/voice/playback/playstate/PlayerState.kt create mode 100644 playback/src/main/kotlin/voice/playback/session/BookUriConverter.kt rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/session/ChangeNotifier.kt (56%) rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/session/MediaBrowserHelper.kt (50%) create mode 100644 playback/src/main/kotlin/voice/playback/session/MediaSessionCallback.kt rename playback/src/main/{java/com/goodwy/audiobook => kotlin/voice}/playback/session/PlaybackService.kt (67%) create mode 100644 playback/src/main/kotlin/voice/playback/session/headset/HeadsetState.kt rename playback/src/main/{java/com/goodwy/audiobook/playback/session/headset/HeadsetPlugReceiver.kt => kotlin/voice/playback/session/headset/HeadsetStateChangeFlow.kt} (65%) create mode 100644 playback/src/main/kotlin/voice/playback/session/search/BookSearchHandler.kt create mode 100644 playback/src/main/kotlin/voice/playback/session/search/BookSearchParser.kt create mode 100644 playback/src/main/kotlin/voice/playback/session/search/VoiceSearch.kt rename {app/src/test/java/com/goodwy/audiobook/playback/utils => playback/src/test/kotlin/voice/playback/session}/BookUriConverterTest.kt (50%) create mode 100644 playback/src/test/kotlin/voice/playback/session/search/BookSearchHandlerTest.kt create mode 100644 playbackScreen/build.gradle.kts create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/AudioVolume.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BatteryOptimization.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BookPlayController.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BookPlayView.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BookPlayViewEffect.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BookPlayViewModel.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/BookPlayViewState.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/SelectChapterDialog.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/SpeedDialog.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/VolumeGainDialog.kt create mode 100644 playbackScreen/src/main/kotlin/voice/playbackScreen/VolumeGainFormatter.kt create mode 100644 plugins/build.gradle.kts create mode 100644 plugins/settings.gradle.kts create mode 100644 plugins/src/main/kotlin/AppPlugin.kt create mode 100644 plugins/src/main/kotlin/ComposePlugin.kt create mode 100644 plugins/src/main/kotlin/LibraryPlugin.kt create mode 100644 plugins/src/main/kotlin/baseSetup.kt delete mode 100644 prefs/.gitignore delete mode 100644 prefs/build.gradle.kts delete mode 100644 prefs/src/main/AndroidManifest.xml delete mode 100644 prefs/src/main/java/com/goodwy/audiobook/prefs/Pref.kt delete mode 100644 release.main.kts create mode 100644 renovate.json rename {covercolorextractor => scanner}/.gitignore (100%) create mode 100644 scanner/build.gradle.kts create mode 100644 scanner/src/main/kotlin/voice/app/scanner/BookParser.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/BookmarkMigrator.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/ChapterParser.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/CoverSaver.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/CoverScanner.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/FFProbeAnalyze.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/MediaAnalyzer.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/MediaScanTrigger.kt create mode 100644 scanner/src/main/kotlin/voice/app/scanner/MediaScanner.kt rename {app/src/main/java/com/goodwy/audiobook/misc/metadata => scanner/src/main/kotlin/voice/app/scanner}/Metadata.kt (76%) create mode 100644 scanner/src/test/kotlin/voice/app/scanner/MediaAnalyzerTest.kt create mode 100644 scanner/src/test/kotlin/voice/app/scanner/MediaScannerTest.kt create mode 100644 search/build.gradle.kts create mode 100644 search/src/main/kotlin/voice/search/BookSearch.kt create mode 100644 search/src/test/kotlin/voice/search/BookFactory.kt create mode 100644 search/src/test/kotlin/voice/search/BookSearchTest.kt create mode 100644 settings/build.gradle.kts create mode 100644 settings/src/main/kotlin/voice/settings/SettingsListener.kt create mode 100644 settings/src/main/kotlin/voice/settings/SettingsViewModel.kt create mode 100644 settings/src/main/kotlin/voice/settings/SettingsViewState.kt create mode 100644 settings/src/main/kotlin/voice/settings/about/About.kt create mode 100644 settings/src/main/kotlin/voice/settings/about/AboutListener.kt create mode 100644 settings/src/main/kotlin/voice/settings/about/AboutViewModel.kt create mode 100644 settings/src/main/kotlin/voice/settings/about/AboutViewState.kt create mode 100644 settings/src/main/kotlin/voice/settings/purchase/Purchase.kt create mode 100644 settings/src/main/kotlin/voice/settings/purchase/PurchaseListener.kt create mode 100644 settings/src/main/kotlin/voice/settings/purchase/PurchaseViewModel.kt create mode 100644 settings/src/main/kotlin/voice/settings/purchase/PurchaseViewState.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/AppVersion.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/AutoRewindRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/ColorThemeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/DarkThemeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/GridModeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/HsvColorDialog.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/MiniPlayerStyleRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/PlayButtonStyleRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/PlayerBackgroundRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/RadioButtonDialog.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/ResumeOnReplugRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/SeekTimeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/Settings.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/ShowSliderVolumeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/SkipButtonStyleRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/ThemeRow.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/TimeSettingDialog.kt create mode 100644 settings/src/main/kotlin/voice/settings/views/TransparentNavigationRow.kt create mode 100644 settings/src/main/res/values/dimen.xml rename signing/ci/{ci.jks => signing.keystore} (100%) create mode 100644 sleepTimer/build.gradle.kts create mode 100644 sleepTimer/src/main/kotlin/voice/sleepTimer/ShakeDetector.kt create mode 100644 sleepTimer/src/main/kotlin/voice/sleepTimer/SleepTimer.kt create mode 100644 sleepTimer/src/main/kotlin/voice/sleepTimer/SleepTimerDialogController.kt create mode 100644 sleepTimer/src/main/kotlin/voice/sleepTimer/SleepTimerDialogViewModel.kt create mode 100644 sleepTimer/src/main/kotlin/voice/sleepTimer/SleepTimerListDialogController.kt create mode 100644 sleepTimer/src/main/res/drawable/backspace.xml rename {app => sleepTimer}/src/main/res/drawable/bottom_sheet.xml (54%) create mode 100644 sleepTimer/src/main/res/drawable/check.xml rename app/src/main/res/drawable/divider_settings.xml => sleepTimer/src/main/res/drawable/divider.xml (67%) create mode 100644 sleepTimer/src/main/res/layout/dialog_sleep.xml create mode 100644 sleepTimer/src/main/res/layout/dialog_sleep_list.xml create mode 100644 sleepTimer/src/main/res/values/styles.xml create mode 100644 sleepTimer/src/test/kotlin/voice/sleepTimer/SleepTimerDialogViewModelTest.kt rename {core => strings}/.gitignore (100%) create mode 100644 strings/build.gradle.kts create mode 100644 strings/src/main/res/values-af/strings.xml create mode 100644 strings/src/main/res/values-ar/strings.xml create mode 100644 strings/src/main/res/values-bg/strings.xml create mode 100644 strings/src/main/res/values-br/strings.xml create mode 100644 strings/src/main/res/values-cs/strings.xml create mode 100644 strings/src/main/res/values-da/strings.xml create mode 100644 strings/src/main/res/values-de/strings.xml create mode 100644 strings/src/main/res/values-el/strings.xml create mode 100644 strings/src/main/res/values-es/strings.xml create mode 100644 strings/src/main/res/values-fa-rIR/strings.xml create mode 100644 strings/src/main/res/values-fr/strings.xml create mode 100644 strings/src/main/res/values-ga/strings.xml create mode 100644 strings/src/main/res/values-hi-rIN/strings.xml create mode 100644 strings/src/main/res/values-hi/strings.xml create mode 100644 strings/src/main/res/values-hu/strings.xml create mode 100644 strings/src/main/res/values-it/strings.xml create mode 100644 strings/src/main/res/values-ja/strings.xml create mode 100644 strings/src/main/res/values-kab/strings.xml create mode 100644 strings/src/main/res/values-ko/strings.xml create mode 100644 strings/src/main/res/values-lt-rLT/strings.xml create mode 100644 strings/src/main/res/values-ne-rNP/strings.xml create mode 100644 strings/src/main/res/values-nl-rNL/strings.xml create mode 100644 strings/src/main/res/values-oc/strings.xml create mode 100644 strings/src/main/res/values-pl-rPL/strings.xml create mode 100644 strings/src/main/res/values-pl/strings.xml create mode 100644 strings/src/main/res/values-pt-rBR/strings.xml create mode 100644 strings/src/main/res/values-pt-rPT/strings.xml create mode 100644 strings/src/main/res/values-ru/strings.xml create mode 100644 strings/src/main/res/values-sk/strings.xml create mode 100644 strings/src/main/res/values-sl/strings.xml create mode 100644 strings/src/main/res/values-sv/strings.xml create mode 100644 strings/src/main/res/values-sw/strings.xml create mode 100644 strings/src/main/res/values-tr/strings.xml create mode 100644 strings/src/main/res/values-uk/strings.xml create mode 100644 strings/src/main/res/values-vi/strings.xml create mode 100644 strings/src/main/res/values-zh-rCN/strings.xml create mode 100644 strings/src/main/res/values/strings.xml create mode 100644 update_screenshots.main.kts diff --git a/.editorconfig b/.editorconfig index b63d9f0..23f64d1 100644 --- a/.editorconfig +++ b/.editorconfig @@ -1,5 +1,6 @@ root = true +# noinspection EditorConfigKeyCorrectness [*] end_of_line = lf insert_final_newline = true @@ -8,9 +9,9 @@ indent_size = 2 continuation_indent_size = 2 trim_trailing_whitespace = true max_line_length = 140 - -[*.{kt, kts}] -disabled_rules = import-ordering - -[*.xml] -indent_size = 4 +ktlint_disabled_rules = filename +ij_kotlin_allow_trailing_comma = true +ij_kotlin_allow_trailing_comma_on_call_site = true +ij_kotlin_name_count_to_use_star_import = 999 +ij_kotlin_name_count_to_use_star_import_for_members = 999 +ij_java_class_count_to_use_import_on_demand = 999 diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..af3d0ab --- /dev/null +++ b/.gitattributes @@ -0,0 +1,2 @@ +app/src/main/play/listings/**/*.png filter=lfs diff=lfs merge=lfs -text +app/src/androidTest/assets/covers/** filter=lfs diff=lfs merge=lfs -text diff --git a/.github/ISSUE_TEMPLATE/bug.yml b/.github/ISSUE_TEMPLATE/bug.yml new file mode 100644 index 0000000..953586e --- /dev/null +++ b/.github/ISSUE_TEMPLATE/bug.yml @@ -0,0 +1,45 @@ +name: Bug Report +description: File a bug report +labels: [ "bug" ] +body: + - type: markdown + attributes: + value: | + Thanks for taking the time to fill out this bug report! + - type: textarea + attributes: + label: Overview + description: Please describe exactly what the bug is and what you expected to happen instead. + validations: + required: true + - type: textarea + attributes: + label: How to reproduce + description: | + Describe step by step, how to reproduce the bug. For example: + 1. Open the App + 2. Click on Play + 3. Voice crashes + validations: + required: true + - type: input + id: version + attributes: + label: Version + description: On which version of Voice did this bug appear? Please write the exact version as often time multiple versions are live at the same time. + validations: + required: true + - type: input + id: androidversion + attributes: + label: Android Version + description: What is your Android Version? (i.e. Android 13) + validations: + required: true + - type: input + id: device + attributes: + label: Device Model + description: What device do you use (i.e. Pixel 6) + validations: + required: true diff --git a/.github/ISSUE_TEMPLATE/bug_report.md b/.github/ISSUE_TEMPLATE/bug_report.md deleted file mode 100644 index ecb181b..0000000 --- a/.github/ISSUE_TEMPLATE/bug_report.md +++ /dev/null @@ -1,23 +0,0 @@ -**Describe the bug** -A clear and concise description of what the bug is. - -**To Reproduce** -Steps to reproduce the behavior: -1. Go to '...' -2. Click on '....' -3. Scroll down to '....' -4. See error - -**Expected behavior** -A clear and concise description of what you expected to happen. - -**Screenshots** -If applicable, add screenshots to help explain your problem. - -**Smartphone** - - Device: [e.g. Galaxy XYZ] - - Android Version: [e.g. Android 7] - - Voice Version [e.g. 5.0.2] - -**Additional context** -If the issue is somehow related to media (not being recognized, not playing, showing wrong metadata etc) please attach a file that demonstrates the issue or email it to me at goodwy.dev@gmail.com diff --git a/.github/ISSUE_TEMPLATE/config.yml b/.github/ISSUE_TEMPLATE/config.yml new file mode 100644 index 0000000..f152600 --- /dev/null +++ b/.github/ISSUE_TEMPLATE/config.yml @@ -0,0 +1,5 @@ +blank_issues_enabled: false +contact_links: + - name: Discussion + url: https://github.com/Goodwy/PlayBook/discussions + about: Please use the discussions for feature ideas, upvotes and general ideas. diff --git a/.github/ISSUE_TEMPLATE/feature_request.md b/.github/ISSUE_TEMPLATE/feature_request.md deleted file mode 100644 index 28cafe8..0000000 --- a/.github/ISSUE_TEMPLATE/feature_request.md +++ /dev/null @@ -1,20 +0,0 @@ ---- -name: Feature request -about: Suggest an idea for this project -title: '' -labels: '' -assignees: '' - ---- - -**Is your feature request related to a problem? Please describe.** -A clear and concise description of what the problem is. Ex. I'm always frustrated when [...] - -**Describe the solution you'd like** -A clear and concise description of what you want to happen. - -**Describe alternatives you've considered** -A clear and concise description of any alternative solutions or features you've considered. - -**Additional context** -Voice tries to follow the design principles of minimalism. That means that features that only you or only very few people would use won't be included so PlayBooks helps you in focusing on your audiobooks. diff --git a/.github/workflows/main.yml b/.github/workflows/main.yml index 80c067a..f3457ee 100644 --- a/.github/workflows/main.yml +++ b/.github/workflows/main.yml @@ -1,26 +1,60 @@ -name: CI +name: Main -on: [push] +on: [ push, pull_request ] env: - GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3000m" + GRADLE_OPTS: -Dorg.gradle.jvmargs="-Xmx3072m -XX:MaxMetaspaceSize=1g -Xms512m -XX:+HeapDumpOnOutOfMemoryError" jobs: - build: + test: timeout-minutes: 60 - runs-on: ubuntu-latest steps: - - uses: actions/checkout@v2 - - - uses: malinskiy/action-android/install-sdk@release/0.0.5 - - - name: Fastlane - uses: maierj/fastlane-action@v1.4.0 - with: - lane: ci - - - uses: actions/upload-artifact@v1.0.0 - if: always() - with: - name: "Artifacts" - path: "artifacts" + - uses: actions/checkout@v3 + + - run: ./gradlew testDebugUnitTest + - run: ./gradlew lintKotlin + - run: ./gradlew app:lintDebug + + - uses: actions/upload-artifact@v3 + if: always() + with: + name: "Artifacts" + path: | + artifacts/ + app/build/reports/*.html + + - name: Publish Test Report + uses: mikepenz/action-junit-report@v3 + if: always() + with: + report_paths: '**/test-results/**/TEST-*.xml' + + release: + timeout-minutes: 60 + runs-on: ubuntu-latest + needs: test + if: startsWith(github.ref, 'refs/tags') + env: + ANDROID_PUBLISHER_CREDENTIALS: ${{ secrets.ANDROID_PUBLISHER_CREDENTIALS }} + SIGNING_KEYSTORE_PLAY: ${{ secrets.SIGNING_KEYSTORE }} + SIGNING_PROPERTIES_PLAY: ${{ secrets.SIGNING_PROPERTIES }} + SIGNING_KEYSTORE_GITHUB: ${{ secrets.SIGNING_KEYSTORE_GITHUB }} + SIGNING_PROPERTIES_GITHUB: ${{ secrets.SIGNING_PROPERTIES_GITHUB }} + GOOGLE_SERVICES: ${{ secrets.GOOGLE_SERVICES }} + steps: + - uses: actions/checkout@v3 + + - run: mkdir -p signing/play + - run: mkdir -p signing/github + - run: echo $SIGNING_KEYSTORE_PLAY | base64 --decode > signing/play/signing.keystore + - run: echo $SIGNING_PROPERTIES_PLAY | base64 --decode > signing/play/signing.properties + - run: echo $SIGNING_KEYSTORE_GITHUB | base64 --decode > signing/github/signing.keystore + - run: echo $SIGNING_PROPERTIES_GITHUB | base64 --decode > signing/github/signing.properties + - run: echo $GOOGLE_SERVICES | base64 --decode > app/google-services.json + - run: ./gradlew app:publishReleaseBundle -PenableCrashlytics -Pvoice.signing.play=true --no-configuration-cache + - run: ./gradlew app:assembleRelease -PenableCrashlytics -Pvoice.signing.play=false --no-configuration-cache + + - name: Github Release + uses: softprops/action-gh-release@v1 + with: + files: app/build/outputs/apk/release/app-release.apk diff --git a/.gitignore b/.gitignore index 3e5ab38..7dc15b7 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,6 @@ MaterialAudiobookPlayer.iml reports mainframer.sh .mainframer -*.keystore artifacts testResults Gemfile.lock diff --git a/.idea/.gitignore b/.idea/.gitignore index 90e5894..36604ab 100644 --- a/.idea/.gitignore +++ b/.idea/.gitignore @@ -1,7 +1,14 @@ - +/androidTestResultsUserPreferences.xml # Default ignored files /workspace.xml /libraries /caches vcs.xml kotlinScripting.xml +/jarRepositories.xml +/compiler.xml +/assetWizardSettings.xml +/gradle.xml +/misc.xml +/deploymentTargetDropDown.xml +/.name diff --git a/.idea/assetWizardSettings.xml b/.idea/assetWizardSettings.xml index 31766c7..92dae5d 100644 --- a/.idea/assetWizardSettings.xml +++ b/.idea/assetWizardSettings.xml @@ -3,165 +3,6 @@ \ No newline at end of file + diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index ababb8b..20b3be8 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -7,11 +7,11 @@ - + - + \ No newline at end of file diff --git a/.idea/dictionaries/goodwy.xml b/.idea/dictionaries/goodwy.xml index b851fd1..b4a2d6e 100644 --- a/.idea/dictionaries/goodwy.xml +++ b/.idea/dictionaries/goodwy.xml @@ -3,7 +3,9 @@ constraintlayout coroutine + lerp seekable + snackbar \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml index 2cfe1b5..6b693a5 100644 --- a/.idea/gradle.xml +++ b/.idea/gradle.xml @@ -4,25 +4,45 @@ diff --git a/.idea/inspectionProfiles/Project_Default.xml b/.idea/inspectionProfiles/Project_Default.xml index f7c99ad..e1ee27c 100644 --- a/.idea/inspectionProfiles/Project_Default.xml +++ b/.idea/inspectionProfiles/Project_Default.xml @@ -2,6 +2,7 @@ \ No newline at end of file diff --git a/.idea/inspectionProfiles/ktlint.xml b/.idea/inspectionProfiles/ktlint.xml new file mode 100644 index 0000000..24b0cf1 --- /dev/null +++ b/.idea/inspectionProfiles/ktlint.xml @@ -0,0 +1,29 @@ + + + + \ No newline at end of file diff --git a/.idea/inspectionProfiles/profiles_settings.xml b/.idea/inspectionProfiles/profiles_settings.xml new file mode 100644 index 0000000..64580d1 --- /dev/null +++ b/.idea/inspectionProfiles/profiles_settings.xml @@ -0,0 +1,6 @@ + + + + diff --git a/.idea/jarRepositories.xml b/.idea/jarRepositories.xml index 7201070..d2ce72d 100644 --- a/.idea/jarRepositories.xml +++ b/.idea/jarRepositories.xml @@ -11,30 +11,15 @@