* This issue occurred when we tried to access ZIM files from the application’s folder in the `zimFiles()` method. In this method, we add directories to a non-null list of files. However, when attempting to retrieve the list of files from the application directory, the SD card path was null due to the SD card being unmounted, which caused the application to crash.
* To fix this, we have improved our `zimFiles()` and `obbFiles()` methods to return only existing, non-null directories. This ensures proper handling of file system detection, so if a directory is unavailable or returns null, these methods handle it appropriately.
* Since we are now creating dynamic shortcuts for the application, the static shortcut is no longer required, so we have removed the static shortcut code from our implementation.
* The donation popup will be shown to the user every three months.
* If the user clicks the "Later" button, the popup will appear again after 3 days.
* The donation popup will only be shown when there is at least one book available in the library. If no ZIM file is present, it’s not ideal to ask for a donation, as the user has not yet used the application.
* The donation popup will only be shown for custom apps when the support_url is configured. If the support menu item is hidden in the sidebar (a feature we offer), the donation popup will not be displayed, as there is no support_url available for that custom app.
* Also, now we are not using fetch library anymore so we have removed this from our credits files.
* Removed the unused code from detekt_baseline.xml file.
* Now all the downloading files will store in this public app-specific directory.
* Refactored the code to show this new location in storageSelection dialog for both internal and external storage.
* Updated the `README.md` file to educate user that how they can read already downloaded zim files in PS version.
* Refactored the test cases according to this change.
* Introduced the splitting zim file with 500MB for custom apps. Since the bundle has a limit for a file to upload it uses the play asset delivery mode, and for new custom apps, playStore does not allow to upload the apk (with apk we can upload more than 1GB file). So to address this issue we have introduced a feature in libzim where we can load the zim files via the fd list.
* We have modified our code to upload the files with 500MB chunks in the asset folder, and later we are accessing these files from the asset folder and creating the archive object with the help of the new libzim feature.
* The error was occurring when launching the `KiwixMainActivity`. At this moment, `coreComponent` was in creation process so it is not initialized at this moment, and we are passing this component in our `KiwixMainActivity` through interface for injection of this activity. But we are not using `coreComponent` object in our `KiwixMainActivity` so passing it to the activity is unused because we are injecting this activity through `cachedComponent`, and this unused object causing the error. So we have removed this interface from our `BaseActivity` and directly injecting `KiwixMainActivity` in via `cachedComponent`.
* Re-enabled the `LogConditional` lint check.
* Introduced a `Log` class that exclusively handles logging operations in the debug variant.
* Removed unnecessary `if (BuildConfig.DEBUG)` conditions from the project.
* We have excluded the universal APK from the variant list that is being uploaded to the Play Store.
* This exclusion is necessary because we cannot disable the universal APK, as it is required to set the version code for the bundle. Disabling the universal APK would result in the bundle version code being set exclusively for `x86_64`.
* Introduced the 'Support kiwix' option, which is configurable in the navigation for custom apps. If the custom app is set to display the "Support" menu item in navigation, it will be shown; otherwise, it will be hidden from the app.
* Replaced the "kiwix" and "the" prefixes in "Support kiwix" and "About the app" with the app name in the navigation.
* If the custom app is configured to display the 'About the app' option in navigation, it will be visible. Clicking on it will redirect the user to the configured URL.
* We have introduced the option to disable external links for custom apps. If a custom app is configured not to display the external links popup, it will both hide the external links preference from settings and refrain from showing the external link popup when opening external links. Additionally, we have included relevant comments within the methods and code to provide developers with a clear understanding of the reasons behind these changes.
* Introduced a search placeholder for custom apps; if any custom app is configured not to show the title in the toolbar, it will display the search placeholder with a border. To implement this change, a layout has been added inside the toolbar.
* To enhance understanding of this change, proper comments have been added to the methods.