package Ġchat . simp lex . app . views . chat . item Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroidx . compose . foundation . combined Clickable Ċ import Ġandroidx . compose . foundation . layout .* Ċ import Ġandroidx . compose . foundation . shape . Rounded Corner Shape Ċ import Ġandroidx . compose . material .* Ċ import Ġandroidx . compose . material . icons . Icons Ċ import Ġandroidx . compose . material . icons . filled . Edit Ċ import Ġandroidx . compose . material . icons . outlined .* Ċ import Ġandroidx . compose . runtime .* Ċ import Ġandroidx . compose . ui . Alignment Ċ import Ġandroidx . compose . ui . Modifier Ċ import Ġandroidx . compose . ui . draw . clip Ċ import Ġandroidx . compose . ui . graphics . Color Ċ import Ġandroidx . compose . ui . graphics . vector . Image Vector Ċ import Ġandroidx . compose . ui . platform . Local Context Ċ import Ġandroidx . compose . ui . platform . Uri Handler Ċ import Ġandroidx . compose . ui . res . string Resource Ċ import Ġandroidx . compose . ui . tool ing . preview . Preview Ċ import Ġandroidx . compose . ui . unit . dp Ċ import Ġchat . simp lex . app . R Ċ import Ġchat . simp lex . app . model .* Ċ import Ġchat . simp lex . app . ui . theme . Simple X Theme Ċ import Ġchat . simp lex . app . views . chat . Compose Context Item Ċ import Ġchat . simp lex . app . views . chat . Compose State Ċ import Ġchat . simp lex . app . views . helpers .* Ċ import Ġkotlinx . datetime . Clock Ċ Ċ @ Composable Ċ fun ĠChat Item View ( ĊĠ Ġuser : ĠUser , ĊĠ Ġc Info : ĠChat Info , ĊĠ Ġc Item : ĠChat Item , ĊĠ Ġcompose State : ĠMutable State < Compose State >, ĊĠ Ġc xt : ĠContext , ĊĠ Ġuri Handler : ĠUri Handler ? Ġ= Ġnull , ĊĠ Ġshow Member : ĠBoolean Ġ= Ġfalse , ĊĠ Ġuse Link Pre views : ĠBoolean , ĊĠ Ġdelete Message : Ġ( Long , ĠCI Delete Mode ) Ġ-> ĠUnit , ĊĠ Ġreceive File : Ġ( Long ) Ġ-> ĠUnit , ĊĠ Ġaccept Call : Ġ( Contact ) Ġ-> ĠUnit Ċ ) Ġ{ ĊĠ Ġval Ġcontext Ġ= ĠLocal Context . current ĊĠ Ġval Ġsent Ġ= Ġc Item . chat Dir . sent ĊĠ Ġval Ġalignment Ġ= Ġif Ġ( sent ) ĠAlignment . Center End Ġelse ĠAlignment . Center Start ĊĠ Ġval Ġshow Menu Ġ= Ġremember Ġ{ Ġmutable State Of ( false ) Ġ} ĊĠ Ġval Ġsave File Launcher Ġ= Ġremember Save File Launcher ( c xt Ġ= Ġcontext , Ġci File Ġ= Ġc Item . file ) ĊĠ ĠBox ( ĊĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠ Ġ. padding ( bottom Ġ= Ġ 4 . dp ) ĊĠĠĠĠĠ Ġ. fill Max Width (), ĊĠĠĠ Ġcontent Alignment Ġ= Ġalignment , ĊĠ Ġ) Ġ{ ĊĠĠĠ ĠColumn ( ĊĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠ Ġ. clip ( Rounded Corner Shape ( 1 8 . dp )) ĊĠĠĠĠĠĠĠ Ġ. combined Clickable ( on Long Click Ġ= Ġ{ Ġshow Menu . value Ġ= Ġtrue Ġ}, ĠonClick Ġ= Ġ{}) ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠ Ġ@ Composable Ġfun ĠContent Item () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( c Item . file Ġ== Ġnull Ġ&& Ġc Item . quoted Item Ġ== Ġnull Ġ&& Ġis Short Emoji ( c Item . content . text )) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠEmoji Item View ( c Item ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠFrame d Item View ( user , Ġc Item , Ġuri Handler , Ġshow Member Ġ= Ġshow Member , Ġshow Menu , Ġreceive File ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠDropdown Menu ( ĊĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġshow Menu . value , ĊĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġshow Menu . value Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠModifier . width ( 2 2 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠItem Action ( string Resource ( R . string . reply _ verb ), ĠIcons . Outlined . Reply , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( compose State . value . editing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose State . value Ġ= ĠCompose State ( context Item Ġ= ĠCompose Context Item . Quoted Item ( c Item ), Ġuse Link Pre views Ġ= Ġuse Link Pre views ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose State . value Ġ= Ġcompose State . value . copy ( context Item Ġ= ĠCompose Context Item . Quoted Item ( c Item )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ ĠItem Action ( string Resource ( R . string . share _ verb ), ĠIcons . Outlined . Share , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Text ( c xt , Ġc Item . content . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ ĠItem Action ( string Resource ( R . string . copy _ verb ), ĠIcons . Outlined . Content Copy , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy Text ( c xt , Ġc Item . content . text ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Item . content . msg Content Ġis ĠMsg Content . MC Image Ġ|| Ġc Item . content . msg Content Ġis ĠMsg Content . MC File ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġget Loaded FilePath ( context , Ġc Item . file ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filePath Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠItem Action ( string Resource ( R . string . save _ verb ), ĠIcons . Outlined . Save Alt , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( c Item . content . msg Content ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMsg Content . MC Image Ġ-> Ġsave Image ( context , Ġc Item . file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠMsg Content . MC File Ġ-> Ġsave File Launcher . launch ( c Item . file ?. fileName ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ Ġif Ġ( c Item . meta . editable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠItem Action ( string Resource ( R . string . edit _ verb ), ĠIcons . Filled . Edit , ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcompose State . value Ġ= ĠCompose State ( editing Item Ġ= Ġc Item , Ġuse Link Pre views Ġ= Ġuse Link Pre views ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠ ĠItem Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . delete _ verb ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Outlined . Delete , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Message AlertDialog ( c Item , Ġdelete Message Ġ= Ġdelete Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ@ Composable Ġfun ĠDeleted Item () Ġ{ ĊĠĠĠĠĠĠĠ ĠDeleted Item View ( c Item , Ġshow Member Ġ= Ġshow Member ) ĊĠĠĠĠĠĠĠ ĠDropdown Menu ( ĊĠĠĠĠĠĠĠĠĠ Ġexpanded Ġ= Ġshow Menu . value , ĊĠĠĠĠĠĠĠĠĠ Ġon Dismiss Request Ġ= Ġ{ Ġshow Menu . value Ġ= Ġfalse Ġ}, ĊĠĠĠĠĠĠĠĠĠ ĠModifier . width ( 2 2 0 . dp ) ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠItem Action ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstring Resource ( R . string . delete _ verb ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcons . Outlined . Delete , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠonClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Menu . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Message AlertDialog ( c Item , Ġdelete Message Ġ= Ġdelete Message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcolor Ġ= ĠColor . Red ĊĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġ@ Composable Ġfun ĠCall Item ( status : ĠC IC all Status , Ġduration : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ ĠC IC all Item View ( c Info , Ġc Item , Ġstatus , Ġduration , Ġaccept Call ) ĊĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠ Ġwhen Ġ( val Ġc Ġ= Ġc Item . content ) Ġ{ ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . S nd Msg Content Ġ-> ĠContent Item () ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . R cv Msg Content Ġ-> ĠContent Item () ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . S nd Deleted Ġ-> ĠDeleted Item () ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . R cv Deleted Ġ-> ĠDeleted Item () ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . S nd Call Ġ-> ĠCall Item ( c . status , Ġc . duration ) ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . R cv Call Ġ-> ĠCall Item ( c . status , Ġc . duration ) ĊĠĠĠĠĠĠĠ Ġis ĠCI Content . R cv Integr ity Error Ġ-> ĠIntegr ity Error Item View ( c Item , Ġshow Member Ġ= Ġshow Member ) ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ @ Composable Ċ fun ĠItem Action ( text : ĠString , Ġicon : ĠImage Vector , ĠonClick : Ġ() Ġ-> ĠUnit , Ġcolor : ĠColor Ġ= ĠMaterial Theme . colors . on Background ) Ġ{ ĊĠ ĠDropdown MenuItem ( onClick ) Ġ{ ĊĠĠĠ ĠRow Ġ{ ĊĠĠĠĠĠ ĠText ( ĊĠĠĠĠĠĠĠ Ġtext , ĊĠĠĠĠĠĠĠ Ġmodifier Ġ= ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠ Ġ. weight ( 1 F ), ĊĠĠĠĠĠĠĠ Ġcolor Ġ= Ġcolor ĊĠĠĠĠĠ Ġ) ĊĠĠĠĠĠ ĠIcon ( icon , Ġtext , Ġt int Ġ= Ġcolor ) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ fun Ġdelete Message AlertDialog ( chat Item : ĠChat Item , Ġdelete Message : Ġ( Long , ĠCI Delete Mode ) Ġ-> ĠUnit ) Ġ{ ĊĠ ĠAlert Manager . shared . show AlertDialog Buttons ( ĊĠĠĠ Ġtitle Ġ= Ġgeneral GetString ( R . string . delete _ message __ question ), ĊĠĠĠ Ġtext Ġ= Ġgeneral GetString ( R . string . delete _ message _ cannot _ be _ und one _ warning ), ĊĠĠĠ Ġbuttons Ġ= Ġ{ ĊĠĠĠĠĠ ĠRow ( ĊĠĠĠĠĠĠĠ ĠModifier ĊĠĠĠĠĠĠĠĠĠ Ġ. fill Max Width () ĊĠĠĠĠĠĠĠĠĠ Ġ. padding ( horizontal Ġ= Ġ 8 . dp , Ġvertical Ġ= Ġ 2 . dp ), ĊĠĠĠĠĠĠĠ Ġhorizontal Arrange ment Ġ= ĠArrange ment . End , ĊĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdelete Message ( chat Item . id , ĠCI Delete Mode . cid m Internal ) ĊĠĠĠĠĠĠĠĠĠ ĠAlert Manager . shared . hide Alert () ĊĠĠĠĠĠĠĠ Ġ}) Ġ{ ĠText ( string Resource ( R . string . for _ me _ only )) Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( chat Item . meta . editable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ ĠSp acer ( Modifier . padding ( horizontal Ġ= Ġ 4 . dp )) ĊĠĠĠĠĠĠĠĠĠ ĠButton ( onClick Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Message ( chat Item . id , ĠCI Delete Mode . cid m Broadcast ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlert Manager . shared . hide Alert () ĊĠĠĠĠĠĠĠĠĠ Ġ}) Ġ{ ĠText ( string Resource ( R . string . for _ every body )) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠ Ġ) Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠPreview Chat Item View () Ġ{ ĊĠ ĠSimple X Theme Ġ{ ĊĠĠĠ ĠChat Item View ( ĊĠĠĠĠĠ ĠUser . sample Data , ĊĠĠĠĠĠ ĠChat Info . Direct . sample Data , ĊĠĠĠĠĠ ĠChat Item . get Sample Data ( ĊĠĠĠĠĠĠĠĠ 1 , ĠC ID irection . Direct S nd (), ĠClock . System . now (), Ġ" hello " ĊĠĠĠĠĠ Ġ), ĊĠĠĠĠĠ Ġuse Link Pre views Ġ= Ġtrue , ĊĠĠĠĠĠ Ġcompose State Ġ= Ġremember Ġ{ Ġmutable State Of ( Compose State ( use Link Pre views Ġ= Ġtrue )) Ġ}, ĊĠĠĠĠĠ Ġc xt Ġ= ĠLocal Context . current , ĊĠĠĠĠĠ Ġdelete Message Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}, ĊĠĠĠĠĠ Ġreceive File Ġ= Ġ{}, ĊĠĠĠĠĠ Ġaccept Call Ġ= Ġ{ Ġ_ Ġ-> Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ Ċ @ Preview Ċ @ Composable Ċ fun ĠPreview Chat Item View Deleted Content () Ġ{ ĊĠ ĠSimple X Theme Ġ{ ĊĠĠĠ ĠChat Item View ( ĊĠĠĠĠĠ ĠUser . sample Data , ĊĠĠĠĠĠ ĠChat Info . Direct . sample Data , ĊĠĠĠĠĠ ĠChat Item . get Deleted Content Sample Data (), ĊĠĠĠĠĠ Ġuse Link Pre views Ġ= Ġtrue , ĊĠĠĠĠĠ Ġcompose State Ġ= Ġremember Ġ{ Ġmutable State Of ( Compose State ( use Link Pre views Ġ= Ġtrue )) Ġ}, ĊĠĠĠĠĠ Ġc xt Ġ= ĠLocal Context . current , ĊĠĠĠĠĠ Ġdelete Message Ġ= Ġ{ Ġ_, Ġ_ Ġ-> Ġ}, ĊĠĠĠĠĠ Ġreceive File Ġ= Ġ{}, ĊĠĠĠĠĠ Ġaccept Call Ġ= Ġ{ Ġ_ Ġ-> Ġ} ĊĠĠĠ Ġ) ĊĠ Ġ} Ċ } Ċ