package Ġcom . n isa ef end io glu . weather . view Ċ Ċ import Ġandroid . content . SharedPreferences Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroidx . annotation . Requires Api Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . n isa ef end io glu . weather . R Ċ import Ġcom . n isa ef end io glu . weather . view model . Main ViewModel Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . text . DateFormat Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . time . LocalDateTime Ċ import Ġjava . time . format . DateTime Formatter Ċ import Ġjava . time . format . Format Style Ċ import Ġjava . util .* Ċ Ċ private Ġconst Ġval ĠTAG Ġ= Ġ" MainActivity " Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġview model : ĠMain ViewModel ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠGET : ĠSharedPreferences ĊĠĠĠ Ġprivate Ġlateinit Ġvar ĠSET : ĠSharedPreferences . Editor ĊĊĠĠĠ Ġ@ Requires Api ( Build . VERSION _ CODES . O ) ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ ĠGET Ġ= Ġget SharedPreferences ( packageName , ĠMODE _ PRIVATE ) ĊĠĠĠĠĠĠĠ ĠSET Ġ= ĠGET . edit () ĊĊĠĠĠĠĠĠĠ Ġview model Ġ= ĠViewModel Providers . of ( this ). get ( Main ViewModel :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġc Name Ġ= ĠGET . getString (" city Name ", Ġ" istan bul ") ?. toLowerCase () ĊĠĠĠĠĠĠĠ Ġed t _ city _ name . setText ( c Name ) ĊĠĠĠĠĠĠĠ Ġview model . refresh Data ( c Name !! ) ĊĊĊĊ ĊĠĠĠĠĠĠĠ Ġval Ġc Ġ= ĠCalendar . getInstance () ĊĠĠĠĠĠĠĠ Ġval Ġyear Ġ= Ġc . get ( Calendar . YEAR ) ĊĠĠĠĠĠĠĠ Ġval Ġmonth Ġ= Ġc . get ( Calendar . MONTH ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġval Ġday Ġ= Ġc . get ( Calendar . DAY _ OF _ MONTH ) ĊĠĠĠĠĠĠĠ Ġval Ġhour Ġ= Ġc . get ( Calendar . HOUR _ OF _ DAY ) ĊĠĠĠĠĠĠĠ Ġval Ġminute Ġ= Ġc . get ( Calendar . MINUTE ) ĊĠĠĠĠĠĠĠ Ġval ĠdateTime Ġ= ĠLocalDateTime . of ( year , Ġmonth , Ġday , Ġhour , Ġminute ) ĊĠĠĠĠĠĠĠ Ġval Ġformatter : ĠDateTime Formatter Ġ= ĠDateTime Formatter . of Localized DateTime ( Format Style . MEDIUM ) ĊĠĠĠĠĠĠĠ Ġupdated _ at . setText ( dateTime . format ( formatter )) ĊĊĊĊĠĠĠĠĠĠĠ Ġget LiveData () ĊĊĠĠĠĠĠĠĠ Ġswipe _ refresh _ layout . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġll _ data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ loading . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcity Name Ġ= ĠGET . getString (" city Name ", Ġc Name )?. toLowerCase () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġed t _ city _ name . setText ( city Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . refresh Data ( city Name !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe _ refresh _ layout . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġimg _ search _ city . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcity Name Ġ= Ġed t _ city _ name . text . toString () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSET . putString (" city Name ", Ġcity Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSET . apply () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview model . refresh Data ( city Name ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget LiveData () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" onCreate : Ġ" Ġ+ Ġcity Name ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget LiveData () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġview model . weather _ data . observe ( this , ĠObserver Ġ{ Ġdata Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll _ data . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ city _ code . text Ġ= Ġdata . sys . country ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ city _ name . text Ġ= Ġdata . name ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaddress . text Ġ= Ġdata . name ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠG lide . with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. load (" https :// open weather map . org / img / wn /" Ġ+ Ġdata . weather . get ( 0 ). icon Ġ+ Ġ"@ 2 x . png ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( img _ weather _ pictures ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġtemp Int Ġ= Ġdata . main . temp . toInt (); ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ degree . text Ġ= Ġtemp Int . toString () Ġ+ Ġ" Â° C " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ humidity . text Ġ= Ġdata . main . humidity . toString () Ġ+ Ġ"% " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ wind _ speed . text Ġ= Ġdata . wind . speed . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ lat . text Ġ= Ġdata . coord . lat . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ lon . text Ġ= Ġdata . coord . lon . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġview model . weather _ error . observe ( this , ĠObserver Ġ{ Ġerror Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġerror ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( error ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ error . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll _ data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġview model . weather _ loading . observe ( this , ĠObserver Ġ{ Ġloading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġloading ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( loading ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ loading . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ error . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġll _ data . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpb _ loading . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠ Ġ} Ċ }