package Ġch . r my . android . http _ shortcuts . activities . icons Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . net . Uri Ċ import Ġandroidx . core . net . to File Ċ import Ġch . r my . android . framework . extensions . attach To Ċ import Ġch . r my . android . framework . extensions . context Ċ import Ġch . r my . android . framework . utils . localization . String Res Local izable Ċ import Ġch . r my . android . framework . view model . Base ViewModel Ċ import Ġch . r my . android . framework . view model . With Dialog Ċ import Ġch . r my . android . framework . view model . view state . Dialog State Ċ import Ġch . r my . android . http _ shortcuts . R Ċ import Ġch . r my . android . http _ shortcuts . activities . icons . use cases . Get Bulk Deletion Dialog UseCase Ċ import Ġch . r my . android . http _ shortcuts . activities . icons . use cases . Get Deletion Dialog UseCase Ċ import Ġch . r my . android . http _ shortcuts . activities . icons . use cases . Get Icon List Items UseCase Ċ import Ġch . r my . android . http _ shortcuts . d agger . getApplication Component Ċ import Ġch . r my . android . http _ shortcuts . data . domains . app . App Repository Ċ import Ġch . r my . android . http _ shortcuts . data . domains . shortcuts . Temporary Shortcut Repository Ċ import Ġch . r my . android . http _ shortcuts . icons . Shortcut Icon Ċ import Ġch . r my . android . http _ shortcuts . utils . Icon Util Ċ import Ġio . reactivex . Comp letable Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġjava . io . File Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠIcon Picker ViewModel ( application : ĠApplication ) Ġ: ĠBase ViewModel < Unit , ĠIcon Picker ViewState >( application ), ĠWith Dialog Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġapp Repository : ĠApp Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġtemporary Shortcut Repository : ĠTemporary Shortcut Repository ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Icon List Items : ĠGet Icon List Items UseCase ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Deletion Dialog : ĠGet Deletion Dialog UseCase ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġget Bulk Deletion Dialog : ĠGet Bulk Deletion Dialog UseCase ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġget Application Component (). inject ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġicons : ĠList < Icon Picker ListItem > ĊĊĠĠĠ Ġoverride Ġvar Ġdialog State : ĠDialog State ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġcurrent ViewState ?. dialog State ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( dialog State Ġ= Ġvalue ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Initialization Started ( data : ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġget Icon List Items () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġicons Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . icons Ġ= Ġicons ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinalize Initialization () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandle Unexpected Error ( error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach To ( destroy er ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit ViewState () Ġ= ĠIcon Picker ViewState ( ĊĠĠĠĠĠĠĠ Ġicons Ġ= Ġicons , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun Ġon Initialized () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo With ViewState Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( view State . icons . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Image Picker () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Icon Clicked ( icon : ĠShort cut Icon . Custom Icon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġselect Icon ( icon ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġselect Icon ( icon : ĠShort cut Icon . Custom Icon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish With Ok Result ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIcon Picker Activity . Pick Icon . create Result ( icon ), ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Add IconButton Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Image Picker () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Image Picker () Ġ{ ĊĠĠĠĠĠĠĠ Ġemit Event ( Icon Picker Event . Show Image Picker ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Icon Creation Failed () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Snackbar ( R . string . error _ set _ image , Ġlong Ġ= Ġtrue ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Image Selected ( image : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġemit Event ( Icon Picker Event . Show Image Crop per ( image )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Icon Created ( icon Uri : ĠUri ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo With ViewState Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Name Ġ= ĠIcon Util . generate Custom Icon Name () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Uri . to File (). rename To ( File ( context . files Dir , Ġicon Name )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicon Ġ= ĠShort cut Icon . Custom Icon ( icon Name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis First Icon Ġ= Ġview State . icons . isEmpty () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicons Ġ= Ġicons . plus ( Icon Picker ListItem ( icon , Ġis Unused Ġ= Ġtrue )), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is First Icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġselect Icon ( icon ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Image Picker Failed () Ġ{ ĊĠĠĠĠĠĠĠ Ġshow Snackbar ( R . string . error _ not _ supported ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Icon Long Clicked ( icon : ĠShort cut Icon . Custom Icon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġdo With ViewState Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Unused Ġ= Ġview State . icons . find Ġ{ Ġit . icon Ġ== Ġicon Ġ} ?. is Unused Ġ?: Ġreturn @ do With ViewState ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmessage Ġ= ĠString Res Local izable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Unused ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . confirm _ delete _ custom _ icon _ message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . confirm _ delete _ custom _ icon _ still _ in _ use _ message ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( dialog State Ġ= Ġget Deletion Dialog ( icon , Ġmessage , Ġ:: on Deletion Confirmed )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Deletion Confirmed ( icon : ĠShort cut Icon . Custom Icon ) Ġ{ ĊĠĠĠĠĠĠĠ Ġicon . getFile ( context )?. delete () ĊĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicons Ġ= Ġicons . filter Ġ{ Ġit . icon Ġ!= Ġicon Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun ĠonDelete Button Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( dialog State Ġ= Ġget Bulk Deletion Dialog (:: on Bulk Deletion Confirmed )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Bulk Deletion Confirmed () Ġ{ ĊĠĠĠĠĠĠĠ Ġdo With ViewState Ġ{ Ġview State Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġicons Ġ= Ġview State . icons . filter Ġ{ Ġit . is Unused Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠComp letable . from Action Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicons . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . icon . getFile ( context )?. delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. attach To ( destroy er ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġupdate ViewState Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcopy ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicons Ġ= Ġthis . icons . filter Not Ġ{ Ġit . is Unused Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ