package Ġcom . pat ht of bl a quiz . pat ht of bl a ĊĊ Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . DialogInterface Ċ import Ġandroid . net . Connectivity Manager Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġcom . github . mike phil . chart ing . components . X Axis Ċ import Ġcom . github . mike phil . chart ing . data . Entry Ċ import Ġcom . github . mike phil . chart ing . data . Line Data Ċ import Ġcom . github . mike phil . chart ing . data . Line DataSet Ċ import Ġcom . github . mike phil . chart ing . interfaces . datasets . IL ine DataSet Ċ import Ġcom . google . firebase . auth . Firebase Auth Ċ import Ġcom . google . firebase . database . Data Snapshot Ċ import Ġcom . google . firebase . database . Database Error Ċ import Ġcom . google . firebase . database . Firebase Database Ċ import Ġcom . google . firebase . database . Value EventListener Ċ import Ġkotlinx . android . synt hetic . main . fragment _ statistics .* ĊĊ Ċ /** Ċ Ġ* ĠStatistics ĠFragment Ġhandles Ġthe Ġuser 's Ġstatistics Ġbased Ġon Ġtheir Ġpoints Ġs cored Ġin Ġa Ġquiz Ċ Ġ* Ċ Ġ* ĠIt Ġshows Ġa Ġtable Ġwith Ġscore Ġbreak down Ġof Ġeach Ġcategory Ġso Ġthey Ġac n Ġsee Ġwhich Ġcategory Ġthey Ġand Ġsucceed ing Ġin Ġand Ġalso Ġnot Ġdoing Ġvery Ġwell Ġin Ġso Ġthey Ġcould Ġfocus Ġmore Ġon Ġit Ċ Ġ* ĠThen Ġit Ġshows Ġtheir Ġtotal Ġpoints Ġand Ġthe Ġaverage Ġpoints Ġthey Ġhave Ġs cored Ċ Ġ*/ Ċ class ĠStatistics Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġval Ġuid Ġ= ĠFirebase Auth . getInstance (). uid ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ statistics , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġ// this Ġis Ġthe Ġfunction Ġthat Ġis Ġcalled Ġwhen Ġthe Ġlayout Ġis Ġcreated ĊĠĠĠĠĠĠĠ Ġcheck Internet Connection () ĊĠĠĠĠĠĠĠ Ġupdate Chart () ĊĠĠĠĠĠĠĠ Ġupdate Tables () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġchecks Ġif Ġthe Ġuser 's Ġdevice Ġis Ġconnected Ġto Ġthe Ġinternet Ġto Ġaccess ĠFirebase ĠDatabase ĊĠĠĠĠ Ġ* ĠIf Ġthe Ġuser Ġis Ġnot Ġconnected Ġto Ġthe Ġinternet Ġthen Ġan Ġalert Ġdialog Ġbox Ġappears Ġrem ind ing Ġthem Ġto Ġdo Ġso ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġcheck Internet Connection () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconnectivity Manager Ġ= Ġcontext ?. getSystem Service ( Context . CONNECT IVITY _ SERVICE ) Ġas ĠConnect ivity Manager ĊĠĠĠĠĠĠĠ Ġval Ġnetwork Info Ġ= Ġconnectivity Manager . active Network Info ĊĊĠĠĠĠĠĠĠ Ġ// if Ġthere Ġis Ġno Ġconnection Ġthen Ġit Ġshows Ġthe Ġalert Ġand Ġif Ġthere Ġis Ġa Ġconnection Ġnothing Ġhappens ĊĠĠĠĠĠĠĠ Ġif Ġ( network Info Ġ!= Ġnull Ġ&& Ġnetwork Info . isConnected ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuilder Ġ= ĠAlertDialog . Builder ( this . context !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setTitle (" Connection ĠAlert ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . setMessage (" Please Ġconnect Ġto Ġthe Ġinternet Ġto Ġuse Ġthis Ġapp !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . set Positive Button (" Retry ") Ġ{ Ġdialog Interface : ĠDialog Interface , Ġi : ĠInt Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Internet Connection () Ġ// If Ġthe Ġuser Ġp resses Ġretry Ġthen Ġthe Ġfunction Ġis Ġcalled Ġagain ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbuilder . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġqueries Ġthe Ġlast Ġ 5 Ġuser Ġquiz Ġscores Ġfrom Ġthe Ġdatabase Ġand Ġpresents Ġthem Ġthe Ġuser Ġby Ġcreating Ġa Ġline Ġchart ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Chart () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġget Score History ( object Ġ: ĠFirebase Scores Callback Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Scores Callback ( scores : ĠList < Float >) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Val Ġ= Ġmutable ListOf < Entry >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġi Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( score Ġin Ġscores ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Val . add ( Entry ( i , Ġscore )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( data Val . size Ġ< Ġ 2 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġno Data Error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġline DataSet Ġ= ĠLine DataSet ( data Val , Ġ" Quiz ĠS cores ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline DataSet . color Ġ= Ġresources . getColor ( R . color . teal Dark ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline DataSet . lineWidth Ġ= Ġ 3 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline DataSet . set Circle Color ( resources . getColor ( R . color . google _ red )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġline DataSet . set Draw Circle Hole ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Sets Ġ= ĠArrayList < IL ine DataSet >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata Sets . add ( line DataSet ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠLine Data ( data Sets ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdescription Ġ= Ġscore Line Chart . description ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription . text Ġ= Ġ" Score ĠProgress " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . set No Data Text (" Please Ġtake Ġa Ġquiz Ġto Ġshow Ġstatistics ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . data Ġ= Ġdata ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . axis Right . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġx Axis Ġ= Ġscore Line Chart . xAxis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġx Axis . position Ġ= ĠX Axis . X Axis Position . BOTTOM ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlegend Ġ= Ġscore Line Chart . legend ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlegend . x Offset Ġ= Ġ- 1 0 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . extra Bottom Offset Ġ= Ġ 1 5 f ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . animate X ( 5 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore Line Chart . invalidate () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġqueries Ġthe Ġuser Ġstatistics Ġfrom Ġthe Ġdatabase Ġand Ġpresents Ġthem Ġto Ġthe Ġuser Ġby Ġcreating Ġvarious Ġtables Ġsuch Ġas Ġcategory Ġpoints , Ġtotal Ġpoints Ġand Ġaverage Ġpoints ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġupdate Tables () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcategory Points Ref Ġ= ĠFirebase Database . getInstance (). getReference (" Category Points /$ uid ") ĊĠĠĠĠĠĠĠ Ġcategory Points Ref . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( p 0 : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpoints Ġ= Ġp 0 . getValue ( Category Points :: class . java ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( points Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorg . text Ġ= Ġpoints . organization Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġevents . text Ġ= Ġpoints . events Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġskills . text Ġ= Ġpoints . skills Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoffic ers . text Ġ= Ġpoints . off ic ers Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprocedure . text Ġ= Ġpoints . procedure Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġconference . text Ġ= Ġpoints . conference Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhistory . text Ġ= Ġpoints . history Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġby l aws . text Ġ= Ġpoints . by l aws Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcre ed . text Ġ= Ġpoints . cre ed Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġservice . text Ġ= Ġpoints . service Points . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmisc . text Ġ= Ġpoints . mis cellaneous Points . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaverage Ġ= Ġ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . organization Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . events Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . skills Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . off ic ers Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . procedure Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . conference Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . history Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . by l aws Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . cre ed Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . service Points Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpoints . mis cellaneous Points ) Ġ/ Ġ 1 1 . 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġavg . text Ġ= Ġaverage . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Error Ġoccurred Ġwhile Ġconnecting Ġto Ġthe ĠDatabase ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġval Ġuser Ref Ġ= ĠFirebase Database . getInstance (). getReference (" users /$ uid ") ĊĠĠĠĠĠĠĠ Ġuser Ref . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( p 0 : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtotal Points Ġ= Ġp 0 . child (" total Points "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtotal . text Ġ= Ġtotal Points ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhigh Score Ġ= Ġp 0 . child (" high Score "). value . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhigh . text Ġ= Ġhigh Score ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( context , Ġ" Error Ġoccurred Ġwhile Ġconnecting Ġto Ġthe ĠDatabase ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠThis Ġfunction Ġcreates Ġa Ġlist Ġof Ġthe Ġuser 's Ġlast Ġ 5 Ġquiz Ġscores ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Score History ( firebase Scores Callback : ĠFirebase Scores Callback ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġdatabase Ġ= ĠFirebase Database . getInstance (). getReference (" Score History /$ uid ") ĊĊĠĠĠĠĠĠĠ Ġdatabase . addListener For Single Value Event ( object Ġ: ĠValue EventListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Data Change ( p 0 : ĠData Snapshot ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġscores : ĠList < Float > Ġ= Ġmutable ListOf () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfor Ġ( post Snapshot Ġin Ġp 0 . children ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġquery Ġ= Ġpost Snapshot . value . toString (). toFloat () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscores Ġ+= Ġquery ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfirebase Scores Callback . on Scores Callback ( scores ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Cancelled ( p 0 : ĠDatabase Error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Jvm Static ĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠStatistics Fragment (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= ĠBundle (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }