package Ġio . github . tak us an 2 3 . tat im id roid . nic ol ive Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . net . to Uri Ċ import Ġandroidx . core . text . Html Compat Ċ import Ġandroidx . core . text . Html Compat . FROM _ HTML _ MODE _ COMP ACT Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . bump tech . glide . load . resource . bitmap . Rounded C orners Ċ import Ġcom . bump tech . glide . request . RequestOptions Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nico api . user . User API Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nic ol ive . bottom fragment . N ico Live Tag Bottom Fragment Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nic ol ive . view model . N ico Live ViewModel Ċ 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 . databinding . Fragment N icol ive Program Info Binding Ċ import Ġio . github . tak us an 2 3 . tat im id roid . nic ol ive . bottom fragment . N ico Live K onom i Tag Edit Bottom Fragment Ċ import Ġkotlinx . coroutines . Dispatch ers Ċ import Ġkotlinx . coroutines . launch Ċ import Ġkotlinx . coroutines . with Context Ċ import Ġokhttp 3 .* Ċ import Ġokhttp 3 . RequestBody . Companion . to RequestBody Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ import Ġjava . text . SimpleDateFormat Ċ Ċ /** Ċ Ġ* Ġ çķª çµĦ æĥħåł± Fragment Ċ Ġ* Ġ*/ Ċ class ĠProgram Info Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġvar Ġuser session Ġ= Ġ"" ĊĠĠĠ Ġlateinit Ġvar Ġpref _ setting : ĠSharedPreferences ĊĊĠĠĠ Ġ// Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãĢģ ãĤ³ ãĥŁ ãĥ¥ ID ĊĠĠĠ Ġvar ĠuserId Ġ= Ġ"" ĊĠĠĠ Ġvar Ġcommunity Id Ġ= Ġ"" ĊĊĠĠĠ Ġ// ĠãĤ ¿ ãĤ° å¤īæĽ´ ãģ« ä½¿ ãģĨ ãĥĪ ãĥ¼ãĤ¯ ãĥ³ ĊĠĠĠ Ġvar Ġtag Token Ġ= Ġ"" ĊĊĠĠĠ Ġ// Ġhtml ãģ® ä¸Ń ãģ« ãģĤãĤĭ JSON ĊĠĠĠ Ġlateinit Ġvar ĠjsonObject : ĠJSONObject ĊĊĠĠĠ Ġ// ĠComment Fragment ãģ¨ ãģĿãĤĮ ãģ® ViewModel ĊĠĠĠ Ġval Ġcomment Fragment Ġby Ġlazy Ġ{ Ġrequire Parent Fragment () Ġas ĠComment Fragment Ġ} ĊĠĠĠ Ġval ĠviewModel Ġby Ġview Models < N ico Live ViewModel >({ Ġcomment Fragment Ġ}) ĊĠĠĠ Ġval Ġlive Id Ġby Ġlazy Ġ{ ĠviewModel . nico Live HTML . live Id Ġ} ĊĊĠĠĠ Ġ/** ĠfindViewById é § Ĩ éĢ Ĳ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġview Binding Ġby Ġlazy Ġ{ ĠFragment N icol ive Program Info Binding . inflate ( layout Inflater ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate View ( in flater , Ġcontainer , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġreturn Ġview Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġpref _ setting Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĠĠĠĠĠĠĠ Ġuser session Ġ= Ġpref _ setting . getString (" user _ session ", Ġ"") Ġ?: Ġ"" ĊĊĠĠĠĠĠĠĠ ĠviewModel . nico Live JSON . observe ( view Lifecycle Owner ) Ġ{ Ġjson Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset UI From JSON ( json ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ¦ãĥ¼ãĤ¶ ãĥ¼ãĥ ķ ãĤ © ãĥŃ ãĥ¼ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Follow Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Follow ( userId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" ãĥ¦ãĥ¼ãĤ¶ãĥ¼ ãĤĴ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¾ãģĹãģŁ ãĢĤ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥŁ ãĥ¥ ãĥĭ ãĥĨãĤ£ ãĥķãĤ© ãĥŃ ãĥ¼ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community Follow Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Community Follow ( community Id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" ãĤ³ ãĥŁ ãĥ¥ ãĥĭ ãĥĨãĤ£ ãĤĴ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĹãģ¾ãģĹãģŁ ãĢĤ \ n $ community Id ", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ å¼ı çķª çµĦ ãģ¯ ãĥ ¦ãĥ¼ãĤ¶ ãĥ¼ãĥ ķ ãĤ © ãĥŃ ãĥ¼ãĥ ľ ãĤ¿ ãĥ³ ãģªãģĦ ï¼Ł ĊĠĠĠĠĠĠĠ Ġif Ġ( comment Fragment . is Official ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Follow Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ° ç· ¨ éĽĨ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag Add Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġn ico Live Tag Bottom Fragment Ġ= ĠN ico Live Tag Bottom Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn ico Live Tag Bottom Fragment . show ( parent FragmentManager , Ġ" bottom _ tag ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠTS äºĪ ç´Ħ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Time shift Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġregister Time Shift Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĪĲåĬŁ ãģĹãģŁ ãĤī TS äºĪ ç´Ħ ãĥªãĤ¹ãĥĪ ãģ¸ é£ Ľ ãģ° ãģĻ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Time shift Button , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . time shift _ reservation _ successful , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). setAction ( R . string . time shift _ list ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( Intent . ACTION _ VIEW , Ġ" https :// live . nic ov ideo . jp / my ". to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Anchor View ( comment Fragment . get Snackbar Anchor View ()). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( it . code Ġ== Ġ 5 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ äºĪ ç´Ħ æ¸ Ī ãģ¿ ãģ® åı¯èĥ½ æĢ§ ãĢĤ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģª ãģĬ æľ¬ å®¶ ãĤĤ å¤ļ åĪĨ ä¸Ģ åº¦ çĻ»éĮ² API ãĤĴ åı © ãģĦãģ¦ 5 0 0 ãĤ¨ãĥ© ãĥ¼ãģ® ãģ¨ ãģį çĻ»éĮ² æ¸ Ī ãģ¿ ãģ£ãģ¦ åĪ¤æĸŃ ãģĻãĤĭ ãģ£ ãģ ½ ãģĦ ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view Binding . fragment Program Info Time shift Button , ĠR . string . time shift _ reserved , ĠSn ackbar . LENGTH _ LONG ). setAction ( R . string . time shift _ delete _ reservation _ button ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdelete Time Shift Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . time shift _ delete _ reservation _ successful , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ LONG ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. set Anchor View ( comment Fragment . get Snackbar Anchor View ()). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¼ķ ãģ£ å¼ µ ãģ£ãģŁ ãĤī ãĤ¿ ãĤ° æĽ´æĸ° ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Swipe . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . getTag List () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ° ä¸Ģ è¦§ çĽ £ è¦ĸ ĊĠĠĠĠĠĠĠ ĠviewModel . nico Live Tag DataList LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¨éĥ¨ æ¶Ī ãģĻ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag LinearLayout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata . tag List . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġit . tagName ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥľ ãĤ¿ ãĥ³ ä½ľæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠMaterial Button ( require Context ()). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġtag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis All Caps Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnic op edia Url Ġ= Ġit . nico P edia Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġnic op edia Url . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag LinearLayout . addView ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° æ©Łèĥ½ ãĢĤ ãģª ãģĬ å¥½ ãģ¿ ãĤ¿ ãĤ° ãģĭãĤī éģ¸ ãĤĵ ãģ§ çķª çµĦ ãģ¸ åħ¥ ãĤĭ ãģ¨ ãģª ãģ ľ ãģĭ ãĥĭ ãĤ³ ãĥĭ åº ĥ åĳĬ ãģ¿ ãģŁ ãģĦ ãģ« éĢļçŁ¥ ãģĮ è¡Į ãģı æ¨¡ æ§ ĺ ãĢĤ ãģĺ ãĤ ĥ ãģĤ ä½¿ ãĤı ãĤĵ ãĤı ĊĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠ ĠviewModel . nico Live K onom i Tag List LiveData . observe ( view Lifecycle Owner ) Ġ{ Ġk onom i Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( k onom i Tag . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æľª è¨Ńå®ļ ãģ§ãģĤãĤĭ ãģĵãģ¨ ãĤĴ æķĻ ãģĪãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info K onom i Tag Empty . isVisible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠJSON ãĥĳ ãĥ¼ãĤ¹ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info K onom i Tag LinearLayout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġk onom i Tag . forEach Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥľ ãĤ¿ ãĥ³ ä½ľæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠMaterial Button ( require Context (), Ġnull ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġdata . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis All Caps Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info K onom i Tag LinearLayout . addView ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġ å¥½ ãģ¿ ãĤ¿ ãĤ° ç· ¨ éĽĨ ãĥľ ãĤ¿ ãĥ³ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info K onom i Tag Edit Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠN ico Live K onom i Tag Edit Bottom Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput String (" broad caster _ user _ id ", ĠviewModel . nico Live UserData LiveData . value ?. userId ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. show ( child FragmentManager , Ġ" edit ") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġn ico Live HTML to JSONObject () ãģ® JSON ãģ® ä¸Ń èº« ãĤĴ UI ãģ« åıį æĺł ãģķ ãģĽ ãĤĭ ĊĠĠĠ Ġfun Ġset UI From JSON ( jsonObject : ĠJSONObject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Added ) Ġreturn ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch ( Dispatch ers . Main ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ æĥħåł± åıĸå¾Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprogram Ġ= ĠjsonObject . getJSONObject (" program ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtitle Ġ= Ġprogram . getString (" title ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġprogram . getString (" description ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbegin Time Ġ= Ġprogram . getLong (" begin Time ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= Ġprogram . getLong (" endTime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ æĶ¾ éĢģ èĢħ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsupplier Ġ= Ġprogram . getJSONObject (" supplier ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġname Ġ= Ġsupplier . getString (" name ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ å¼ı ãģ§ãģ¯ ä½¿ ãĤı ãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supplier . has (" program Provider Id ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġsupplier . getString (" program Provider Id ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ æĥħåł± åıĸå¾Ĺ ãĢĤ ãĥķãĤ© ãĥŃ ãĥ¼ ä¸Ń ãģĭ ãģ© ãģĨ ãģĭ åĪ¤æĸŃ ãģĻãĤĭãģŁãĤģ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠuserData Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Ġ= ĠUser API () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġuser . getUser Data ( userId , Ġuser session ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! response . is Successful ) Ġreturn @ with Context Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser . parse UserData ( response . body ?. string ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ¦ãĥ¼ãĤ¶ ãĥ¼ãĥ ķ ãĤ © ãĥŃ ãĥ¼ ä¸Ń ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userData ?. is Following Ġ== Ġtrue ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Follow Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Follow Button . text Ġ= ĠgetString ( R . string . is _ following ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġlevel Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ å¼ı çķª çµĦ å¯¾ å¿ľ çīĪ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supplier . has (" level ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= Ġsupplier . getInt (" level ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnix Time ãģĭãĤī å¤ī æıĽ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsimple DateFormat Ġ= ĠSimpleDateFormat (" yyyy / MM / dd ĠHH : mm : ss ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĥķãĤ © ãĥ¼ãĥ ŀ ãĥĥãĥĪ æ¸ Ī ãģ¿ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted Begin Time Ġ= Ġsimple DateFormat . format ( begin Time Ġ* Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġformatted EndTime Ġ= Ġsimple DateFormat . format ( endTime Ġ* Ġ 1 0 0 0 ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// UI ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Name TextView . text Ġ= Ġ"${ getString ( R . string . broad caster )} Ġ: Ġ$ name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Level TextView . text Ġ= Ġ"${ getString ( R . string . level )} Ġ: Ġ$ level " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Time TextView . text Ġ= Ġ"${ getString ( R . string . program _ start )} Ġ: Ġ$ formatted Begin Time Ġ/ Ġ${ getString ( R . string . end _ of _ program )} Ġ: Ġ$ formatted EndTime " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Title TextView . text Ġ= Ġtitle ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Description TextView . text Ġ= ĠHtml Compat . from Html ( description , ĠFROM _ HTML _ MODE _ COMP ACT ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ å¼ı çķª çµĦ ãģ«ãģ¯ ãĥ ¦ãĥ¼ãĤ¶ ãĥ¼ãĤ ¢ ãĤ¤ ãĤ³ãĥ³ ãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( supplier . has (" icons ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Icon Ġ= Ġsupplier . getJSONObject (" icons "). getString (" uri 1 5 0 x 1 5 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥ ¦ãĥ¼ãĤ¶ ãĥ¼ãĤ ¢ ãĤ¤ ãĤ³ãĥ³ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Broad caster Image view . image Tint List Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( view Binding . fragment Program Info Broad caster Image view ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( user Icon ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . bitmap Transform ( Rounded C orners ( 1 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( view Binding . fragment Program Info Broad caster Image view ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥŁ ãĥ¥ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommunity Ġ= ĠjsonObject . getJSONObject (" social Group ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommunity Name Ġ= Ġcommunity . getString (" name ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcommunity Thumb Ġ= Ġcommunity . getString (" thumbnail ImageUrl ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcommunity Level Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¬ å¼ı çķª çµĦ ãģ«ãģ¯ level ãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( community . has (" level ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcommunity Level Ġ= Ġcommunity . getInt (" level ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community Name TextView . text Ġ= Ġ"${ getString ( R . string . community _ name )} Ġ: Ġ$ community Name " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community Level TextView . text Ġ= Ġ"${ getString ( R . string . community _ level )} Ġ: Ġ$ community Level " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥŁ ãĥ¥ ãĤ¢ ãĤ¤ ãĤ³ãĥ³ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community ImageView . image Tint List Ġ= Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( view Binding . fragment Program Info Community ImageView ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( community Thumb ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply ( RequestOptions . bitmap Transform ( Rounded C orners ( 1 0 ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( view Binding . fragment Program Info Community ImageView ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ³ ãĥŁ ãĥ¥ ãĥķãĤ© ãĥŃ ãĥ¼ ä¸Ń ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Community Follow Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠjsonObject . getJSONObject (" social Group "). getBoolean (" is Follow ed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Community Follow ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĬ ¼ ãģĽ ãģªãģĦ ãĤĪãģĨãģ« ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community Follow Button . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Community Follow Button . text Ġ= ĠgetString ( R . string . follow ed ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãģŁ ãģ Ĳ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= ĠjsonObject . getJSONObject (" program "). getJSONObject (" tag ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis Tag Not Editable Ġ= Ġtag . getBoolean (" is Locked ") Ġ// ĠãĤ ¿ ãĤ° ç· ¨ éĽĨ ãģĮ åı¯èĥ½ ãģĭ ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtags List Ġ= Ġtag . get JSONArray (" list ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tags List . length () Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag LinearLayout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġtags List . length ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtag Ġ= Ġtags List . getJSONObject ( i ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtext Ġ= Ġtag . getString (" text ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis N ic op edia Ġ= Ġtag . getBoolean (" exists N ic op edia Article ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ãĥľ ãĤ¿ ãĥ³ ä½ľæĪĲ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbutton Ġ= ĠMaterial Button ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . text Ġ= Ġtext ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . is All Caps Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnic op edia Url Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtag . getString (" nic op edia Article Page Url ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbutton . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , Ġnic op edia Url . to Uri ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag LinearLayout . addView ( button ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ° ãģĮ å¤īæĽ´ ãģ§ãģį ãģªãģĦ åł´åĲĪãģ¯ ãĥľ ãĤ¿ ãĥ³ ãĤĴ ãĤ° ãĥ¬ ãĥ¼ãĤ ¢ ãĤ¦ ãĥĪ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Tag Not Editable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Tag Add Button . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= ĠgetString ( R . string . not _ tag _ editable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠãĤ ¿ ãĤ¤ ãĥł ãĤ· ãĥķãĥĪ äºĪ ç´Ħ æ¸ Ī ãģ¿ ãģĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġuser Program Reservation Ġ= ĠjsonObject . getJSONObject (" user Program Reservation ") ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥł ãĤ· ãĥķãĥĪ æ©Łèĥ½ ãģĮ ä½¿ ãģĪ ãģªãģĦ åł´åĲĪ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* ĠJSON ãģ« Ġprogram Time shift Ġãģ¨ Ġprogram Time shift Watch ĠãģĮ åŃĺåľ¨ ãģĹãģªãģĦ åł´åĲĪãģ¯ TS äºĪ ç´Ħ ãģĮ çĦ¡ åĬ¹ ãģ« ãģķãĤĮãģ¦ãģĦãĤĭ ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ åŃĺåľ¨ ãģĻ ãĤĮãģ° TS äºĪ ç´Ħ ãģĮ åĪ©çĶ¨ ãģ§ãģįãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcan TS Reserve Ġ= ĠjsonObject . has (" program Time shift ") Ġ&& ĠjsonObject . has (" program Time shift Watch ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Time shift Button . isEnabled Ġ= Ġcan TS Reserve ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! can TS Reserve ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Program Info Time shift Button . text Ġ= ĠgetString ( R . string . disabled _ ts _ reservation ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Toast ( message : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġactivity ?. run On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġmessage , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ãĤĴ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĻãĤĭ éĸ¢æķ° ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param ĠuserId Ġãĥ ¦ãĥ¼ãĤ¶ãĥ¼ ID ĊĠĠĠĠ Ġ* Ġ@ param Ġresponse Ġ æĪĲåĬŁ æĻĤ åĳ¼ ãģ° ãĤĮ ãģ¾ãģĻ ãĢĤ UI ãĤ¹ ãĥ¬ ãĥĥãĥī ãģ§ãģ¯ ãģªãģĦ ãĢĤ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġrequest Follow ( userId : ĠString , Ġresponse : Ġ( Response ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl (" https :// public . api . nic ov ideo . jp / v 1 / user / follow ees / n icon ico - users /${ userId }. json ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" User - Agent ", Ġ" T at imi Droid ; @ tak us an _ 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Cookie ", Ġ" user _ session =$ user session ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĵãĤĮ ãģĮ ãģªãģĦ ãģ¨ Ġ 2 0 0 ĠãģĮ å¸ ° ãģ£ãģ¦ ãģĵ ãģªãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" X - Request - With ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" https :// live 2 . nic ov ideo . jp / watch /$ live Id ? _ topic = live _ user _ program _ on airs " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ("{} ". to RequestBody ()) Ġ// Ġ éĢģ ãĤĭ åĨħå®¹ ãģ¯ ï½ Ľ ï½ Ŀ ãģ¦ãģĦ ãģĦ ãĤī ãģĹãģĦ ãĢĤ ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġok HttpClient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstatus Ġ= ĠJSONObject ( response . body ?. string ()). getJSONObject (" meta "). getInt (" status ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( status Ġ== Ġ 2 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ é«ĺ éļ İ éĸ¢æķ° ãĤĴ ãĤĪ ãģ ¶ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ³ ãĥŁ ãĥ¥ ãĥĭ ãĥĨãĤ£ ãĤĴ ãĥķãĤ© ãĥŃ ãĥ¼ ãģĻãĤĭ éĸ¢æķ° ãĢĤ ĊĠĠĠĠ Ġ* Ġ@ param Ġcommunity Id ĠãĤ³ ãĥŁ ãĥ¥ ãĥĭ ãĥĨãĤ£ ãĥ¼ ID Ġco ãģĭãĤī ĊĠĠĠĠ Ġ* Ġ@ param Ġresponse Ġ æĪĲåĬŁ ãģĹãģŁ ãĤī åĳ¼ ãģ° ãĤĮ ãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġrequest Community Follow ( community Id : ĠString , Ġresponse : Ġ( Response ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠformData Ġ= ĠForm Body . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" mode ", Ġ" commit ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" title ", Ġ" ãĥķãĤ© ãĥŃ ãĥ¼ãĥ ª ãĤ¯ ãĤ¨ ãĤ¹ãĥĪ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" comment ", Ġ"") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" notify ", Ġ"") ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl (" https :// com . nic ov ideo . jp / motion /${ community Id }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" User - Agent ", Ġ" T at imi Droid ; @ tak us an _ 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Cookie ", Ġ" user _ session =$ user session ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Content - Type ", Ġ" application / x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRefer er Ġ ãģĵãĤĮ ãģªãģĦ ãģ¨ 2 0 0 ãģĮ å¸ ° ãģ£ãģ¦ ãģı ãĤĭ ãĢĤ ï¼Ī ãģ » ãģĹãģĦ ãģ® ãģ¯ 3 0 2 ĠFound ï¼ī ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Refer er ", Ġ" https :// com . nic ov ideo . jp / motion /$ community Id ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( formData ) Ġ// Ġ ãģĵãĤĮ éĢģ ãģ£ãģ¦ ä½ķ ãģ« ãģĻãĤĭ ãģ® ï¼Ł ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġok HttpClient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 3 0 2 ĠFound ãģ® ãģ¨ ãģį æĪĲåĬŁ ï¼Ł ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥł ãĤ· ãĥķãĥĪ çĻ»éĮ² ãģĻãĤĭ ãĢĤ Ġoverwrite ãģ£ãģ¦ ãģª ãĤĵ ãģł ï¼Ł ĊĠĠĠĠ Ġ* Ġ@ param Ġãĥ ¬ ãĤ¹ ãĥĿ ãĥ³ãĤ¹ ãģĮ å¸ ° ãģ£ãģ¦ ãģı ãĤĮãģ° ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġregister Time Shift ( successful : Ġ( Response ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpost FormData Ġ= ĠForm Body . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ID ãģĭãĤī lv ãĤĴ æĬ ľ ãģĦ ãģŁ åĢ¤ ãĤĴæĮĩå®ļ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" vid ", Ġlive Id . replace (" lv ", Ġ"")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadd (" overwrite ", Ġ" 0 ") ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl (" https :// live . nic ov ideo . jp / api / time shift . re servations ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" User - Agent ", Ġ" T at imi Droid ; @ tak us an _ 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Cookie ", Ġ" user _ session =$ user session ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Content - Type ", Ġ" application / x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Origin ", Ġ" https :// live 2 . nic ov ideo . jp ") Ġ// Ġ ãģĵãĤĮ ãģĮ å¿ħ éł Ī ãģ® æ¨¡ æ§ ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost ( post FormData ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġok HttpClient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠãĤ ¿ ãĤ¤ ãĥł ãĤ· ãĥķãĥĪ ãĤĴ åīĬéĻ¤ ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġsuccessful Ġ æĪĲåĬŁ ãģĹãģŁ ãĤī åĳ¼ ãģ° ãĤĮ ãģ¾ãģĻ ãĢĤ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġfun Ġdelete Time Shift ( successful : Ġ( Response ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġrequest Ġ= ĠRequest . Builder (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ çķª çµĦ ID ãģĭãĤī lv ãĤĴ æĬ ľ ãģĦ ãģŁ åĢ¤ ãĤĴæĮĩå®ļ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġurl (" https :// live . nic ov ideo . jp / api / time shift . re servations ? vid =${ live Id . replace (" lv ", Ġ"") }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" User - Agent ", Ġ" T at imi Droid ; @ tak us an _ 2 3 ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Cookie ", Ġ" user _ session =$ user session ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Content - Type ", Ġ" application / x - www - form - urlencoded ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġheader (" Origin ", Ġ" https :// live 2 . nic ov ideo . jp ") Ġ// Ġ ãģĵãĤĮ ãģĮ å¿ħ éł Ī ãģ® æ¨¡ æ§ ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdelete () ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĠĠĠĠĠĠĠ Ġval Ġok HttpClient Ġ= ĠOk HttpClient () ĊĠĠĠĠĠĠĠ Ġok HttpClient . new Call ( request ). enqueue ( object Ġ: ĠCallback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( call : ĠCall , Ġe : ĠIOException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ( getString ( R . string . error )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Response ( call : ĠCall , Ġresponse : ĠResponse ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( response . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsuccessful ( response ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Toast ("${ getString ( R . string . error )}\ n ${ response . code }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} Ċ }