package Ġcom . the kor ov ay . my portfolio . module _ search _ history . ui Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . navigation . fragment . find Nav Controller Ċ import Ġcom . google . android . material . transition . Material Shared Axis Ċ import Ġcom . the kor ov ay . my portfolio . My Application Ċ import Ġcom . the kor ov ay . my portfolio . R Ċ import Ġcom . the kor ov ay . my portfolio . databinding . Fragment Search History Binding Ċ import Ġcom . the kor ov ay . my portfolio . domain . entities . Search History State Ċ import Ġcom . the kor ov ay . my portfolio . entities . UI Search Request Ċ import Ġcom . the kor ov ay . my portfolio . module _ search _ history . ui . recycler _ view . History ClickListener Ċ import Ġcom . the kor ov ay . my portfolio . module _ search _ history . ui . recycler _ view . History RecyclerView Adapter Ċ import Ġcom . the kor ov ay . my portfolio . module _ search _ history . view model . Search History ViewModel Ċ import Ġkotlinx . coroutines . flow . collect Ċ import Ġjava . lang . Exception Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠSearch History Fragment : ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠFragment Search History Binding ĊĠĠĠ Ġ@ Inject Ġlateinit Ġvar ĠviewModel : ĠSearch History ViewModel ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach ( context : ĠContext ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ( context . application Context Ġas ĠMy Application ). app Component . inject ( this ) ĊĠĠĠĠĠĠĠ Ġsuper . on Attach ( context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġreturn Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġenter Transition Ġ= ĠMaterial Shared Axis ( Material Shared Axis . Z , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , ĊĠĠĠĠĠĠĠ Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinflater , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . layout . fragment _ search _ history , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontainer , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġhistory Adapter Ġ= ĠHistory RecyclerView Adapter ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHistory ClickListener Ġ{ Ġrequest Ġ-> Ġstart Search Request ( request ) Ġ} ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġbinding . rv Search History . adapter Ġ= Ġhistory Adapter ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . search History . collect Ġ{ Ġhistory Entries Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory Adapter . submit List ( history Entries ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . is History Empty Ġ= Ġhistory Entries . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch When Started Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . state . collect Ġ{ Ġstate Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbinding . isLoading Ġ= Ġstate Ġ== ĠSearch History State . BUSY ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( state Ġ== ĠSearch History State . ERROR ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ErrorMessage ( viewModel . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . set ErrorMessage Displayed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbinding . btn Clear History . setOnClickListener Ġ{ Ġconfirm Clear History () Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġconfirm Clear History () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . clear _ history _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . clear _ history _ dialog _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . dialog _ btn _ clear ) Ġ{ Ġ_, Ġ_ Ġ-> ĠviewModel . clear History () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . dialog _ btn _ cancel ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ/* ĠDo Ġnothing Ġ*/ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow ErrorMessage ( exception : ĠException ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= Ġexception ?. localized Message Ġ?: ĠgetString ( R . string . unknown _ error ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= ĠAlertDialog . Builder ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . error _ dialog _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( R . string . dialog _ btn _ close ) Ġ{ Ġ_, Ġ_ Ġ-> Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĊĠĠĠĠĠĠĠ Ġdialog . show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Search Request ( request : ĠUI Search Request ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfind Nav Controller (). navigate ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSearch History Fragment Directions . action Search History Fragment To Search Params Fragment ( request ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }