This document tracks the conversion of Convos from iOS (Swift) to Android (Kotlin).
- Create Android project structure (Gradle-based)
- Set up Gradle build configuration with product flavors (local, dev, prod)
- Configure package structure (com.convos.android)
- Set up version catalog for dependency management
- Configure ProGuard/R8 rules for release builds
- Set up Android manifest with required permissions
- Configure app signing for release builds
- Port ConfigManager to Android (environment switching)
- Convert config.*.json files to Android build config
- Set up Firebase for Android (3 flavors: local, dev, prod)
- Configure google-services.json for each flavor
- Port AppEnvironment to Android
- Set up Android keystore/secrets management
- Configure build variants and flavor dimensions
- Add XMTP Android SDK dependency
- Add Room database dependency (replacement for GRDB)
- Add Firebase SDK (Core, Analytics, App Check)
- Add Jetpack Compose dependencies
- Add Kotlin Coroutines and Flow
- Add Retrofit/OkHttp for networking
- Add Coil for image loading
- Add Protocol Buffers support for Android
- Add secp256k1 support for Android
- Design Room database schema
- Convert DB models (DBConversation, DBMessage, DBInbox, etc.)
- Create Room @Entity classes
- Create Room @Dao interfaces
- Convert DatabaseManager to Android Room
- Port all Repositories (21 files)
- Port all Writers (12 files)
- Port hydration logic (DB to domain model mapping)
- Implement database migrations
- Add database testing
- Convert domain models (Conversation, Message, Inbox, Profile, etc.)
- Port ConversationStateMachine
- Port InboxStateMachine
- Port SessionManager and SessionManagerProtocol
- Port ConvosClient
- Port MessagingService and MessagingServiceProtocol
- Port InboxStateManager
- Port SyncingManager
- Set up XMTP Android client
- Port XMTPClientProvider
- Port custom content types (ExplodeSettingsCodec)
- Port conversation authorization logic
- Port message sending/receiving
- Port push notification integration with XMTP
- Test XMTP connectivity and messaging
- Port KeychainIdentityStore to Android (use EncryptedSharedPreferences/Keystore)
- Port AuthService and AuthServiceProtocol
- Port KeychainService
- Implement secure storage for identity keys
- Port ConvosKeychainItem logic
- Port ConvosAPIClient using Retrofit
- Convert API models
- Implement API error handling
- Add network connectivity monitoring
- Implement request/response interceptors
- Set up Jetpack Compose theme system
- Port color system from Assets.xcassets to Compose Color
- Create typography system (Compose)
- Port Design System components
- Create reusable Compose components
- Set up navigation (Jetpack Navigation Compose)
- Port ConversationsView (conversation list)
- Port ConversationsViewModel
- Port Conversation Detail view and components (65 files!)
- Port Conversation Creation flow (4 files)
- Port message input and bubble components
- Port avatar and image handling
- Port ProfileView
- Port AppSettingsView
- Port DebugView and DebugExportView
- Port shared views (22 files)
- Port explode feature UI
- Port utility classes (AsyncTimeout, Base64URL, etc.)
- Port extension functions
- Port Logger to Android (Timber/Logcat)
- Port date/time utilities
- Port string utilities
- Port image compression utilities
- Port QR code generation
- Implement Firebase Cloud Messaging (FCM)
- Port NotificationService extension logic
- Port PushNotificationPayload
- Port DeviceRegistrationManager
- Implement notification channels
- Handle notification taps and deep linking
- Test notification delivery
- Configure Android App Links (Universal Links equivalent)
- Configure custom URL schemes
- Port DeepLinkHandler
- Implement intent handling
- Test deep link flows
- Convert app icons for Android (adaptive icons)
- Convert SVG assets to Android Vector Drawables
- Set up image caching (Coil)
- Port AvatarView with caching
- Optimize image resources
- Set up JUnit for unit tests
- Port unit tests (SessionManagerTests, etc.)
- Set up Espresso for UI tests
- Create instrumented tests for database
- Test XMTP integration
- Test multi-environment builds
- Configure GitHub Actions for Android (or Bitrise)
- Set up automated builds
- Configure Play Store release pipeline
- Set up crash reporting (Firebase Crashlytics)
- Configure app distribution for testing
- Update README for Android
- Create Android best practices guide
- Document build/run instructions
- Clean up iOS-specific files (if repo is Android-only)
- Update release process documentation
- End-to-end testing of all features
- Test on multiple Android versions
- Test on multiple device sizes/densities
- Performance testing and optimization
- Memory leak detection
- Battery usage optimization
- Prepare Play Store listing
- Create store screenshots
- Write store description
- Prepare privacy policy
- Submit for review
- Total Swift files to convert: ~150+
- Priority: Core → UI → Polish
- Consider using shared Kotlin Multiplatform for core logic if maintaining both platforms