Update KMP string resource usage in TopicScreenTest, restore lifecycle-based undo clearing in bookmarks, and stabilize SyncWorkerTest to validate startup request configuration without depending on runtime Koin initialization.
Co-authored-by: Cursor <cursoragent@cursor.com>
Move test-only dependencies out of commonMain to stop androidx.test classes leaking into app runtime, which fixes missing ActivityInvoker in the test APK. Also update instrumented tests to use Compose resource APIs correctly, make navigation assertions resilient to emulator back-stack variance, and use version-catalog lifecycle testing deps where required.
The notification icons are now stored in `:core:notifications`.
This forces `:sync:work` to depend on it.
Another solution could be to provide the resource id through Hilt, but it would require more changes.
- Reduce the visibility of multiple Hilt `Module`s and implementations of public interfaces
- Correctly configure the visibility of dependencies:
- `api` when it's part of it's public `api`
- `implementation` when it's part of it's internal `implementation`
- Remove unnecessary dependencies in build.gradle.kts files
- Remove unnecessary dependencies provided by plugins
- Remove unnecessary applied plugins (i.e. roborazzi)
- Sort dependencies in `build.gradle.kts`
- Delete unused entries in `libs.versions.toml`
* Moved protobuf to separate module to avoid having to wire KSP's Plugin with the Protobuf Plugin.
* `@Binds` function cannot be an extension function.
* Commented `kotlin.compiler.execution.strategy=in-process` in CI to circumvent OOMs due to increased metaspace usage.
And move Firebase Messaging dependency to the appropriate configuration.
Relates to #360
```
nowinandroid/app/src/main/AndroidManifest.xml Warning:
meta-data#com.google.samples.apps.nowinandroid.sync.initializers.SyncInitializer was tagged at AndroidManifest.xml:0 to remove other declarations but no other declaration present
```
Implement search feature
- Add a feature module named "search"
- Add a SearchScreen that is navigated by tapping the search icon at the top left corner
- Add a data layer that takes care of populating the *Fts tables and querying them by a search query
- Add a SearchViewModel that wires up the data layer of the Fts tables with the SearchScreen
The SearchScreen has following features:
- The user is able to type the search query in the TextField
- The search result is displayed as the user types
- When the search result is clicked, it navigates to:
- The InterestsScreen when a topic is clicked
- Chrome custom tab with the URL of the clicked news resource
- When the search result is clicked or the IME is explicitly closed by the user, the current search query in the TextField is saved as recent searches
- Latest recent searches are displayed in the SearchScreen