* Fixed: The `DownloadTest`.
* Fixed: The `uiDevice.pressBack` was not working with compose UI so we have replaced it with `Espresso.pressBack`.
* Fixed: NoteFragmentTest.
* Fixed: Pressing the back button now correctly closes the left drawer when it’s open on the Local Library or Online fragments.
* Introduced: A common mechanism to support back press handling across all fragments and the activity, and added support for "Periodic back navigation".
* Refactored the `DarkModeViewPainterTest` with compose UI.
* Refactored the `CopyMoveFileHandlerTest` according to compose UI.
* Refactored the test cases to get the fragments in test cases according to compose based navigation.
* Refactored the `SearchFragmentTestForCustomApp` test case.
* Removed `kiwix_nav_graph` and `custom_nav_graph`, and refactored the remaining code that depended on them.
* Refactored `HotspotNotificationManager` to use the Compose-based navigation graph instead of the XML one.
* Fixed: When scrolling, the BottomAppBar was appearing behind the navigation buttons.
* Fixed: The hint in the table of contents was not showing on first-time app install.
* Fixed: Pressing the back button was immediately exiting the app when the table of contents drawer was open.
* Created the `CustomNavGraph` for custom app navigation and refactored related code.
* Refactored the logic to dynamically disable the left drawer when a custom app is configured not to show it.
* Simplified the code for enabling/disabling the sidebar.
* Resolved all lint and Detekt errors.
* Fixed: Open library button not working.
* Fixed: opening ZIM file from storage (using the plus button) had too much bottom margin after migrating MainActivity to Compose.
* Added support for automatically hiding and showing the BottomAppBar while scrolling, using the Compose approach.
* Many other improvements in UI and logics.
* Show or hide the BottomAppBar when full screen mode is enabled/disabled or when tabs are visible.
* Disable the left drawer when opening full screen mode, tabs, etc.
* Removed the `DefaultLanguageProvider` since now it is unused according to this new approach.
* Refactored the `SaveLanguagesAndFinishTest` unit test according to this new approach.
* Improved the UI to show the selected language on `OnlineLibrary` screen to inform users which language they have selected for fetching the ZIM files.
* Refactored the code to apply the search filter same like kiwix server.
* Previously, we used `Locale.getISOLanguages()` to display the language list. However, this did not include all the languages in which books are available. Now, we use the `OPDS` stream via libkiwix to fetch online books, and utilize a method in libkiwix that provides the list of available book languages. This dynamically retrieved list is now shown in the `LanguageFragment`, allowing users to select a language and download books accordingly.
* The `LanguageFragment` previously relied on `ObjectBox` for storing and managing selected languages. This has now been migrated to use `Room` database instead.
* A migration strategy has been added to move previously selected languages from ObjectBox to Room.
* Corresponding test cases for migration have been added, and existing tests have been refactored to reflect these changes.
* Since we now rely on `libkiwix` to retrieve the language list, the `ZimManageViewModelTest` initially failed due to native code dependencies (JNI) not loading in unit test environments. To address this, we refactored the code and introduced a `JNIModule` class in the app module (where `OnlineLibraryManager` resides). We now inject the `Library` object, allowing us to pass a mocked instance to `ZimManageViewModel` for proper unit testing.
* Implemented the `DonationLayout` using Compose UI.
* Refactored the `ReaderScreen` to integrate the new Compose-based layout.
* Added a maximum width constraint to the donation layout to prevent it from appearing too wide in landscape mode or on tablets.
* Removed unused code from the project.
* Moved the scrolling logic of the WebView into the Compose UI, as custom scroll handling in the WebView was causing issues.
* Removed ToolbarScrollingKiwixWebView since it's no longer needed—scrolling is now managed entirely within Compose.
* Added animations for opening and closing the tab switcher view.
* Fixed: Missing bottom margin in custom apps.
* Fixed: Reader's bottom app bar not appearing after closing or selecting a tab.
* Fixed: Menu not showing in the toolbar when the application is freshly launched in custom apps.
* Refactored the scroll behavior of the toolbar and bottom app bar to sync with WebView scrolling in the Compose UI.
* Refactored the "FullScreen Video" functionality according to compose UI.
* Refactored the functionality where custom app is configured to show search placeholder in toolbar, and created the search placeholder in compose.
* Refactored the functionality where custom app is configured to show app icon in place of humbuger icon.
* Removed unused code from the reader screen.
* Refactored fullscreen mode functionality to align with Compose UI.
* Improved the `CloseAllTabs` button styling to match the app theme.
* Refactored the "Back to Top" button functionality using Compose, and enhanced its UI.
* Fixed: `Long-press` on bottom app bar buttons was not working due to `IconButton` consuming the touch event.
* Removed the unused `AnimationUtils` file.
* Fixed: Navigation history (forward and backward) was not being displayed.