/* Ċ Ġ* ĠCopyright Ġ 2 0 2 0 ĠK a ush ik ĠN . ĠSan ji Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* ĠĠĠ Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . ka ush ik ns an ji . top stor iest icker . ui . base Ċ Ċ import Ġandroidx . lifecycle . LiveData Ċ import Ġandroidx . lifecycle . Mutable LiveData Ċ import Ġandroidx . lifecycle . ViewModel Ċ import Ġcom . ka ush ik ns an ji . top stor iest icker . R Ċ import Ġcom . ka ush ik ns an ji . top stor iest icker . utils . common . Resource Ċ import Ġcom . ka ush ik ns an ji . top stor iest icker . utils . network . Network Helper Ċ import Ġjavax . net . ssl . Https URLConnection Ċ Ċ /** Ċ Ġ* ĠAn Ġabstract Ġbase Ġ[ ViewModel ] Ġfor Ġall Ġthe ĠView Models Ġin Ġthe Ġapp , Ġthat Ġprovides Ġabstraction Ġto Ġcommon Ġtasks . Ċ Ġ* Ċ Ġ* Ġ@ property Ġnetwork Helper ĠInstance Ġof Ġ[ Network Helper ] Ġprovided Ġby ĠD agger , Ġto Ġcheck Ċ Ġ* Ġnetwork Ġconnectivity Ġstatus Ġand Ġhandle Ġnetwork Ġrelated Ġissues . Ċ Ġ* Ċ Ġ* Ġ@ author ĠK a ush ik ĠN ĠSan ji Ċ Ġ*/ Ċ abstract Ġclass ĠBase ViewModel ( ĊĠĠĠ Ġprotected Ġval Ġnetwork Helper : ĠNetwork Helper Ċ ) Ġ: ĠViewModel () Ġ{ ĊĊĠĠĠ Ġ// ĠLive Data Ġfor Ġthe ĠMessages Ġthat Ġneeds Ġto Ġbe Ġshown Ġin ĠToast / Snackbar ĊĠĠĠ Ġprotected Ġval Ġ_ message String : ĠMutable LiveData < Resource < String >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġmessage String : ĠLive Data < Resource < String >> Ġ= Ġ_ message String ĊĠĠĠ Ġprotected Ġval Ġ_ message String Id : ĠMutable LiveData < Resource < Int >> Ġ= ĠMutable LiveData () ĊĠĠĠ Ġval Ġmessage String Id : ĠLive Data < Resource < Int >> Ġ= Ġ_ message String Id ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat Ġchecks Ġthe ĠInternet Ġconnectivity . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġ` true ` Ġif Ġconnected ; Ġ` false ` Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcheck Internet Connection (): ĠBoolean Ġ= Ġnetwork Helper . is Network Connected () ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat Ġchecks Ġthe ĠInternet Ġconnectivity . ĠIf Ġnot Ġconnected , Ġthen Ġan Ġerror Ġmessage ĊĠĠĠĠ Ġ* Ġwill Ġbe Ġposted Ġto Ġ[_ message String Id ] ĠLive Data . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return ĠReturns Ġ` true ` Ġif Ġconnected ; Ġ` false ` Ġotherwise . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġcheck Internet Connection With Message (): ĠBoolean Ġ= ĊĠĠĠĠĠĠĠ Ġif Ġ( check Internet Connection ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPost Ġan Ġerror Ġmessage Ġwhen Ġnot Ġconnected ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ_ message String Id . post Value ( Resource . Error ( R . string . error _ network _ connection _ issue )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġthat Ġchecks Ġfor Ġthe Ġ[ err ] Ġand Ġposts Ġan Ġappropriate Ġerror Ġmessage Ġto Ġ[_ message String Id ] ĠLive Data . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprotected Ġfun Ġhandle Network Error ( err : ĠThrowable ?) Ġ= ĊĠĠĠĠĠĠĠ Ġerr ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠWhen Ġwe Ġhave Ġan Ġerror , Ġconvert Ġit Ġto ĠNetwork Error Ġand Ġpost Ġerror Ġmessages Ġbased Ġon Ġits Ġstatus ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnetwork Helper . cast To Network Error ( err ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġdefault Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ- 1 Ġ-> Ġ_ message String Id . post Value ( Resource . Error ( R . string . error _ network _ default _ issue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor ĠConnect Ġexceptions ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 Ġ-> Ġ_ message String Id . post Value ( Resource . Error ( R . string . error _ network _ server _ connection _ issue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor ĠHTTP Ġ 5 0 0 Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp s URLConnection . HTTP _ INTERNAL _ ERROR Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ message String Id . post Value ( Resource . Error ( R . string . error _ network _ internal _ issue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor ĠHTTP Ġ 5 0 3 Ġerror ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠHttp s URLConnection . HTTP _ UN AVAILABLE Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ message String Id . post Value ( Resource . Error ( R . string . error _ network _ server _ not _ available _ issue )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠFor Ġother Ġerrors ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ_ message String . post Value ( Resource . Error ( message )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġmethod Ġto Ġbe Ġimplemented , Ġwhich Ġwill Ġbe Ġcalled Ġwhen Ġthis ĠViewModel 's ĠActivity / Fragment Ġis Ġcreated . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġabstract Ġfun ĠonCreate () Ċ }