/* Ċ Ġ* ĠCopyright Ġ 2 0 1 7 Ġvin ay ag as und ar Ċ Ġ* ĠCopyright Ġ 2 0 1 7 Ġrand hir gu pta Ċ Ġ* Ċ Ġ* Ġ Ġ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 Ġyou . dev kn ights . minimal weather . ui . landing ĊĊ Ċ import Ġandroid . Manifest Ċ import Ġandroid . arch . lifecycle . LiveData Ċ import Ġandroid . arch . lifecycle . Observer Ċ import Ġandroid . arch . lifecycle . ViewModel Provider Ċ import Ġandroid . arch . lifecycle . ViewModel Providers Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . location . Location Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . annotation . Drawable Res Ċ import Ġandroid . support . v 4 . app . Activity Compat Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . text . format . DateFormat Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . ProgressBar Ċ import Ġandroid . widget . TextView Ċ Ċ import Ġjava . util . Calendar Ċ Ċ import Ġjavax . inject . Inject Ċ Ċ import Ġyou . dev kn ights . minimal weather . R Ċ import Ġyou . dev kn ights . minimal weather . database . entity . Weather Entity Ċ import Ġyou . dev kn ights . minimal weather . di . Injectable Ċ import Ġyou . dev kn ights . minimal weather . model . Resource Ċ import Ġyou . dev kn ights . minimal weather . model . Status Ċ import Ġyou . dev kn ights . minimal weather . util . Unit Conv Util ĊĊ Ċ /** Ċ Ġ* ĠA Ġsimple Ġ[ Fragment ] Ġsubclass . Ċ Ġ*/ Ċ class ĠLand ing Fragment Ġ: ĠFragment (), ĠInjectable Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġm City Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Time Text : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Weather Status Image : ĠImageView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Weather Temperature Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Time Re le ated Text : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Sun rise Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Wind Text : ĠTextView ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Temperature Text : ĠTextView ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Loading ProgressBar : ĠProgress Bar ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Detail Container : ĠView ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġm Factory : ĠViewModel Provider . Factory ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġm Landing ViewModel : ĠLand ing ViewModel ĊĊĊĊĠĠĠ Ġprivate Ġval Ġis Permission Granted : ĠBoolean ĊĠĠĠĠĠĠĠ Ġget () Ġ= ĠActivity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED Ġ&& ĠActivity Compat . check Self Permission ( activity , ĠManifest . permission . ACCESS _ CO AR SE _ LOCATION ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater ?, Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater ?. inflate ( R . layout . fragment _ landing , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView ?, ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġm City Text Ġ= Ġview ?. findViewById ( R . id . city Text ) ĊĠĠĠĠĠĠĠ Ġm Time Text Ġ= Ġview ?. findViewById ( R . id . time Text ) ĊĠĠĠĠĠĠĠ Ġm Weather Status Image Ġ= Ġview ?. findViewById ( R . id . weather Status Image ) ĊĠĠĠĠĠĠĠ Ġm Weather Temperature Text Ġ= Ġview ?. findViewById ( R . id . weather Temperature Text ) ĊĊĠĠĠĠĠĠĠ Ġm Time Re le ated Text Ġ= Ġview ?. findViewById ( R . id . time Related Message Text ) ĊĠĠĠĠĠĠĠ Ġm Sun rise Text Ġ= Ġview ?. findViewById ( R . id . sun rise Text ) ĊĠĠĠĠĠĠĠ Ġm Wind Text Ġ= Ġview ?. findViewById ( R . id . wind Text ) ĊĠĠĠĠĠĠĠ Ġm Temperature Text Ġ= Ġview ?. findViewById ( R . id . temperature Text ) ĊĊĠĠĠĠĠĠĠ Ġm Loading ProgressBar Ġ= Ġview ?. findViewById ( R . id . loading ProgressBar ) ĊĠĠĠĠĠĠĠ Ġm Detail Container Ġ= Ġview ?. findViewById ( R . id . detail Container ) ĊĊĠĠĠĠĠĠĠ Ġm Loading ProgressBar ?. visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġm Landing ViewModel Ġ= ĠViewModel Providers . of ( this , Ġm Factory ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get ( Landing ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! is Permission Granted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( PERMISSION S , ĠPER MISSION _ REQUEST _ CODE ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Location Updates () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( grant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstart Location Updates () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Location Updates () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Landing ViewModel . location . observe ( this , ĠObserver < Location > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . getData From Location ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun ĠgetData From Location ( location : ĠLocation ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġresource LiveData Ġ= Ġm Landing ViewModel ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Weather Data ( location ) ĊĊĊĠĠĠĠĠĠĠ Ġresource LiveData . observe ( this , ĠObserver < Resource < Weather Entity >> Ġ{ Ġweather Entity Resource Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( weather Entity Resource Ġ!= Ġnull Ġ&& Ġweather Entity Resource . status Ġ== ĠStatus . SUCCESS ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather Entity Resource . data ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbind Data ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġbind Data ( weather : ĠWeather Entity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġm City Text ?. text Ġ= Ġweather . place Name ĊĠĠĠĠĠĠĠ Ġm Time Text ?. text Ġ= ĠDate Format . format (" EEEE , Ġhh : mm Ġa ", ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. time In Millis ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtemperature In C els ius Ġ= ĠgetString ( R . string . temp _ in _ cel s ius , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUnit Conv Util . kel vin To C els ius ( weather . temperature )) ĊĊĠĠĠĠĠĠĠ Ġm Weather Temperature Text ?. text Ġ= Ġtemperature In C els ius ĊĊĠĠĠĠĠĠĠ Ġval Ġtime In M ills Ġ= Ġweather . sun rise Time Ġ* Ġ 1 0 0 0 ĊĊĠĠĠĠĠĠĠ Ġm Sun rise Text ?. text Ġ= ĠDate Format . format (" hh . mm ", Ġtime In M ills ) ĊĠĠĠĠĠĠĠ Ġm Wind Text ?. text Ġ= ĠgetString ( R . string . wind _ speed _ in _ m iles , Ġweather . wind Speed ) ĊĠĠĠĠĠĠĠ Ġm Temperature Text ?. text Ġ= Ġtemperature In C els ius ĊĊĊĠĠĠĠĠĠĠ Ġm Weather Status Image ?. setImage Resource ( get Weather Icon ( weather . weather Icon )) ĊĊĠĠĠĠĠĠĠ Ġm Detail Container ?. alpha Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġm Detail Container ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġm Loading ProgressBar ?. visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġm Detail Container ?. animate ()?. alpha ( 1 f )?. set Duration ( 4 0 0 )?. start () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġ@ Drawable Res ĊĠĠĠ Ġprivate Ġfun Ġget Weather Icon ( icon : ĠString ?): ĠInt Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( icon ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 1 d ", Ġ" 0 1 n " Ġ-> Ġreturn ĠR . drawable . clear _ sky ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 2 d ", Ġ" 0 2 n " Ġ-> Ġreturn ĠR . drawable . f ew _ clouds ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 3 d ", Ġ" 0 3 n " Ġ-> Ġreturn ĠR . drawable . scatter ed _ clouds ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 4 d ", Ġ" 0 4 n " Ġ-> Ġreturn ĠR . drawable . broken _ clouds ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 9 d ", Ġ" 0 9 n " Ġ-> Ġreturn ĠR . drawable . sh ower _ rain ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 0 d ", Ġ" 1 0 n " Ġ-> Ġreturn ĠR . drawable . rain ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 1 d ", Ġ" 1 1 n " Ġ-> Ġreturn ĠR . drawable . th under storm ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 3 d ", Ġ" 1 3 n " Ġ-> Ġreturn ĠR . drawable . snow ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 5 0 d ", Ġ" 5 0 n " Ġ-> Ġreturn ĠR . drawable . mist ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġreturn ĠR . drawable . clear _ sky ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPER MISSION _ REQUEST _ CODE Ġ= Ġ 1 4 2 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠPER MISSION S Ġ= ĠarrayOf ( Manifest . permission . ACCESS _ CO AR SE _ LOCATION , ĠManifest . permission . ACCESS _ F INE _ LOCATION ) ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= Ġ" Landing Fragment " ĊĠĠĠ Ġ} Ċ }// ĠRequired Ġempty Ġpublic Ġconstructor Ċ