package Ġorg . tech town . re pose Ċ Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . navigation . Nav Controller Ċ import Ġandroidx . navigation . Navigation Ċ import Ġandroidx . view pager 2 . adapter . Fragment State Adapter Ċ import Ġcom . google . android . gms . ads . Ad Request Ċ import Ġcom . google . android . gms . ads . Mobile Ads Ċ import Ġorg . tech town . re pose . Exercise Fragment . Companion . exercise _ list Ċ import Ġorg . tech town . re pose . databinding . Frag Show Exercise Binding ĊĊ Ċ class ĠShow Exercise Fragment Ġ: ĠFragment (){ ĊĠĠĠ Ġlateinit Ġvar Ġ Ġnav Controller Ġ: ĠNav Controller // ĠëĦ ¤ ë¹Ħ ê²Į ìĿ´ ìħĺ Ġì»¨ íĬ¸ ë¡ ¤ ëŁ¬ ĊĠĠĠ Ġprivate Ġvar Ġ_ binding Ġ: ĠF rag Show Exercise Binding ? Ġ= Ġnull Ġ// Ġë · ° ë°Ķ ìĿ¸ ëĶ © ĊĠĠĠ Ġprivate Ġval Ġbinding Ġget () Ġ= Ġ_ binding !! Ġ// Ġë · ° ë°Ķ ìĿ¸ ëĶ © ĊĊĠĠĠ Ġcompanion Ġobject { ĊĠĠĠĠĠĠĠ Ġvar Ġvp Adapter : ĠFragment State Adapter ? Ġ= Ġnull Ġ// Ġexercise Ġview pager ĠAdapter ĊĠĠĠĠĠĠĠ Ġvar Ġpose _ name Ġ: ĠString ? Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġval Ġexercise _ name _ list Ġ= ĠlistOf ( listOf < String >(" íĭ Ī íĭ Ī ìĿ´ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ ! "," ìŀĲ ê¸° ĠìłĦ ìĹĲ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ !", Ġ" ìĿ´ ìłľ Ġê± ° ìĿĺ Ġëĭ¤ ĠìĻ Ķ ìĸ´ ìļĶ ! "), Ġ// Ġëĭ¤ ë¦¬ ê ¼ ¬ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ìĸ´ ê¹ ¨ ê°Ģ Ġìŀ ł ìĭľ ĠìķĦ íĶĮ ĠëķĮ ! "), Ġ// Ġíķľ Ġì ª ½ ìľ¼ë¡ľ Ġì§ Ĳ Ġëĵ¤ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ëĦ Ī ë¬´ Ġìĺ¤ ëŀĺ Ġìķ ī ìķĦ ĠìŀĪ ìĹĪ ëĤĺ ìļĶ ? "," ì¹ ¨ ëĮĢ ìĹĲìĦľ Ġìŀ ł ê¹ Ĳ Ġí Ĺ Ī ë¦¬ Ġìļ ´ë ı Ļ ! "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ Ġìķ ī ìķĦ ĠìŀĪ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ë°Ķ ì ģ ĺ ìĭľ ê²ł ì§Ģë§Į Ġìŀ ł ê¹ Ĳ Ġìļ ´ë ı Ļ ĠíķĺëĤĺ Ġíķ © ìĭľ ëĭ¤ ! "," ìĿ¼ íķĺ ëŁ¬ Ġê°Ģ ê¸° ĠìłĦ ìĹĲ ĠíķĺëĤĺ ë§Į ĠëįĶ ! "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ ĠìĦľ ĠìŀĪ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ìĨ Ĳ ëª© Ġíķľ Ġë²Ī Ġê º ¾ ìĸ ´ë³ ¼ ê¹Į ìļĶ ! "," ë Ī Ī ìĿ´ ĠíĶ ¼ ë¡ľ íķĺëĭ¤ ë©´ Ġì§Ģ ê¸Ī ìŀħëĭĪëĭ¤ !", Ġ" ê± ´ ê° ķ íķ´ ì§Ħ ëĭ¤ ë©´ ĠíĨµ ëĭ Ń Ġíı¬ ì¦ Ī Ġì ¯ ¤ ìĿ´ ìķ¼ .. "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ ĠìłĦ ìŀĲ ê¸° ê¸° ĠìĤ¬ìļ© ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ë Ī Ī ìĿ´ ĠíĶ ¼ ë¡ľ íķĺëĭ¤ ë©´ Ġì§Ģ ê¸Ī ìŀħëĭĪëĭ¤ ! "," ê± ´ ê° ķ íķ´ ì§Ħ ëĭ¤ ë©´ ĠíĨµ ëĭ Ń Ġíı¬ ì¦ Ī ì ¯ ¤ ìĿ´ ìķ¼ .. "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ Ġëı ħ ìĦľ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ìĨ Ĳ ëª© Ġíķľ Ġë²Ī Ġê º ¾ ìĸ ´ë³ ¼ ê¹Į ìļĶ ! "," ë Ī Ī ìĿ´ ĠíĶ ¼ ë¡ľ íķĺëĭ¤ ë©´ Ġì§Ģ ê¸Ī ìŀħëĭĪëĭ¤ !", Ġ" ê± ´ ê° ķ íķ´ ì§Ħ ëĭ¤ ë©´ ĠíĨµ ëĭ Ń Ġíı¬ ì¦ Ī Ġì ¯ ¤ ìĿ´ ìķ¼ .. "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ ĠíķĦ ê¸° ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" ë Ī Ī ìĿ´ ĠíĶ ¼ ë¡ľ íķĺëĭ¤ ë©´ Ġì§Ģ ê¸Ī ìŀħëĭĪëĭ¤ !", Ġ" ê± ´ ê° ķ íķ´ ì§Ħ ëĭ¤ ë©´ ĠíĨµ ëĭ Ń Ġíı¬ ì¦ Ī Ġì ¯ ¤ ìĿ´ ìķ¼ .. "), Ġ// Ġìŀ ¥ ìĭľ ê°Ħ Ġìļ ´ ìłĦ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" íĭ Ī íĭ Ī ìĿ´ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ ! "," ìŀĲ ê¸° ĠìłĦ ìĹĲ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ !", Ġ" ìĿ´ ìłľ Ġê± ° ìĿĺ Ġëĭ¤ ĠìĻ Ķ ìĸ´ ìļĶ ! "), Ġ// ĠíĮ Ķ ìŀĲ ê± ¸ ìĿĮ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" íĭ Ī íĭ Ī ìĿ´ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ ! "," ìŀĲ ê¸° ĠìłĦ ìĹĲ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ !", Ġ" ìĿ´ ìłľ Ġê± ° ìĿĺ Ġëĭ¤ ĠìĻ Ķ ìĸ´ ìļĶ ! "), Ġ// ĠìķĪ ì§ ± ê± ¸ ìĿĮ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" íĭ Ī íĭ Ī ìĿ´ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ ! "," ìŀĲ ê¸° ĠìłĦ ìĹĲ Ġê³ ¨ ë°ĺ ìļ ´ë ı Ļ ! "), Ġ// Ġìĸ ĳ ë°ĺ ëĭ¤ ë¦¬ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf < String >(" íĭ Ī íĭ Ī ìĿ´ Ġê³ ¨ ë°Ķ ìļ ´ë ı Ļ ! "," ìŀĲ ê¸° ĠìłĦ ìĹĲ Ġê³ ¨ ë°Ķ ìļ ´ë ı Ļ !", Ġ" ìĿ´ ìłľ Ġê± ° ìĿĺ Ġëĭ¤ ĠìĻ Ķ ìĸ´ ìļĶ ! "), Ġ// ĠìĹ İ ëĵľ ëł¤ ìŀĲ ê¸° ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġarguments ?. let { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpose _ name Ġ= Ġit . getString (" pose _ name ") ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ_ binding Ġ= ĠF rag Show Exercise Binding . inflate ( in flater , container , false ) Ġ// Ġë · ° ë°Ķ ìĿ¸ ëĶ © ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġnav Controller Ġ= ĠNavigation . find Nav Controller ( view ) Ġ// ĠëĦ ¤ ë¹Ħ ê²Į ìĿ´ ìħĺ Ġì»¨ íĬ¸ ë¡ ¤ ëŁ¬ Ġview ë¡ľ Ġë¶Ģ íĦ° Ġê°Ģ ìł¸ ìĺ¤ ê¸° ĊĠĠĠĠĠĠĠ Ġset _ pose _ name () Ġ// Ġìļ ´ë ı Ļ ìĿĦ Ġë³´ ìĹ¬ ì¤ Ħ ĠìŀĲ ìĦ¸ ĠìĿ´ë¦Ħ ìĿĦ ĠP ose Fragment ë¡ľ ë¶Ģ íĦ° Ġë°Ľ ìķĦ ìĺ ´ ĊĠĠĠĠĠĠĠ Ġconnect _ view Pager () Ġ// Ġë · ° íİ ĺìĿ´ ìłĢ ĠìĹ° ê²° ĊĠĠĠĠĠĠĠ Ġback _ pressed () Ġ// Ġë Ĵ ¤ ë¡ľ ê°Ģ ê¸° Ġë²Ħ íĬ ¼ ĊĠĠĠĠĠĠĠ Ġbtn _ back () Ġ// ĠíĻ Ķ ì Ĥ´ íĳľ Ġë Ĵ ¤ ë¡ľ ê°Ģ ê¸° ĊĠĠĠĠĠĠĠ Ġstart _ ad () Ġ// Ġê ´ ĳ ê³ł Ġìĭ¤íĸī ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ// ĠExercise Ġë · ° íİ ĺìĿ´ ìłĢ Ġìĸ´ë Į ĳ íĦ° ĊĠĠĠ Ġclass ĠExercise Pager Adapter ( private Ġval Ġfm List : ArrayList < Fragment >, Ġfm : ĠShow Exercise Fragment ): ĠFragment State Adapter ( fm ){ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġfm Ids Ġ= Ġfm List . map { it . hashCode (). to Long ()} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Count (): ĠInt Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfm List . size ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcreate Fragment ( position : ĠInt ): ĠFragment Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfm List [ position ] ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠgetItem Id ( position : ĠInt ): ĠLong Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfm List [ position ]. hashCode (). to Long () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġcontains Item ( itemId : ĠLong ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġfm Ids . contains ( itemId ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġstart _ ad (){ ĊĠĠĠĠĠĠĠ ĠMobile Ads . initialize ( context ){} ĊĠĠĠĠĠĠĠ Ġval Ġad Request Ġ= ĠAd Request . Builder (). build () ĊĠĠĠĠĠĠĠ Ġbinding . ad View 2 . load Ad ( ad Request ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Ġë · ° íİ ĺìĿ´ ìłĢ ĠìĹ° ê²° ĊĠĠĠ Ġfun Ġconnect _ view Pager (){ ĊĠĠĠĠĠĠĠ Ġval Ġidx Ġ= ĠMainActivity . pose _ list . indexOf ( pose _ name )// ĠìĦłíĥĿ ëĲľ Ġpose ê°Ģ Ġëª ĩ ë²Ī ì§¸ Ġpose ìĿ¸ ì§Ģ ĊĠĠĠĠĠĠĠ Ġval Ġfm List Ġ= Ġarray ListOf < Fragment >() ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġexercise _ list [ idx ]. indices ){ Ġ// Ġll Ġ--> ĠìĦłíĥĿ ëĲľ Ġpose ëĵ¤ ìĿĺ Ġìļ ´ë ı Ļ ëĵ¤ìĿĦ Ġëĭ ´ ê³ł ìŀ Ī ëĬĶ Ġ 2 ì°¨ ìĽĲ Ġlist ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpose _ name ?. let Ġ{ ĠExercise Fragment . newInstance ( it , i ) Ġ} ?. let Ġ{ Ġfm List . add ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġvp Adapter Ġ= ĠExercise Pager Adapter ( fm List , this ) Ġ// Ġìĸ´ë Į ĳ íĦ° ĠìĦ¤ìłķ ĊĠĠĠĠĠĠĠ Ġbinding . vp Exercise ViewPager . adapter Ġ= Ġvp Adapter Ġ// Ġìĸ´ë Į ĳ íĦ° ĠìĹ° ê²° ĊĠĠĠĠĠĠĠ Ġbinding . exercise Indicator . set ViewPager 2 ( binding . vp Exercise ViewPager ) Ġ// ĠìĿ¸ ëĶĶ ì¼ ĢìĿ´ íĦ° ëŀ ĳ Ġìĸ´ë Į ĳ íĦ° ĠëıĻ ê¸° íĻĶ ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠìŀĲ ìĦ¸ ìĿ´ ë¦Ħ Ġset ĊĠĠĠ Ġfun Ġset _ pose _ name () Ġ{ ĊĠĠĠĠĠĠĠ Ġbinding . tv Exercise Pose Name . text Ġ= Ġpose _ name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġback _ pressed (){ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( object Ġ: ĊĠĠĠĠĠĠĠĠĠĠĠ ĠOn Back Pressed Callback ( true ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġbtn _ back (){ ĊĠĠĠĠĠĠĠ Ġbinding . btn Back 9 . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnav Controller . pop Back Stack () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ