package Ġio . github . tak us an 2 3 . tat im id roid . nic ol ive . view model Ċ Ċ import Ġandroid . app . Application Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . lifecycle . Android ViewModel Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġio . github . tak us an 2 3 . tat im id roid . R Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nico api . nic ol ive . N ico Live K onom i Tag API Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nico api . nic ol ive . dataclass . N ico Live K onom i Tag Data Ċ import Ġkotlinx . coroutines . Coroutine ExceptionHandler Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ Ċ /** Ċ Ġ* Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ ç· ¨ éĽĨ ãģĻãĤĭ Bottom Fragment ãģ§ ä½¿ ãģĨ ViewModel Ċ Ġ* Ċ Ġ* Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãģĭãĤī çķª çµĦ ãĤĴ æİ¢ ãģĻ Fragment ( ViewModel ) ãģĮ ãģ¾ãģŁ ä¼¼ ãģŁ åĲįåīį ãģ§ãģĤãĤĭ ãģ®ãģ§ æ³¨æĦı Ċ Ġ* Ċ Ġ* Ġ@ param Ġbroad C aster UserId Ġ æĶ¾ éĢģ èĢħ ãģ® ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ID ãĢĤ null ãģ® åł´åĲĪãģ¯ æĶ¾ éĢģ èĢħ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ä¸Ń ãģ® ãĤ¿ ãĤ° ãģ¯ åıĸå¾Ĺ ãģĹãģ¾ ãģĽãĤĵ Ċ Ġ* Ġ*/ Ċ class ĠN ico Live K onom i Tag Edit ViewModel ( application : ĠApplication , Ġprivate Ġval Ġbroad C aster UserId : ĠString ? Ġ= Ġnull ) Ġ: ĠAndroid ViewModel ( application ) Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġcontext Ġ= Ġapplication . application Context ĊĊĠĠĠ Ġprivate Ġval Ġpref Setting Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠ Ġprivate Ġval Ġuser Session Ġ= Ġpref Setting . getString (" user _ session ", Ġ"") Ġ?: Ġ"" ĊĊĠĠĠ Ġ/** ĠAPI ãģ¾ ãģ¨ ãĤģ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġk onom i Tag API Ġ= ĠN ico Live K onom i Tag API () ĊĊĠĠĠ Ġ/** Ġ ãģĬ ãģĻ ãģĻ ãĤģ ãģ® å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ éĢģ ä¿¡ ãģĻãĤĭ LiveData Ġ*/ ĊĠĠĠ Ġval Ġrecommend K onom i Tag LiveData Ġ= ĠMutable LiveData < List < N ico Live K onom i Tag Data >>() ĊĊĠĠĠ Ġ/** Ġ èĩª åĪĨ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¦ãģĦãĤĭ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ éĢģ ä¿¡ ãģĻãĤĭ LiveData Ġ*/ ĊĠĠĠ Ġval Ġmy Following K onom i Tag LiveData Ġ= ĠMutable LiveData < List < N ico Live K onom i Tag Data >>() ĊĊĠĠĠ Ġ/** Ġ æĶ¾ éĢģ èĢħ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¦ãģĦãĤĭ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ è¿Ķ ãģĻ LiveData Ġ*/ ĊĠĠĠ Ġval Ġbroad C aster Following K onom i Tag LiveData Ġ= ĠMutable LiveData < List < N ico Live K onom i Tag Data >>() ĊĊĠĠĠ Ġ/** Ġ[ getB road C ater Following K onom i Tag ] ãģĮ åĪ©çĶ¨ åı¯èĥ½ ãģĭ ãģ© ãģĨ ãģĭ Ġ*/ ĊĠĠĠ Ġval Ġhas Broad C aster UserId Ġ= Ġbroad C aster UserId Ġ!= Ġnull ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** Ġ ãģ¾ ãģ¨ ãĤģ ãģ¦ API ãĤĴ åı © ãģı éĸ¢æķ° Ġ*/ ĊĠĠĠ Ġfun Ġinit () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġ æĶ¾ éĢģ èĢħ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¦ ãĤĭ ãĤ¿ ãĤ° ĊĠĠĠĠĠĠĠ Ġif Ġ( has Broad C aster UserId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Broad C ater Following K onom i Tag () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġãģ¨ ãĤĬ ãģĤ ãģĪ ãģļ ãģĬ ãģĻ ãģĻ ãĤģ ãģ® æĸ¹ ãĤĤ åı © ãģĦãģ¦ ãģĬ ãģı ĊĠĠĠĠĠĠĠ Ġget Recommend K onom i Tag () ĊĠĠĠĠĠĠĠ Ġ// Ġ æľĢ å¾Į ãģ« èĩª åĪĨ ãģ® ãĤĤ ĊĠĠĠĠĠĠĠ Ġget My Following K onom i Tag () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ èĩª åĪĨ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¦ãģĦãĤĭ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget My Following K onom i Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġcoroutine Context , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ throwable }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( error Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk onom i Tag API . search Program From K onom i Tag ( user Session , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķ Ĺ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmy Following K onom i Tag LiveData . post Value ( k onom i Tag API . parse My Following Tag List ( response . body ?. string ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãģĤ ãģª ãģŁ ãģ¸ ãģĬ ãģĻ ãģĻ ãĤģ ãģ® å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ è¡¨ç¤º ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġget Recommend K onom i Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġcoroutine Context , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ throwable }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( error Handler Ġ+ ĠDispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk onom i Tag API . get Recommend K onom i Tag ( user Session ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķ Ĺ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrecommend K onom i Tag LiveData . post Value ( k onom i Tag API . parse K onom i Tag ( response . body ?. string ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ æĶ¾ éĢģ èĢħ ãģĮ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¦ãģĦãĤĭ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ è¡¨ç¤º ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġget Broad C ater Following K onom i Tag () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( broad C aster UserId Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġcoroutine Context , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ throwable }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( error Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk onom i Tag API . get Following Tag ( user Session , Ġbroad C aster UserId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķ Ĺ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ launch ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroad C aster Following K onom i Tag LiveData . post Value ( k onom i Tag API . parse K onom i Tag ( response . body ?. string ())) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãĤĴ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĻãĤĭ ãĢĤ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģŁ ãĤī åĨį åº¦ LiveData ãģ« çµĲæŀľ ãģĮ åħ¥ ãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġk onom i Tag Id Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãģ® Id ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġfollow K onom i Tag ( k onom i Tag Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġcoroutine Context , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ throwable }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( error Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk onom i Tag API . post Follow Tag ( user Session , Ġk onom i Tag Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĲåĬŁ ãģĹãģŁ ãĤī ãĥķãĤ© ãĥŃ ãĥ¼ çĬ¶æħĭ åıį è» ¢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĿ¢ åĢĴ ãģł ãģĹ API åı © ãģį çĽ´ ãģĻ ãģĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . nic ol ive _ k onom it ag _ follow _ ok )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķ Ĺ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãģ® ãĥķãĤ© ãĥŃ ãĥ¼ãĤĴ å¤ĸ ãģĻ ãĢĤ ãĥķãĤ© ãĥŃ ãĥ¼ è§£ éĻ¤ ãģĹãģŁ ãĤī åĨį åº¦ LiveData ãģ« çµĲæŀľ ãģĮ åħ¥ ãĤĭ ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġk onom i Tag Id Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ãģ® Id ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġremove Follow K onom i Tag ( k onom i Tag Id : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠerrorHandler Ġ= ĠCor outine ExceptionHandler Ġ{ Ġcoroutine Context , Ġthrowable Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ¨ ãĥ© ãĥ¼ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ throwable }") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel Scope . launch ( error Handler ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġk onom i Tag API . post Remove Follow Tag ( user Session , Ġk onom i Tag Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĲåĬŁ ãģĹãģŁ ãĤī ãĥķãĤ© ãĥŃ ãĥ¼ çĬ¶æħĭ åıį è» ¢ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éĿ¢ åĢĴ ãģł ãģĹ API åı © ãģį çĽ´ ãģĻ ãģĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . nic ol ive _ k onom it ag _ remove _ follow _ ok )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ å¤± æķ Ĺ æĻĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠToast è¡¨ç¤º éĸ¢æķ° Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Toast ( message : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĠContext . getString ãĤĴ çŁŃ ãģı Ġ*/ ĊĠĠĠ Ġprivate Ġfun ĠgetString ( resourceId : ĠInt ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġcontext . getString ( resourceId ) ĊĠĠĠ Ġ} Ċ Ċ }