Matrix Chat Client
I used Trixnity to build a Matrix chat client for my car.
Trixnity was perfect for my use-case. I wanted something that handled for me:
- offline syncing and fetching new messages
- communicating to the Matrix chat server
- piecing together matrix rooms into one cohesive chat flow
- worked with the encryption my friend set up
- fetching images
The main goal was to write a handful of screens that were fed minimally by some Kotlin Flows that populated the data. Trixnity fit the bill. The trick was to design a UI that could only be used by a rotary knob that clicks.
Screens
---
config:
theme: default
---
flowchart LR
ChatAppHomeScreen["`_Screen_
Chat App Home`"]
ChatRoomScreen["`_Screen_
Chat Room`"]
PictureViewerScreen["`_Screen_
PictureViewer`"]
RoomMembersListScreen["`_Screen_
Room Members List`"]
ContactInfoScreen["`_Screen_
Contact Info`"]
RoomSelectorScreen["`_Screen_
Room Selector`"]
RoomInfoScreen["`_Screen_
Room Info`"]
RoomUploadsScreen["`_Screen_
Room Uploads`"]
subgraph Settings
ChatSetupMenuRoot["`_Screen_
Chat Setup Menu Root`"]
LoginScreen["`_Screen_
Login`"]
LoginScreenLoading["`_State_
Loading`"]
LoginScreenPromptCred["`_State_
Prompt Credenitals`"]
LoginScreenFailed["`_State_
Failed`"]
LoginScreenSuccess["`_State_
Success`"]
LoginScreen <.- LoginScreenPromptCred
LoginScreen <.- LoginScreenFailed
LoginScreen <.- LoginScreenLoading
LoginScreen <.- LoginScreenSuccess
NotificationPreferences["`_Screen_
Notification Settings`"]
LogoutAction["`_Action_
Logout`"]
end
ChatAppHomeScreen-- Not Logged In --> LoginScreen
LoginScreen-- Check Stored Credentials and Login --> LoginScreenLoading
LoginScreenLoading-- No Creds --> LoginScreenPromptCred
LoginScreenLoading-- Ok --> LoginScreenSuccess
LoginScreenLoading-- Failed --> LoginScreenFailed
LoginScreenFailed-- Go Back --> ChatAppHomeScreen
LoginScreenPromptCred --> LoginScreenLoading
ChatAppHomeScreen <--> ChatSetupMenuRoot
ChatSetupMenuRoot --> LoginScreen
ChatSetupMenuRoot --> LogoutAction
LoginScreenSuccess --> ChatAppHomeScreen
ChatSetupMenuRoot <--> NotificationPreferences
ChatAppHomeScreen <-- Open Preselected Room --> ChatRoomScreen
ChatRoomScreen <--> RoomMembersListScreen
ChatRoomScreen <--> RoomUploadsScreen
RoomUploadsScreen <--> PictureViewerScreen
ChatAppHomeScreen <--> RoomSelectorScreen
ChatRoomScreen --> RoomInfoScreen
RoomInfoScreen -- Go back --> ChatRoomScreen
RoomSelectorScreen --> RoomInfoScreen
RoomInfoScreen -- Go back --> RoomSelectorScreen
RoomMembersListScreen <--> ContactInfoScreen