package Ġcom . ibm hack 2 0 2 1 . co ugh it . ui . home Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Context Ċ import Ġandroid . util . Log Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġandroidx . lifecycle . viewModel Scope Ċ import Ġcom . google . android . material . progress indicator . Linear Progress Indicator Ċ import Ġcom . google . gson . internal . bind . util . ISO 8 6 0 1 Utils Ċ import Ġcom . ibm hack 2 0 2 1 . co ugh it . model . past tests . Past Tests Ċ import Ġcom . ibm hack 2 0 2 1 . co ugh it . model . past tests . Test Ċ import Ġcom . ibm hack 2 0 2 1 . co ugh it . repository . Repository Ċ import Ġcom . ibm hack 2 0 2 1 . co ugh it . util . Resource Ċ import Ġcom . j jo e 6 4 . graph view . Graph View Ċ import Ġcom . j jo e 6 4 . graph view . series . DataPoint Ċ import Ġcom . j jo e 6 4 . graph view . series . Line Graph Series Ċ import Ġcom . vm ad al in . eas yper missions . Build Config Ċ import Ġcom . vm ad al in . eas yper missions . Easy Permissions Ċ import Ġkotlinx . coroutines . launch Ċ import Ġretrofit 2 . Response Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ Ċ class ĠHome ViewModel ( val Ġrepository : ĠRepository ) Ġ: ĠViewModel () Ġ{ ĊĊĊĠĠĠ Ġ// ĠI Ġhave Ġto Ġprovide Ġthe Ġfragment Ġwith Ġthis Ġvalue Ġor Ġvalue Ġtype ĊĠĠĠ Ġval Ġseries : ĠMutable LiveData < Line Graph Series < DataPoint > ?> Ġ= ĊĠĠĠĠĠĠĠ ĠMutable LiveData () ĊĊĠĠĠ Ġ// Ġmutable Ġlive Ġdata Ġfor Ġpast Ġtests ĊĠĠĠ Ġval Ġpast Tests Ġ: ĠMutable LiveData < Resource < Past Tests >> Ġ= ĠMutable LiveData () ĊĊĠĠĠ Ġ// Ġapi Ġcall Ġto Ġget Ġthe Ġpast s Ġtests ĊĠĠĠ Ġfun Ġget Past s Tests ( email : ĠString ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġpast Tests . post Value ( Resource . Loading ()) ĊĊĠĠĠĠĠĠĠ Ġ// Ġmake Ġthe Ġnetwork Ġcall ĊĠĠĠĠĠĠĠ Ġval Ġresponse Ġ= Ġrepository . get Past Tests ( email Ġ= Ġemail ) ĊĠĠĠĠĠĠĠ Ġpast Tests . post Value ( handle Rest Response ( response )) Ċ Ċ // ĠĠĠĠĠĠĠ ĠLog . d (" home fragment " Ġ, Ġcom . ibm hack 2 0 2 1 . co ugh it . Build Config . BASE _ URL ) ĊĠĠĠ Ġ} ĊĊĊĊĠĠĠ Ġ// Ġhandle Ġapi Ġresponse Ġfor Ġprediction ĊĠĠĠ Ġfun Ġhandle Rest Response ( response : ĠResponse < Past Tests >) Ġ: ĠResource < Past Tests > Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( response . is Successful ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġresponse . body ()?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠResource . Success ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn ĠResource . Error ( response . message ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠI Ġwill Ġget Ġjust Ġa Ġsimple Ġarray Ġin Ġretrofit Ġcall ĊĠĠĠ Ġ// ĠI Ġhave Ġto Ġcreate Ġa Ġfun Ġto Ġconvert Ġthis Ġdata Ġpoints Ġto Ġsomething Ġlike Ġthis ĊĊĠĠĠ Ġfun ĠconvertTo Line Graph Series ( array : ĠList < Test > ?, Ġlinear Progress Indicator : ĠLinear Progress Indicator ) Ġ= ĠviewModel Scope . launch Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġval Ġarray Ġ= ĠarrayOf < Double >( elements ) ĊĠĠĠĠĠĠĠ Ġif ( array Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġcode Ġoptimization Ġhas Ġbeen Ġdone Ġbut Ġthere Ġare Ġsome Ġissues Ġwith Ġgraph Ġview Ġlibrary ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠarrayOf DataPoint Ġ= ĠArray < DataPoint >( array . size ) Ġ{ Ġi Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠData Point (( i ). toDouble (), Ġ( array [ i ]. prediction ). toDouble (). times ( 1 0 0 )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Progress Indicator . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġseries 2 Ġ= ĠLine Graph Series ( array Of DataPoint ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . value ?. reset Data ( array Of ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . post Value ( series 2 ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġseries . post Value ( null ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlinear Progress Indicator . hide () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Date ( date Ġ: ĠString ) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 0 2 1 - 1 1 - 1 2 T 1 4 : 1 0 : 2 4 . 1 5 9 Z Ġ--> Ġformat Ġof Ġthe Ġstring ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġdate . substring ( 0 , 4 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġdate . substring ( 5 , 7 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġdate . substring ( 8 , 1 0 ). toInt () ĊĊĠĠĠĠĠĠĠ ĠLog . d (" home fragment " Ġ," Extract ed Ġtime Ġ: Ġ" Ġ+ Ġyear Ġ+ Ġ" Ġ" Ġ+ Ġ Ġmonth Ġ+ Ġ" Ġ" Ġ+ Ġday ) ĊĊĠĠĠĠĠĠĠ Ġval Ġcalendar Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . DATE , Ġday ) ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . MONTH , Ġmonth ) ĊĠĠĠĠĠĠĠ Ġcalendar . add ( Calendar . YEAR , Ġyear ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( year - 1 9 0 0 , Ġmonth - 1 , Ġday ) ĊĠĠĠĠĠĠĠ Ġreturn ĠDate Format . getDate Instance (). format ( date ) ĊĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġextract Time ( time Ġ: ĠString ) Ġ: ĠString { ĊĠĠĠĠĠĠĠ Ġ// Ġ 2 0 2 1 - 1 1 - 1 2 T 1 4 : 1 0 : 2 4 . 1 5 9 Z Ġ--> Ġformat Ġof Ġthe Ġstring ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġtime . substring ( 0 , 4 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġtime . substring ( 5 , 7 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġtime . substring ( 8 , 1 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= Ġtime . substring ( 1 1 , Ġ 1 3 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġmin Ġ= Ġtime . substring ( 1 4 , Ġ 1 6 ). toInt () ĊĠĠĠĠĠĠĠ Ġval Ġseconds Ġ= Ġtime . substring ( 1 7 , 1 9 ). toInt () ĊĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠDate Format . getTime Instance () ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate ( year , Ġmonth , Ġday , Ġhours , Ġmin , Ġseconds ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsimple DateFormat Ġ= ĠSimpleDateFormat (" EEEE ") ĊĠĠĠĠĠĠĠ Ġval Ġday OfWeek Ġ= Ġsimple DateFormat . format ( date ) ĊĊĠĠĠĠĠĠĠ Ġval Ġstring Ġ= ĠDate Format . getTime Instance ( DateFormat . MEDIUM ). format ( date ) Ġ+ Ġ", Ġ" Ġ+ Ġday OfWeek ĊĊĠĠĠĠĠĠĠ Ġreturn Ġstring ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġfun Ġhandle Permissions ( context : ĠContext , Ġperms : ĠArray < out ĠString >): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠEasy Permissions . has Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* perms ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġrequest Permissions ( PERMISSION _ CODE : ĠInt , Ġperms : ĠArray < out ĠString >, Ġfragment : ĠFragment ) Ġ= ĊĠĠĠĠĠĠĠ ĠEasy Permissions . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" These Ġpermissions Ġare Ġnecessary Ġfor Ġtotal Ġfunctionality Ġof Ġthe Ġapp ", ĊĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION _ CODE , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ* perms ĊĠĠĠĠĠĠĠ Ġ) Ċ }