package Ġall anks r . com . firebase ĊĊ Ċ import Ġall anks r . com . firebase . ad mob . Ad mob Activity Ċ import Ġall anks r . com . firebase . authentication . Authentication Activity Ċ import Ġall anks r . com . firebase . authentication . mvp Email . Email Ċ import Ġall anks r . com . firebase . cloud Fire store . Fire store Activity Ċ import Ġall anks r . com . firebase . crash ly t ics . Crash ly t ics Activity Ċ import Ġall anks r . com . firebase . cloud Functions . Functions Activity Ċ import Ġall anks r . com . firebase . cloud Message . Cloud Message Activity Ċ import Ġall anks r . com . firebase . hosting . Hosting Activity Ċ import Ġall anks r . com . firebase . realtime Database . Database Activity Ċ import Ġall anks r . com . firebase . cloud Storage . Storage Activity Ċ import Ġall anks r . com . firebase . remote Config . Remote Config Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Context Theme Wrapper Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Relative Layout Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġkotlinx . android . synt hetic . main . activities .* Ċ import Ġkotlinx . android . synt hetic . main . activities _ choice . view .* Ċ import Ġkotlinx . android . synt hetic . main . main _ activity .* Ċ Ċ class ĠMainActivity : ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivities Name : ĠArray < String > ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġactivities Intent : ĠArray < Intent > ĊĠĠĠ Ġval Ġauth Ġ= ĠFirebase Auth . getInstance () ĊĠĠĠ Ġprivate Ġvar Ġpreferences Ġ= ĠP refs () ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . main _ activity ) ĊĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġemail Link Ġ= Ġintent . data . toString () ĊĠĠĠĠĠĠĠ Ġ// ĠConfirm Ġthe Ġlink Ġis Ġa Ġsign - in Ġwith Ġemail Ġlink . ĊĠĠĠĠĠĠĠ Ġif Ġ( auth . is SignIn With Email Link ( email Link )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRetrieve Ġthis Ġfrom Ġwhere ver Ġyou Ġstored Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġemail Ġ= Ġpreferences . getString SP ( this , Ġ" email ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠThe Ġclient ĠSDK Ġwill Ġparse Ġthe Ġcode Ġfrom Ġthe Ġlink Ġfor Ġyou . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġauth . signIn With Email Link ( email , Ġemail Link ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add On Complete Listener Ġ{ Ġtask Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task . is Successful ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" Successfully Ġsigned ", Ġ" Successfully Ġsigned Ġin Ġwith Ġemail Ġlink !") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠEmail :: class . java )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġval Ġresult Ġ= Ġtask . result ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġaccess Ġthe Ġnew Ġuser Ġvia Ġresult . getUser () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdditional Ġuser Ġinfo Ġprofile Ġ* not * Ġavailable Ġvia : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresult . getAdditional UserInfo (). get Profile () Ġ== Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠYou Ġcan Ġcheck Ġif Ġthe Ġuser Ġis Ġnew Ġor Ġexisting : ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġresult . getAdditional UserInfo (). isNew User () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e (" Error Ġsigning ", Ġ" Error Ġsigning Ġin Ġwith Ġemail Ġlink ", Ġtask . exception ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ error . text Ġ= Ġ"${ task . exception }" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġactivities Name Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . firebase Authentication ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . firestore Cloud Store ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . database Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . storage Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . hosting Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . functions Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . crash ly t ics Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . message Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . remote Config Activity ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . ad mob Activity ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġactivities Intent Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠAuthentication Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠFire store Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠDatabase Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠStorage Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠHost ing Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠFunctions Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠCrash ly t ics Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠCloud Message Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠRemote Config Activity :: class . java ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠIntent ( this , ĠAd mob Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġfor ( a Ġin Ġactivities Name . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchoice Store LL Ġ= ĠLayoutInflater ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. from ( application Context ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. clone In Context ( Context Theme Wrapper ( this , ĠR . style . App Theme )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. inflate ( R . layout . activities _ choice , Ġnull ) Ġas ĠRelative Layout ĊĠĠĠĠĠĠĠĠĠĠĠ Ġll Container _ activities . addView ( choice Store LL ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Store LL . btn _ choice . text Ġ= Ġactivities Name [ a ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġchoice Store LL . btn _ choice . setOnClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivities Intent [ a ]. flags Ġ= ĠIntent . FLAG _ ACTIVITY _ NEW _ TASK ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( activities Intent [ a ]) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }