package Ġme . ty ler bw ong . stack . ui . questions . detail . post Ċ Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroidx . annotation . String Res Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar . Duration Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġme . ty ler bw ong . stack . R Ċ import Ġme . ty ler bw ong . stack . data . Site Store Ċ import Ġme . ty ler bw ong . stack . data . network . service . Question Service Ċ import Ġme . ty ler bw ong . stack . data . persistence . dao . Answer Draft Dao Ċ import Ġme . ty ler bw ong . stack . data . persistence . entity . Answer Draft Entity Ċ import Ġme . ty ler bw ong . stack . ui . utils . Single Live Event Ċ import Ġtim ber . log . Tim ber Ċ Ċ class ĠPost Answer ViewModel ( ĊĠĠĠ Ġprivate Ġval Ġservice : ĠQuestion Service , ĊĠĠĠ Ġprivate Ġval Ġdraft Dao : ĠAnswer Draft Dao , ĊĠĠĠ Ġprivate Ġval Ġsite Store : ĠSite Store Ċ ) Ġ: ĠViewModel () Ġ{ ĊĠĠĠ Ġinternal Ġvar Ġmarkdown Text Watcher : ĠText Watcher ? Ġ= Ġnull ĊĠĠĠ Ġinternal Ġvar Ġselected Tab Position Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġvar Ġquestion Id Ġ= Ġ 0 ĊĠĠĠ Ġinternal Ġvar Ġquestion Title Ġ= Ġ"" ĊĊĠĠĠ Ġval Ġsaved Draft : ĠLive Data < String > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ saved Draft ĊĠĠĠ Ġprivate Ġval Ġ_ saved Draft Ġ= ĠMutable LiveData < String >() ĊĊĠĠĠ Ġval Ġsn ackbar : ĠLive Data < Post Answer State > ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġ_ sn ackbar ĊĠĠĠ Ġprivate Ġval Ġ_ sn ackbar Ġ= ĠSingle Live Event < Post Answer State >() ĊĊĠĠĠ Ġfun Ġpost Answer ( markdown : ĠString , Ġis Preview : ĠBoolean Ġ= Ġfalse ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ sn ackbar . value Ġ= ĠPost Answer State . Loading ĊĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanswer Ġ= Ġservice . post Answer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Markdown Ġ= Ġmarkdown , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Ġ= Ġis Preview ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). items ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sn ackbar . value Ġ= Ġif Ġ( answer . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPost Answer State . Success ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException (" Could Ġnot Ġpost Ġanswer ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sn ackbar . value Ġ= ĠPost Answer State . Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġfetch Draft IfExists () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdraft Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraft Dao . get Answer Draft ( question Id , Ġsite Store . site ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Title Ġ= Ġdraft . question Title ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ saved Draft . value Ġ= Ġdraft . body Markdown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . w (" No Ġdraft Ġfor Ġquestion Id Ġ$ question Id : Ġ$ ex ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Draft ( markdown : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraft Dao . insert Answer Draft ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAnswer Draft Entity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġquestion Title , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSystem . currentTimeMillis (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmarkdown , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsite Store . site ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ sn ackbar . value Ġ= ĠPost Answer State . Error ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġdelete Draft () Ġ{ ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdraft Dao . delete Draft ById ( question Id , Ġsite Store . site ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . e ( ex ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ sealed Ġclass ĠPost Answer State (@ String Res Ġval ĠmessageId : ĠInt , Ġ@ Duration Ġval Ġduration : ĠInt ) Ġ{ ĊĠĠĠ Ġobject ĠSuccess Ġ: ĠPost Answer State ( R . string . post _ answer _ success , ĠSn ackbar . LENGTH _ LONG ) ĊĠĠĠ Ġobject ĠLoading Ġ: ĠPost Answer State ( R . string . post ing _ answer , ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠ Ġobject ĠError Ġ: ĠPost Answer State ( R . string . post _ answer _ error , ĠSn ackbar . LENGTH _ LONG ) Ċ } Ċ