package Ġcom . s ui han 7 4 . sat ena . scenes . entries 2 Ċ Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . lifecycle . Lifecycle Owner Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget . Diff Util Ċ import Ġandroidx . recyclerview . widget . ListAdapter Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġcom . s ui han 7 4 . hat ena Lib . Bookmark Result Ċ import Ġcom . s ui han 7 4 . hat ena Lib . Entry Ċ import Ġcom . s ui han 7 4 . sat ena . databinding . Footer RecyclerView Load able Binding Ċ import Ġcom . s ui han 7 4 . sat ena . databinding . List view Item Entries 2 Binding Ċ import Ġcom . s ui han 7 4 . utilities .* Ċ import Ġcom . s ui han 7 4 . utilities . extensions . also As Ċ import Ġkotlinx . coroutines .* Ċ import Ġkotlinx . coroutines . sync . Mutex Ċ Ċ class ĠEnt ries Adapter ( ĊĠĠĠ Ġprivate Ġvar Ġlifecycle Owner : ĠLifecycle Owner Ċ ) Ġ: ĠList Adapter < Recycler State < Entry >, ĠRecyclerView . ViewHolder >( Diff Callback ()) Ġ{ ĊĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Clicked Ġ: ĠItem Clicked Listener < Entry >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª è¤ĩ æķ° åĽŀ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Multiple Clicked Ġ: ĠItem Multiple Clicked Listener < Entry >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª éķ· æĬ ¼ ãģĹ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Long Clicked Ġ: ĠItem Long Clicked Listener < Entry >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª åı³ ç«¯ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Edge Clicked Ġ: ĠItem Clicked Listener < Entry >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª åı³ ç«¯ è¤ĩ æķ° åĽŀ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Edge Multiple Clicked Ġ: ĠItem Multiple Clicked Listener < Entry >? Ġ= Ġnull ĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª åı³ ç«¯ éķ· æĬ ¼ ãģĹ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Item Edge Long Clicked Ġ: ĠItem Long Clicked Listener < Entry >? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠãĤ³ ãĥ¡ãĥ³ãĥĪ éĥ¨åĪĨ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Comment Clicked Ġ: Ġ(( Entry , ĠBook mark Result )-> Unit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠãĤ³ ãĥ¡ãĥ³ãĥĪ éĥ¨åĪĨ éķ· æĬ ¼ ãģĹ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Comment Long Clicked Ġ: Ġ(( Entry , ĠBook mark Result )-> Unit )? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĠãĤ¢ ãĤ¤ ãĥĨ ãĥł è¿½åĬł å®Į äºĨ æĻĤ ãģ® æĮ Ļ åĭķ Ġ*/ ĊĠĠĠ Ġprivate Ġvar Ġon Items Submitted Ġ: ĠListener < List < Entry > ?> ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** Ġ ãĤ¯ãĥªãĥĥãĤ¯ åĩ¦çĲĨ æ¸ Ī ãģ¿ ãĥķ ãĥ© ãĤ° ï¼Ī è¤ĩ æķ° åĽŀ ãĤ¿ ãĥĥãĥĹ ãģķãĤĮ ãģªãģĦ ãĤĪãģĨãģ« ãģĻãĤĭ ï¼ī Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġclick Lock Ġ= ĠMutex () ĊĊĠĠĠ Ġ/** Ġ ãĤ¯ãĥªãĥĥãĤ¯ åĽŀ æķ° åĪ¤ å®ļ æĻĤéĸĵ Ġ*/ ĊĠĠĠ Ġvar Ġmultiple Click Duration : ĠLong Ġ= Ġ 0 L ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Clicked Listener ( listener : ĠItem Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® éĢ£ ç¶ļ è¤ĩ æķ° åĽŀ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Multiple Clicked Listener ( listener : ĠItem Multiple Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Multiple Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® éķ· æĬ ¼ ãģĹ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Long Clicked Listener ( listener : ĠItem Long Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Long Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Edge Clicked Listener ( listener : ĠItem Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Edge Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® éĢ£ ç¶ļ è¤ĩ æķ° åĽŀ ãĤ¯ãĥªãĥĥãĤ¯ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Edge Multiple Clicked Listener ( listener : ĠItem Multiple Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Edge Multiple Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ éłħ çĽ® éķ· æĬ ¼ ãģĹ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Item Edge Long Clicked Listener ( listener : ĠItem Long Clicked Listener < Entry > ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Item Edge Long Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª ãģ« åĲ« ãģ¾ ãĤĮãĤĭ ãĤ³ ãĥ¡ãĥ³ãĥĪ ãĤĴ ãĤ¯ãĥªãĥĥãĤ¯ ãģĹãģŁ ãģ¨ ãģį ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Comment Clicked Listener ( listener : Ġ(( Entry , ĠBook mark Result )-> Unit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Comment Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª ãģ« åĲ« ãģ¾ ãĤĮãĤĭ ãĤ³ ãĥ¡ãĥ³ãĥĪ ãĤĴ éķ· æĬ ¼ ãģĹ ãģĹãģŁ ãģ¨ ãģį ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Comment Long Clicked Listener ( listener : Ġ(( Entry , ĠBook mark Result )-> Unit )? ) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Comment Long Clicked Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠãĤ¢ ãĤ¤ ãĥĨ ãĥł è¿½åĬł å®Į äºĨ æĻĤ ãģ® æĮ Ļ åĭķ ãĤĴ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġset On Items Submitted Listener ( listener : ĠListener < List < Entry > ?> ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġon Items Submitted Ġ= Ġlistener ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠFooter : Ġãĥ Ń ãĥ¼ãĥī ä¸Ń ãģ® è¡¨ç¤º çĶ¨ Ġ*/ ĊĠĠĠ Ġval Ġloading Ġ= ĠMutable LiveData < Boolean >() ĊĊĠĠĠ Ġ/** ĠFooter : Ġ è¿½åĬł ãĥŃ ãĥ¼ãĥī ãĥľ ãĤ¿ ãĥ³ ãĤĴ è¡¨ç¤º ãģĻãĤĭ ãģĭ Ġ*/ ĊĠĠĠ Ġval Ġload able Ġ= ĠMutable LiveData < Boolean >( false ) ĊĊĠĠĠ Ġ/** Ġ å¾ © å¸ ° æĻĤ ãģ« å®Łè¡Į ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsidering Multiple Clicked Entry Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclick Lock . unlock () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ViewHolder ( parent : ĠViewGroup , Ġview Type : ĠInt ) Ġ: ĠRecyclerView . ViewHolder Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġinflater Ġ= ĠLayoutInflater . from ( parent . context ) ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( view Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cycler Type . BODY . id Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbinding Ġ= ĠList view Item Entries 2 Binding . inflate ( in flater , Ġparent , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġlifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠViewHolder ( binding ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cycler Type . FO OTER . id Ġ-> ĠLoad able Footer ViewHolder ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFooter RecyclerView Load able Binding . inflate ( in flater , Ġparent , Ġfalse ). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . loading Ġ= Ġloading ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . load able Ġ= Ġload able ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . lifecycle Owner Ġ= Ġlifecycle Owner ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġthrow ĠNotImplementedError () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Bind ViewHolder ( holder : ĠRecyclerView . ViewHolder , Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( holder . item ViewType ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRe cycler Type . BODY . id Ġ-> Ġholder . also As < ViewHolder > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . initialize ( current List [ position ]. body ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠgetItem ViewType ( position : ĠInt ) Ġ= ĊĠĠĠĠĠĠĠ Ġcurrent List [ position ]. type . id ĊĊĠĠĠ Ġ/** Ġ ãĥªãĤ¹ãĥĪ ãĤĴ ãĤ¯ãĥª ãĤ¢ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġclear Entries ( commit Callback : Ġ(() Ġ-> ĠAny ? )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsubmit List ( null ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Callback ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Items Submitted ?. invoke ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠãĤ¨ ãĥ³ãĥĪ ãĥª ãģ¯ ãģĵãģ® ãĥ¡ ãĤ½ãĥĥãĥī ãĤĴä½¿ ãģ£ãģ¦ ãĤ»ãĥĥãĥĪ ãģĻãĤĭ Ġ*/ ĊĠĠĠ Ġfun Ġsubmit Entries ( items : ĠList < Entry > ?, Ġcommit Callback : Ġ( ()-> Any ? )? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġnew List Ġ: ĠList < Recycler State < Entry >> Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( items . isNull OrEmpty ()) Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĠRe cycler State . make States With Footer ( items ) ĊĊĠĠĠĠĠĠĠ Ġsubmit List ( new List ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommit Callback ?. invoke () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Items Submitted ?. invoke ( items Ġ?: Ġempty List ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġfun Ġshow ProgressBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading . value Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġhide ProgressBar () Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading . value Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġprivate Ġclass ĠDiff Callback Ġ: ĠDiff Util . Item Callback < Recycler State < Entry >>() Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Items The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠRe cycler State < Entry >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠRe cycler State < Entry > ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġold Item . type Ġ== Ġnew Item . type Ġ&& Ġold Item . body ?. id Ġ== Ġnew Item . body ?. id Ġ&& Ġold Item . body ?. url Ġ== Ġnew Item . body ?. url ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġare Contents The Same ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġold Item : ĠRe cycler State < Entry >, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Item : ĠRe cycler State < Entry > ĊĠĠĠĠĠĠĠ Ġ) Ġ= Ġold Item . type Ġ== Ġnew Item . type Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . body ?. count Ġ== Ġnew Item . body ?. count Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . body ?. title Ġ== Ġnew Item . body ?. title Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . body ?. imageUrl Ġ== Ġnew Item . body ?. imageUrl Ġ&& ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġold Item . body ?. book marked Data Ġ== Ġnew Item . body ?. book marked Data ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠ Ġprivate Ġvar Ġconsidering Multiple Clicked Entry Ġ: ĠEntry ? Ġ= Ġnull ĊĊĠĠĠ Ġinner Ġclass ĠViewHolder ( ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġbinding : ĠList view Item Entries 2 Binding ĊĠĠĠ Ġ) Ġ: ĠRecyclerView . ViewHolder ( binding . root ) Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġvar Ġclick Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġclick Guard Refresh Delay Ġ= Ġ 8 0 0 L ĊĊĠĠĠĠĠĠĠ Ġvar Ġentry : ĠEntry ? Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . entry Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . comments List . adapter Ġ= ĠComments Adapter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Item Clicked Listener Ġ{ Ġcomment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Lock . try Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentry Ġ?: Ġreturn @ launch When Res umed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Comment Clicked ?. invoke ( entry , Ġcomment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( click Guard Refresh Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġclick Lock . unlock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset On Item Long Clicked Listener Ġ{ Ġcomment Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Lock . try Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= Ġentry Ġ?: Ġreturn @ launch When Res umed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Comment Long Clicked ?. invoke ( entry , Ġcomment ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( click Guard Refresh Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġclick Lock . unlock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Comment Long Clicked Ġ!= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ------ Ġ// ĊĊĠĠĠĠĠĠĠ Ġfun Ġinitialize ( entry : ĠEntry ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . entry Ġ= Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . click Count Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éłħ çĽ® ĠãĤ ¿ ãĥĥãĥĹ / éķ· æĬ ¼ ãģĹ / è¤ĩ æķ° åĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOnClickListener ( click Listener ( entry , Ġon Item Clicked , Ġon Item Multiple Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠitemView . setOn Long ClickListener ( long ClickListener ( entry , Ġon Item Long Clicked )) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åı³ ç«¯ ĠãĤ ¿ ãĥĥãĥĹ / éķ· æĬ ¼ ãģĹ / è¤ĩ æķ° åĽŀ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edge Click Area . setOnClickListener ( click Listener ( entry , Ġon Item Edge Clicked , Ġon Item Edge Multiple Clicked )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . edge Click Area . setOn Long ClickListener ( long ClickListener ( entry , Ġon Item Edge Long Clicked )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġclick Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry : ĠEntry ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Click Action : ĠItem Clicked Listener < Entry > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Click Action : ĠItem Multiple Clicked Listener < Entry >? ĊĠĠĠĠĠĠĠ Ġ) Ġ: Ġ( View )-> Unit Ġ= Ġbody @ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġ== Ġnull ) Ġreturn @ body ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( multiple Click Duration Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Lock . try Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Click Action ?. invoke ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( click Guard Refresh Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġclick Lock . unlock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsider Multiple Click ( entry , Ġsingle Click Action , Ġmultiple Click Action ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġlong ClickListener ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry : ĠEntry ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlong Click Action : ĠItem Long Clicked Listener < Entry >? ĊĠĠĠĠĠĠĠ Ġ) Ġ: Ġ( View )-> Boolean Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġ!= Ġnull ) Ġlong Click Action ?. invoke ( entry ) Ġ?: Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ è¤ĩ æķ° åĽŀ ãĤ¯ãĥªãĥĥãĤ¯ ãĤĴ éĽ ĳ ãģ« æ¤ľ åĩº ãģĻãĤĭ ĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġconsider Multiple Click ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġentry : ĠEntry ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsingle Click Action : ĠItem Clicked Listener < Entry > ?, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmultiple Click Action : ĠItem Multiple Clicked Listener < Entry >? ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( entry Ġ== Ġnull Ġ|| Ġclick Lock . is Locked Ġ|| Ġclick Count ++ Ġ> Ġ 0 ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( consider ing Multiple Clicked Entry Ġ!= Ġnull Ġ&& Ġconsidering Multiple Clicked Entry Ġ!= Ġentry ) Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsidering Multiple Clicked Entry Ġ= Ġentry ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġduration Ġ= Ġmultiple Click Duration ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlifecycle Owner . lifecycle Scope . launch When Res umed Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( duration ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( click Lock . try Lock ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġclick Count ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclick Count Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( count ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 1 Ġ-> Ġsingle Click Action ?. invoke ( entry ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġmultiple Click Action ?. invoke ( entry , Ġcount ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelay ( click Guard Refresh Delay ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinally Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconsidering Multiple Clicked Entry Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Catch ing Ġ{ Ġclick Lock . unlock () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ