package Ġxyz . k linker . messenger . fragment . message . attach Ċ Ċ import Ġandroid . animation . Value Animator Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . net . Uri Ċ import Ġandroid . view . View Ċ import Ġandroid . view . animation . De cel erate Interpolator Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . Horizontal ScrollView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġxyz . k linker . messenger . R Ċ import Ġxyz . k linker . messenger . fragment . message . Message List Fragment Ċ import Ġxyz . k linker . messenger . shared . data . DataSource Ċ import Ġxyz . k linker . messenger . shared . util . Density Util Ċ import Ġxyz . k linker . messenger . view . Selected Attachment View Ċ Ċ class ĠAttachment Manager ( private Ġval Ġfragment : ĠMessage List Fragment ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġactivity : ĠFragment Activity ? Ġby Ġlazy Ġ{ Ġfragment . activity Ġ} ĊĊĠĠĠ Ġval Ġarg Manager ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġfragment . arg Manager ĊĊĠĠĠ Ġvar Ġcurrently Attached : ĠMutable Set < Selected Attachment View > Ġ= Ġhash Set Of () ĊĠĠĠ Ġvar Ġediting Image : ĠSelected Attachment View ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġattach Layout : ĠView ? Ġby Ġlazy Ġ{ Ġfragment . root View ?. findViewById < View >( R . id . attach _ layout ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġattached Image Scroller : ĠHorizontal ScrollView Ġby Ġlazy Ġ{ Ġfragment . root View !!. findViewById < Horizontal ScrollView >( R . id . attached _ image _ sc roller ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġattached Image Holder : ĠLinearLayout Ġby Ġlazy Ġ{ Ġfragment . root View !!. findViewById < LinearLayout >( R . id . attached _ image _ holder ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġattach : ĠView Ġby Ġlazy Ġ{ Ġfragment . root View !!. findViewById < View >( R . id . attach ) Ġ} ĊĠĠĠ Ġprivate Ġval Ġmessage Entry : ĠEditText Ġby Ġlazy Ġ{ Ġfragment . root View !!. findViewById < View >( R . id . message _ entry ) Ġas ĠEditText Ġ} ĊĊĠĠĠ Ġfun Ġsetup Helper Views () Ġ{ ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġclear Attached Data () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrently Attached . clear () ĊĠĠĠĠĠĠĠ Ġfragment . counter Calculator . update Counter Text () ĊĊĠĠĠĠĠĠĠ ĠThread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource . delete Draft s ( activity !! , Ġarg Manager . conversation Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. start () ĊĊĠĠĠĠĠĠĠ Ġhide Attachments () ĊĠĠĠĠĠĠĠ Ġattached Image Holder . removeAll Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġwrite Draft Of Attachment () Ġ{ ĊĠĠĠĠĠĠĠ Ġcurrently Attached . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠDataSource . insert Draft ( activity , Ġarg Manager . conversation Id , Ġit . media Uri . toString (), Ġit . mime Type ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġediting Image ( view : ĠSelected Attachment View ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthis . editing Image Ġ= Ġview ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġremove Attachment ( uri : ĠUri ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= Ġcurrently Attached . first OrNull Ġ{ Ġit . media Uri Ġ== Ġuri Ġ} Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġattached Image Holder . remove View ( view . view ) ĊĠĠĠĠĠĠĠ Ġcurrently Attached . remove ( view ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( currently Attached . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhide Attachments () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġattach Media ( uri : ĠUri ?, ĠmimeType : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġuri Ġ== Ġnull Ġ|| Ġcurrently Attached . any Ġ{ Ġit . media Uri Ġ== Ġuri Ġ}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġview Ġ= ĠSelected Attachment View ( activity !! ) ĊĠĠĠĠĠĠĠ Ġview . setup ( this , Ġuri , ĠmimeType ) ĊĊĠĠĠĠĠĠĠ Ġcurrently Attached . add ( view ) ĊĠĠĠĠĠĠĠ Ġattached Image Holder . addView ( view . view ) ĊĠĠĠĠĠĠĠ Ġshow Attachments () ĊĊĠĠĠĠĠĠĠ Ġfragment . counter Calculator . update Counter Text () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback Pressed () Ġ= Ġif Ġ( attach Layout ?. visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠ Ġattach . is Sound Effects Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġattach . perform Click () ĊĠĠĠĠĠĠĠ Ġattach . is Sound Effects Enabled Ġ= Ġtrue ĊĊĠĠĠĠĠĠĠ Ġfragment . attach Initializer . onClose () ĊĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Attachments () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( attached Image Scroller . visibility Ġ== ĠView . VISIBLE ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġattached Image Scroller . layout Params . height Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġattached Image Scroller . alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġattached Image Scroller . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġattached Image Scroller . layout Params ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Int ( 0 , ĠD ensity Util . to Dp ( activity , Ġ 1 2 4 )) Ġ// Ġ 9 6 Ġfor Ġimage Ġsize Ġ+ Ġ 1 2 Ġfor Ġmargin Ġtop Ġon Ġimage Ġ+ Ġ 1 6 Ġfor Ġpadding Ġtop / bottom Ġon Ġsc roller ĊĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattached Image Scroller . layout Params Ġ= Ġparams ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= ĠAN IM ATION _ INTER POL ATOR ĊĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= ĠAN IM ATION _ DURATION ĊĠĠĠĠĠĠĠ Ġanim ator . start Delay Ġ= ĠAN IM ATION _ START _ DELAY ĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĊĠĠĠĠĠĠĠ Ġattached Image Scroller . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 1 0 0 f ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( ANIM ATION _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( ANIM ATION _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( ANIM ATION _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĊĠĠĠĠĠĠĠ Ġset Max Lines ( 3 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġhide Attachments () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġattached Image Scroller . layout Params ĊĠĠĠĠĠĠĠ Ġval Ġanim ator Ġ= ĠValue Animator . of Int ( attached Image Scroller . meas ured Height , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġanim ator . add Update Listener Ġ{ Ġvalue Animator Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvalue Ġ= Ġvalue Animator . animated Value Ġas ĠInt ĊĠĠĠĠĠĠĠĠĠĠĠ Ġparams . height Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġattached Image Scroller . layout Params Ġ= Ġparams ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( value Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattached Image Scroller . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġanim ator . interpol ator Ġ= ĠAN IM ATION _ INTER POL ATOR ĊĠĠĠĠĠĠĠ Ġanim ator . duration Ġ= ĠAN IM ATION _ DURATION ĊĠĠĠĠĠĠĠ Ġanim ator . start Delay Ġ= ĠAN IM ATION _ DURATION ĊĠĠĠĠĠĠĠ Ġanim ator . start () ĊĊĠĠĠĠĠĠĠ Ġattached Image Scroller . animate () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. alpha ( 0 F ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Interpolator ( ANIM ATION _ INTER POL ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Start Delay ( ANIM ATION _ START _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Duration ( ANIM ATION _ DURATION ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. start () ĊĊĠĠĠĠĠĠĠ Ġset Max Lines ( activity ?. resources ?. getInteger ( R . integer . message _ list _ fragment _ line _ entry _ count ) Ġ?: Ġ 6 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Max Lines ( value : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġorientation Ġ= Ġactivity ?. resources ?. configuration ?. orientation ĊĠĠĠĠĠĠĠ Ġif Ġ( activity ?. resources ?. getBoolean ( R . bool . is _ tablet ) Ġ== Ġfalse Ġ&& Ġorientation Ġ== ĠConfiguration . OR IENTATION _ POR TRA IT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmessage Entry . max Lines Ġ= Ġvalue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠAN IM ATION _ INTER POL ATOR Ġ= ĠDec el erate Interpolator () ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM ATION _ DURATION Ġ= Ġ 2 0 0 L ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠAN IM ATION _ START _ DELAY Ġ= Ġ 0 L ĊĠĠĠ Ġ} Ċ }