This is a web feed reader for Android.
./gradlew assembleDebug./gradlew assembleRelease./gradlew testDebugUnitTest./gradlew testDebugUnitTest --tests "org.vestifeed.feeds.FeedsModelTest"./gradlew test./gradlew connectedDebugAndroidTest./gradlew clean./gradlew assembleDebug --info- Kotlin 2.3.10
- Java 21 (JVM target)
- Android SDK 36 (compileSdk)
org.vestifeed.app/src/main/kotlin/<package>/ # App code
org.vestifeed.app/src/test/kotlin/<package>/ # Unit tests
org.vestifeed.app/src/androidTest/kotlin/ # Instrumented tests
- Group by feature/domain (e.g.,
org.vestifeed.feeds,org.vestifeed.entries,org.vestifeed.auth,org.vestifeed.sync) - Use lowercase with camelCase for file names
- Fully qualified imports (no wildcard imports)
- Order: standard library -> Android -> external libraries -> project
- Example:
package org.vestifeed.feeds import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope import co.appreactor.feedk.AtomLinkRel import org.vestifeed.conf.ConfRepo import kotlinx.coroutines.Dispatchers
- Classes: PascalCase (e.g.,
FeedsModel,EntriesAdapter) - Functions: camelCase (e.g.,
addFeed,importOpml) - Variables/Properties: camelCase (e.g.,
hasActionInProgress,error) - Sealed class states: PascalCase with object/data class (e.g.,
State.Loading,State.ShowingFeeds) - Test classes:
<ClassName>Testsuffix (e.g.,FeedsModelTest) - Test methods: descriptive names, no prefix (e.g.,
fun init())
- Use nullable types (
?) when values can be null - Avoid
!!operator; prefer safe calls (?.) and elvis operator (?:) - Use
runCatchingfor exception handling instead of try-catch when appropriate
- Raw SQL and built-in helpers only, no external deps or ORMs
- Check schema.sql to see the full picture
- Retrofit + OkHttp for API calls
- MockWebServer for testing API integrations
- JUnit 4
- ViewBinding enabled
- Use
FragmentwithFragmentKtxextensions - Use
Dispatchers.setMain/resetMainin@Before/@After
- 4 spaces for indentation (Kotlin default)
- No explicit line length limit (follow Android Studio defaults)
- Trailing commas for readability
- Single blank line between top-level declarations
- Don't use
varunless necessary (preferval) - Don't commit secrets or keys to the repository