package Ġcom . k us amar u . st android . nic ov ideo . fragment Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . appcompat . widget . PopupMenu Ċ import Ġandroidx . core . content . edit Ċ import Ġandroidx . core . view . children Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . view Models Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . google . android . material . chip . Chip Ċ import Ġcom . k us amar u . st android . nico api . nic ov ideo . dataclass . N ico Video Data Ċ import Ġcom . k us amar u . st android . nico api . nic ov ideo . N ico Video Ranking HTML Ċ import Ġcom . k us amar u . st android . nic ov ideo . adapter . N ico Video ListAdapter Ċ import Ġcom . k us amar u . st android . nic ov ideo . view model . N ico Video Ranking ViewModel Ċ import Ġcom . k us amar u . st android . R Ċ import Ġcom . k us amar u . st android . databinding . Fragment Dev N ic ov ideo Ranking Binding Ċ import Ġkotlinx . coroutines . Job Ċ Ċ /** Ċ Ġ* Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° Fragment Ċ Ġ* Ġ*/ Ċ class ĠN ico Video Ranking Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġn ico Video ListAdapter : ĠN ico Video ListAdapter ĊĠĠĠ Ġval Ġre cyclerView List Ġ= Ġarray ListOf < N ico Video Data >() ĊĠĠĠ Ġlateinit Ġvar Ġpref Setting : ĠSharedPreferences ĊĊĠĠĠ Ġlateinit Ġvar Ġlaunch : ĠJob ĊĊĠĠĠ Ġ// Ġãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ éģ¸ ãĤĵ ãģł ä½įç½® ĊĠĠĠ Ġvar Ġranking Genre Pos Ġ= Ġ 0 ĊĠĠĠ Ġvar Ġranking Time Pos Ġ= Ġ 0 ĊĊĠĠĠ Ġ/** Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° ãģ® ãĤ¸ ãĥ£ ãĥ³ ãĥ« ä¸Ģ è¦§ ãĢĤ [ N ico Video Ranking HTML . N ICO VIDEO _ RAN K ING _ GEN RE ] Ġãģ® URL ä¸Ģ è¦§ ãģ¨ ä¸Ģèĩ´ ãģĹãģ¦ãģĦãĤĭ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠR ANK ING _ GEN RE Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠ Ġ" åħ¨ ãĤ¸ ãĥ£ ãĥ³ ãĥ« ", ĊĠĠĠĠĠĠĠ Ġ" è© ± é¡Į ", ĊĠĠĠĠĠĠĠ Ġ" ãĤ¨ ãĥ³ ãĤ¿ ãĥ¼ãĥ Ĩ ãĤ¤ãĥ³ ãĥ¡ãĥ³ãĥĪ ", ĊĠĠĠĠĠĠĠ Ġ" ãĥ© ãĤ¸ ãĤª ", ĊĠĠĠĠĠĠĠ Ġ" éŁ³ æ¥ ½ ãĥ» ãĤµ ãĤ¦ ãĥ³ãĥī ", ĊĠĠĠĠĠĠĠ Ġ" ãĥĢ ãĥ³ãĤ¹ ", ĊĠĠĠĠĠĠĠ Ġ" åĭķ çī© ", ĊĠĠĠĠĠĠĠ Ġ" èĩª çĦ¶ ", ĊĠĠĠĠĠĠĠ Ġ" æĸĻ çĲĨ ", ĊĠĠĠĠĠĠĠ Ġ" æĹ ħ è¡Į ãĥ» ãĤ¢ ãĤ¦ ãĥĪ ãĥī ãĤ¢ ", ĊĠĠĠĠĠĠĠ Ġ" ä¹ Ĺ ãĤĬ çī© ", ĊĠĠĠĠĠĠĠ Ġ" ãĤ¹ ãĥĿ ãĥ¼ãĥ Ħ ", ĊĠĠĠĠĠĠĠ Ġ" ç¤¾ä¼ļ ãĥ» æĶ¿æ²» ãĥ» æĻĤ äºĭ ", ĊĠĠĠĠĠĠĠ Ġ" æĬĢ è¡ ĵ ãĥ» å·¥ä½ľ ", ĊĠĠĠĠĠĠĠ Ġ" è§£ èª¬ ãĥ» è ¬ Ľ åº§ ", ĊĠĠĠĠĠĠĠ Ġ" ãĤ¢ ãĥĭ ãĥ¡ ", ĊĠĠĠĠĠĠĠ Ġ" ãĤ ² ãĥ¼ãĥł ", ĊĠĠĠĠĠĠĠ Ġ" ãģĿãģ® ä»ĸ " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ/** Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° ãģ® éĽĨ è¨Ī æĻĤéĸĵ ãĢĤ åŁºæľ¬ ãģĦ ãģĺ ãĤī ãģªãģĦ ãĢĤ [ N ico Video Ranking HTML . N ICO VIDEO _ RAN K ING _ TIME ] Ġãģ® éħį åĪĹ ãģ® ä¸Ń èº« ãģ¨ ä¸Ģèĩ´ ãģĹãģ¦ãģĦãĤĭ ãĢĤ Ġ*/ ĊĠĠĠ Ġprivate Ġval ĠR ANK ING _ TIME Ġ= Ġarray ListOf ( ĊĠĠĠĠĠĠĠ Ġ" æ¯ İ æĻĤ ", ĊĠĠĠĠĠĠĠ Ġ" ï¼ Ĵ ï¼ Ķ æĻĤéĸĵ ", ĊĠĠĠĠĠĠĠ Ġ" éĢ ± éĸĵ ", ĊĠĠĠĠĠĠĠ Ġ" æľĪ éĸĵ ", ĊĠĠĠĠĠĠĠ Ġ" åħ¨ æľŁ éĸĵ " ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġ// ĠViewModel ĊĠĠĠ Ġprivate Ġval ĠviewModel Ġby Ġview Models < N ico Video Ranking ViewModel >() ĊĊĠĠĠ Ġ/** ĠfindViewById é § Ĩ éĢ Ĳ Ġ*/ ĊĠĠĠ Ġprivate Ġval Ġview Binding Ġby Ġlazy Ġ{ ĠFragment Dev N ic ov ideo Ranking Binding . inflate ( layout Inflater ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġview Binding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġpref Setting Ġ= ĠPreference Manager . getDefault SharedPreferences ( context ) ĊĊĠĠĠĠĠĠĠ Ġ// Ġãĥ ī ãĥŃ ãĥĥãĥĹ ãĥĢ ãĤ¦ ãĥ³ ãĥ¡ ãĥĭ ãĥ¥ ãĥ¼ åĪĿ æľŁ åĮĸ ĊĠĠĠĠĠĠĠ Ġinit DropDown Menu () ĊĊĠĠĠĠĠĠĠ Ġ// ĠRecyclerView åĪĿ æľŁ åĮĸ ĊĠĠĠĠĠĠĠ Ġinit RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġ// ĠViewModel çĽ £ è¦ĸ ĊĠĠĠĠĠĠĠ ĠviewModel . ranking Video List . observe ( view Lifecycle Owner ) Ġ{ Ġvideo List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åĭķ çĶ» ä¸Ģ è¦§ æĽ´æĸ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment Video Ranking Swipe . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView List . clear () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo List . forEach Ġ{ Ġvideo Ġ-> Ġre cyclerView List . add ( video ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠviewModel . ranking Tag List . observe ( view Lifecycle Owner ) Ġ{ Ġtag List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Tag LinearLayout . removeAll Views () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° ãģ® ãĤ¿ ãĤ° ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtag List . forEach Ġ{ Ġgenre Tag Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchip Ġ= Ġ( layout Inflater . inflate ( R . layout . include _ chip , Ġview Binding . fragment N ic ov ideo Ranking Tag LinearLayout , Ġfalse ) Ġas ĠCh ip ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġgenre Tag ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠæĬ ¼ ãģĹãģŁ ãĤī èªŃãģ¿ è¾¼ ãģ¿ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åħ¨ ãģ¦ ãģ® ãģ¨ ãģį ãģ¯ null ãĤĴæĮĩå®ļ ãģĻãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( genre Tag Ġ== Ġ" ãģĻãģ¹ãģ¦ ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking ( genre Tag ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Tag LinearLayout . addView ( chip ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( savedInstanceState Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ ãģĹ ãĤĩ ãģĭ ãģĦ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ åīį åĽŀ éĸĭ ãģĦãģ¦ ãģŁ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° ãĤĴ éĸĭ ãģı ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Open Genre Ġ= Ġpref Setting . getString (" nic ov ideo _ ranking _ genre ", ĠR ANK ING _ GEN RE [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlast Open Time Ġ= Ġpref Setting . getString (" nic ov ideo _ ranking _ time ", ĠR ANK ING _ TIME [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ éħį åĪĹ ãģ® ä½įç½® ãĤĴ æİ¢ ãģĻ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranking Genre Pos Ġ= ĠR ANK ING _ GEN RE . indexOf ( last Open Genre ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranking Time Pos Ġ= ĠR ANK ING _ TIME . indexOf ( last Open Time ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCh ip ãģ« åħ¥ ãĤĮãĤĭ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Genre TextView . text Ġ= Ġlast Open Genre ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Time TextView . text Ġ= Ġlast Open Time ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥĩãĥ¼ãĤ¿ åıĸå¾Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSw ipe ĠTo ĠRefresh ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Video Ranking Swipe . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° ãĤĴåıĸå¾Ĺ ãģĻãĤĭ ĊĠĠĠĠ Ġ* Ġ@ param Ġtag Ġ éŁ³ æ¥ ½ ãĤ¸ ãĥ£ ãĥ³ ãĥ« ãģª ãĤī VO CAL OID ãģªãģ© ãĢĤ çĦ¡ ãģı ãģ¦ ãĤĤ èī¯ ãģĦ ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Ranking ( tag : ĠString ? Ġ= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġæ ¶ Ī ãģĻ ĊĠĠĠĠĠĠĠ Ġre cyclerView List . clear () ĊĠĠĠĠĠĠĠ Ġn ico Video ListAdapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Tag LinearLayout . removeAll Views () ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Video Ranking Swipe . is Refresh ing Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ// Ġæ ¬ ¡ è¡¨ç¤º ãģĻãĤĭãģ¨ ãģį ãģ® ãģŁãĤģ ãģ« ä»Ĭ éģ¸ ãĤĵ ãģ§ ãģĦ ãĤĭ ãĤ¸ ãĥ£ ãĥ³ ãĥ« ãĥ» éĽĨ è¨Ī æĻĤéĸĵ ãĤĴ è¨ĺ éĮ² ãģĹãģ¦ ãģĬ ãģı ĊĠĠĠĠĠĠĠ Ġpref Setting . edit Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String (" nic ov ideo _ ranking _ genre ", Ġview Binding . fragment N ic ov ideo Ranking Genre TextView . text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput String (" nic ov ideo _ ranking _ time ", Ġview Binding . fragment N ic ov ideo Ranking Time TextView . text . toString ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¸ ãĥ£ ãĥ³ ãĥ« ĊĠĠĠĠĠĠĠ Ġval Ġgenre Ġ= ĠN ico Video Ranking HTML . N ICO VIDEO _ RAN K ING _ GEN RE [ ranking Genre Pos ] ĊĠĠĠĠĠĠĠ Ġ// Ġ éĽĨ è¨Ī æľŁ éĸĵ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠN ico Video Ranking HTML . N ICO VIDEO _ RAN K ING _ TIME [ ranking Time Pos ] ĊĠĠĠĠĠĠĠ Ġ// Ġ ãĥ© ãĥ³ ãĤŃ ãĥ³ãĤ° æĽ´æĸ° ĊĠĠĠĠĠĠĠ ĠviewModel . load Ranking ( genre , Ġtime , Ġtag ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit DropDown Menu () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠãĤ ¸ ãĥ£ ãĥ³ ãĥ« éģ¸æĬŀ ĊĠĠĠĠĠĠĠ Ġval Ġgenre PopupMenu Ġ= ĠPopup Menu ( require Context (), Ġview Binding . fragment N ic ov ideo Ranking Genre TextView ) ĊĠĠĠĠĠĠĠ ĠR ANK ING _ GEN RE . forEach Ġ{ Ġgenre Ġ-> Ġgenre PopupMenu . menu . add ( genre ) Ġ} ĊĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Genre TextView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġgenre PopupMenu . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ ãĤ¯ãĥªãĥĥãĤ¯ ãĤ¤ ãĥĻ ãĥ³ãĥĪ ĊĠĠĠĠĠĠĠ Ġgenre PopupMenu . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Genre TextView . text Ġ= Ġitem . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranking Genre Pos Ġ= ĠR ANK ING _ GEN RE . indexOf ( item . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥĩãĥ¼ãĤ¿ åĨį åıĸå¾Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// Ġ éĽĨ è¨Ī æĻĤéĸĵ éģ¸æĬŀ ĊĠĠĠĠĠĠĠ Ġval Ġtime PopupMenu Ġ= ĠPopup Menu ( require Context (), Ġview Binding . fragment N ic ov ideo Ranking Time TextView ) ĊĠĠĠĠĠĠĠ ĠR ANK ING _ TIME . forEach Ġ{ Ġtime Ġ-> Ġtime PopupMenu . menu . add ( time ) Ġ} ĊĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Time TextView . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtime PopupMenu . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġtime PopupMenu . setOn MenuItem ClickListener Ġ{ Ġitem Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview Binding . fragment N ic ov ideo Ranking Time TextView . text Ġ= Ġitem . title ĊĠĠĠĠĠĠĠĠĠĠĠ Ġranking Time Pos Ġ= ĠR ANK ING _ TIME . indexOf ( item . title ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġãĥĩãĥ¼ãĤ¿ åĨį åıĸå¾Ĺ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Ranking () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRecyclerView åĪĿ æľŁ åĮĸ ĊĠĠĠ Ġprivate Ġfun Ġinit RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġview Binding . fragment Video Ranking RecyclerView . apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Has Fixed Size ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Manager Ġ= ĠLinearLayoutManager ( context ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġn ico Video ListAdapter Ġ= ĠN ico Video ListAdapter ( re cyclerView List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġadapter Ġ= Ġn ico Video ListAdapter ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Save InstanceState ( out State : ĠBundle ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Save InstanceState ( out State ) ĊĠĠĠĠĠĠĠ Ġ// ĠViewModel ãģ« ãģĹãģŁ ãģĦ ĊĠĠĠĠĠĠĠ Ġout State . put Serializable (" list ", Ġre cyclerView List ) ĊĠĠĠĠĠĠĠ Ġout State . putString ArrayList (" tag ", Ġview Binding . fragment N ic ov ideo Ranking Tag LinearLayout . children . toList (). map Ġ{ Ġview Ġ-> Ġ( view Ġas ĠCh ip ). text . toString () Ġ} Ġas Ġjava . util . ArrayList < String >) ĊĠĠĠ Ġ} Ċ Ċ }