package Ġcom . min ar . bir day . fragments Ċ Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Sp ann able StringBuilder Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . annotation . Drawable Res Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġandroidx . preference . Preference Manager Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġandroidx . recyclerview . widget . RecyclerView Ċ import Ġandroidx . vect ord raw able . graphics . drawable . Anim atable 2 Compat Ċ import Ġandroidx . vect ord raw able . graphics . drawable . Animated Vector Drawable Compat Ċ import Ġcom . af ol le st ad . material dialogs . Layout Mode Ċ import Ġcom . af ol le st ad . material dialogs . Material Dialog Ċ import Ġcom . af ol le st ad . material dialogs . bottom sheets . Bottom Sheet Ċ import Ġcom . facebook . shim mer . Sh im mer Frame Layout Ċ import Ġcom . min ar . bir day . activities . MainActivity Ċ import Ġcom . min ar . bir day . R Ċ import Ġcom . min ar . bir day . adapters . F avorites Adapter Ċ import Ġcom . min ar . bir day . model . Event Result Ċ import Ġcom . min ar . bir day . utilities . Stats Generator Ċ import Ġcom . min ar . bir day . view models . F avorites ViewModel Ċ import Ġkotlinx . android . synt hetic . main . fragment _ favorites . view .* Ċ Ċ class ĠF avorites Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġroot View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠRecyclerView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfavor ites ViewModel : ĠF avorites ViewModel ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadapter : ĠF avorites Adapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġfull Stats : ĠSp ann able StringBuilder ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġact : ĠMainActivity ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġadapter Ġ= ĠF avorites Adapter ( require Activity (). application Context ) ĊĠĠĠĠĠĠĠ Ġact Ġ= Ġactivity Ġas ĠMainActivity ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġv : ĠView Ġ= Ġinflater . inflate ( R . layout . fragment _ favorites , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġstats Image Ġ= Ġv . findViewById < ImageView >( R . id . stats Image ) ĊĠĠĠĠĠĠĠ Ġval Ġshim mer Ġ= Ġv . findViewById < Sh im mer Frame Layout >( R . id . favorites Card Sh im mer ) ĊĠĠĠĠĠĠĠ Ġval Ġsp Ġ= ĠPreference Manager . getDefault SharedPreferences ( require Context ()) ĊĠĠĠĠĠĠĠ Ġval Ġshim mer Enabled Ġ= Ġsp . getBoolean (" shim mer ", Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġfavor ites Card Ġ= Ġv . favorites Card ĊĠĠĠĠĠĠĠ Ġif Ġ( shim mer Enabled ) Ġshim mer . start Sh im mer () ĊĠĠĠĠĠĠĠ Ġstats Image . apply Loop ing Animated Vector Drawable ( R . drawable . animated _ c andle ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠShow Ġfull Ġstats Ġin Ġa Ġbottom Ġsheet ĊĠĠĠĠĠĠĠ Ġfavor ites Card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġact . vi br ate () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMaterial Dialog ( require Context (), ĠBottom Sheet ( Layout Mode . WRAP _ CONTENT )). show Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcorner Radius ( res Ġ= ĠR . dim en . rounded _ corners ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtitle ( R . string . stats _ summary ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġicon ( R . drawable . ic _ stats _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmessage ( text Ġ= Ġfull Stats ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġroot View Ġ= Ġv ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetup Ġthe Ġre cycler Ġview ĊĠĠĠĠĠĠĠ Ġinitialize RecyclerView () ĊĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel Ġ= ĠViewModel Provider ( this ). get ( F avorites ViewModel :: class . java ) ĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . all Favorite Events . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġevents Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUpdate Ġthe Ġcached Ġcopy Ġof Ġthe Ġwords Ġin Ġthe Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠ Ġevents ?. let Ġ{ Ġadapter . submit List ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . any Favorite Event . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġevent List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event List . isNotEmpty ()) Ġremove Placeholder () ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġfavor ites ViewModel . all Events . observe ( view Lifecycle Owner , ĠObserver Ġ{ Ġevent List Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠUnder Ġa Ġminimum Ġsize , Ġno Ġstats Ġwill Ġbe Ġshown ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( event List . size Ġ> Ġ 4 ) Ġgenerate Stat ( event List ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġfull Stats Ġ= ĠSp ann able StringBuilder ( require Activity (). application Context . getString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . no _ stats _ description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġv ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠInitialize Ġthe Ġnecessary Ġparts Ġof Ġthe Ġre cycler Ġview ĊĠĠĠ Ġprivate Ġfun Ġinitialize RecyclerView () Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġroot View . findViewById ( R . id . favorites Recycler ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager Ġ= ĠLinearLayoutManager ( activity ) ĊĠĠĠĠĠĠĠ Ġre cyclerView . adapter Ġ= Ġadapter ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠRemove Ġthe Ġplaceholder Ġor Ġreturn Ġif Ġthe Ġplaceholder Ġwas Ġalready Ġremoved Ġbefore ĊĠĠĠ Ġprivate Ġfun Ġremove Placeholder () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfavor ites Main : ĠLinearLayout Ġ= Ġrequire View (). findViewById ( R . id . favorites Main ) ĊĠĠĠĠĠĠĠ Ġval Ġplaceholder : ĠTextView Ġ= Ġrequire View (). findViewById ( R . id . no F avorites ) Ġ?: Ġreturn ĊĠĠĠĠĠĠĠ Ġfavor ites Main . remove View ( placeholder ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠUse Ġthe Ġgenerator Ġto Ġgenerate Ġa Ġrandom Ġstat Ġand Ġdisplay Ġit ĊĠĠĠ Ġprivate Ġfun Ġgenerate Stat ( events : ĠList < Event Result >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcard Subtitle : ĠTextView Ġ= Ġrequire View (). findViewById ( R . id . stats Subtitle ) ĊĠĠĠĠĠĠĠ Ġval Ġcard Description : ĠTextView Ġ= Ġrequire View (). findViewById ( R . id . stats Description ) ĊĠĠĠĠĠĠĠ Ġval Ġgenerator Ġ= ĠStats Generator ( events , Ġcontext ) ĊĠĠĠĠĠĠĠ Ġcard Subtitle . text Ġ= Ġgenerator . generate Random Stat () ĊĠĠĠĠĠĠĠ Ġfull Stats Ġ= Ġgenerator . generate Full Stats () ĊĠĠĠĠĠĠĠ Ġval Ġsummary Ġ= ĠgetString ( R . string . stats _ total ) Ġ+ Ġ" Ġ" Ġ+ Ġevents . size Ġ+ Ġ" Ġ" Ġ+ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . birth days ĊĠĠĠĠĠĠĠ Ġ) Ġ+ Ġ" !" ĊĠĠĠĠĠĠĠ Ġcard Description . text Ġ= Ġsummary ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠLoop Ġthe Ġanimated Ġvector Ġdrawable ĊĠĠĠ Ġinternal Ġfun ĠImageView . apply Loop ing Animated Vector Drawable (@ Drawable Res Ġanimated Vector : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġanimated Ġ= ĠAnimated Vector Drawable Compat . create ( context , Ġanimated Vector ) ĊĠĠĠĠĠĠĠ Ġanimated ?. register Animation Callback ( object Ġ: ĠAnim atable 2 Compat . Animation Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( drawable : ĠDrawable ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis @ apply Loop ing Animated Vector Drawable . post Ġ{ Ġanimated . start () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġthis . setImage Drawable ( animated ) ĊĠĠĠĠĠĠĠ Ġanimated ?. start () ĊĠĠĠ Ġ} Ċ } Ċ