package Ġcom . ti . sun rain . ui . weather Ċ Ċ import Ġandroid . app . Notification Ċ import Ġandroid . app . Notification Channel Ċ import Ġandroid . app . Notification Manager Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . res . Configuration Ċ import Ġandroid . graphics . Bitmap Factory Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . Menu Ċ import Ġandroid . view . MenuItem Ċ import Ġandroid . view . View Ċ import Ġandroid . view . View . GONE Ċ import Ġandroid . view . View . VISIBLE Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . appcompat . view . menu . Menu Builder Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . Gravity Compat Ċ import Ġandroidx . drawer layout . widget . Drawer Layout Ċ import Ġandroidx . lifecycle . Observer Ċ import Ġandroidx . lifecycle . ViewModel Providers Ċ import Ġandroidx . recyclerview . widget . Linear LayoutManager Ċ import Ġcom . github . mike phil . chart ing . components . Axis Base Ċ import Ġcom . github . mike phil . chart ing . components . X Axis Ċ import Ġcom . github . mike phil . chart ing . data .* Ċ import Ġcom . github . mike phil . chart ing . formatter . I Axis Value Formatter Ċ import Ġcom . github . mike phil . chart ing . formatter . Value Formatter Ċ import Ġcom . github . mike phil . chart ing . interfaces . datasets . IL ine DataSet Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . google . gson . Gson Ċ import Ġcom . rain y . we a ht er _ bg _ plug . utils . Weather Util Ċ import Ġcom . ti . sun rain . R Ċ import Ġcom . ti . sun rain . Sun Rain Application Ċ import Ġcom . ti . sun rain . logic . Activity Set Ċ import Ġcom . ti . sun rain . logic . model .* Ċ import Ġcom . ti . sun rain . logic . model . day forecast . Day Forecast Item Ċ import Ġcom . ti . sun rain . ui . about . About Activity Ċ import Ġcom . ti . sun rain . ui . air . Air Activity Ċ import Ġcom . ti . sun rain . ui . covid . Cov id Special Ċ import Ġcom . ti . sun rain . ui . daily . Daily in for Activity Ċ import Ġcom . ti . sun rain . ui . min ut ely . Min ut ely Activity Ċ import Ġcom . ti . sun rain . ui . settings . Settings Activity Ċ import Ġkotlinx . android . synt hetic . main . activity _ weather .* Ċ import Ġkotlinx . android . synt hetic . main . air .* Ċ import Ġkotlinx . android . synt hetic . main . forecast .* Ċ import Ġkotlinx . android . synt hetic . main . forecast _ chart .* Ċ import Ġkotlinx . android . synt hetic . main . half _ item _ air .* Ċ import Ġkotlinx . android . synt hetic . main . half _ item _ min ut ely _ rain .* Ċ import Ġkotlinx . android . synt hetic . main . hourly .* Ċ import Ġkotlinx . android . synt hetic . main . item _ progress _ sun .* Ċ import Ġkotlinx . android . synt hetic . main . life _ index .* Ċ import Ġkotlinx . android . synt hetic . main . min ut ely _ rain .* Ċ import Ġkotlinx . android . synt hetic . main . now .* Ċ import Ġjava . text . SimpleDateFormat Ċ import Ġjava . util .* Ċ import Ġkotlin . collections . ArrayList Ċ Ċ class ĠWeather Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġ// 2 0 2 0 - 1 2 - 1 4 Ġ éĩį æŀĦ ä»£çłģ ï¼Į UI å±Ĥ ä¼ĺ äºİ éĢ»è¾ĳ å±Ĥ ï¼Į éĩį åĨĻ åĩ½æķ° ä¼ĺ äºİ èĩªå®ļä¹ī åĩ½æķ° ĊĠĠĠ Ġ// æ ĩĴ åĬłè½½ Ġview model ĊĠĠĠ Ġval ĠviewModel Ġby Ġlazy Ġ{ ĠViewModel Providers . of ( this ). get ( Weather ViewModel :: class . java ) Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ weather ) ĊĊĠĠĠĠĠĠĠ Ġ// set ĊĠĠĠĠĠĠĠ ĠActivity Set . add Activity ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// dark mode ĊĠĠĠĠĠĠĠ Ġwhen ( Sun Rain Application . settings Preference . getString (" others _ dark mode _ list "," 0 ")){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 0 " Ġ-> Ġdelegate . local Night Mode Ġ= ĠAppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 1 " Ġ-> Ġdelegate . local Night Mode Ġ= ĠAppCompat Delegate . MODE _ N IGHT _ NO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 " Ġ-> Ġdelegate . local Night Mode Ġ= ĠAppCompat Delegate . MODE _ N IGHT _ YES ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// welcome ĊĠĠĠĠĠĠĠ Ġval Ġwelcome Data Ġ= ĠSun Rain Application . settings Preference . getBoolean (" welcome ", true ) ĊĠĠĠĠĠĠĠ Ġif ( welcome Data ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" éļĲ ç§ģ æĶ¿ çŃĸ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" 1 . Ġå½ĵ æĤ¨ ä½¿çĶ¨ æĻ ´ éĽ ¨ æĹ¶ éľĢè¦ģ æıĲä¾Ľ ç½ĳç»ľ æĿĥéĻĲ ï¼Į çĶ¨äºİ å°Ĩ æĤ¨ è¾ĵåħ¥ çļĦ åŁİ å¸Ĥ ä¿¡æģ¯ ä½¿çĶ¨ å½ © äºĳ å¤© æ°Ķ çļĦ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ç¬¬ä¸ī æĸ¹ æİ¥åı£ æĲľç´¢ å¤© æ°Ķ ãĢĤ æĻ ´ éĽ ¨ ä¼ļ å°Ĩ ä¸Ĭ ä¸Ģæ¬¡ æĲľç´¢ çļĦ è®°å½ķ ä¿Ŀ åŃĺåľ¨ æľ¬åľ° ãĢĤ éĢļè¿ĩ æ¸ħ éĻ¤ è½¯ä»¶ æķ°æį® ï¼Į åı¯ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ä»¥ å°Ĩ å·² ä¿ĿåŃĺ çļĦæķ°æį® æ¸ħ éĻ¤ ãĢĤ æĻ ´ éĽ ¨ ä¸įéľĢè¦ģ åħ¶ä»ĸ ä»»ä½ķ æĿĥéĻĲ ãĢĤ \ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" 2 . Ġå¦Ĥæŀľ æĤ¨ å¯¹ æĤ¨çļĦ éļĲ ç§ģ æľī ä»»ä½ķ çĸĳ éĹ® æĪĸèĢħ éľĢè¦ģ è§£éĩĬ çļĦ ï¼Į è¯· éĢļè¿ĩ äº§åĵģ ä¸ŃçļĦ åıį é¦ Ī æĸ¹å¼ı ä¸İ å¼Ģåıĳ èĢħ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åıĸå¾Ĺ èģĶç³» ãĢĤ Ġ å¦Ĥ æĤ¨ ä¸įåĲĮ æĦı æľ¬ åįıè®® æĪĸ åħ¶ ä¸ŃçļĦ ä»»ä½ķ æĿ¡ æ¬¾ çļĦ ï¼Į æĤ¨ åºĶ åģľæŃ¢ ä½¿çĶ¨ æĻ ´ éĽ ¨ ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok )){ _, _-> run { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Editor Ġ= ĠSun Rain Application . settings Preference . edit () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Editor . put Boolean (" welcome ", false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Editor . apply () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" æĤ¨ åı¯ä»¥åľ¨ åħ³äºİ é¡µ åĨį æ¬¡ æŁ¥çľĭ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button (" éĢĢåĩº "){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_, _-> run { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Set . finish All Activities () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( weather ToolBar ) ĊĠĠĠĠĠĠĠ Ġsupport ActionBar ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Display Home As Up Enabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Home As Up Indicator ( R . drawable . baseline _ location _ city _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġdrawer Layout . add Drawer Listener ( object : Drawer Layout . Drawer Listener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Opened ( drawer View : ĠView ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Slide ( drawer View : ĠView , Ġslide Offset : ĠFloat ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer StateChanged ( newState : ĠInt ) Ġ{} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Drawer Closed ( drawer View : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġget System Service ( Context . INPUT _ METHOD _ SERVICE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . hide Soft Input From Window ( drawer View . window Token , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInput Method Manager . HIDE _ NOT _ ALWAYS ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġif ( viewModel . location Lng . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . location Lng Ġ= Ġintent . getString Extra (" location _ lng ") ?: "" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( viewModel . location Lat . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . location Lat Ġ= Ġintent . getString Extra (" location _ lat ") ?: "" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( viewModel . place Name . isEmpty ()){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠviewModel . place Name Ġ= Ġintent . getString Extra (" place _ name ") ?: "" ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// live Ġdata ĊĠĠĠĠĠĠĠ ĠviewModel . weather LiveData . observe ( this , ĠObserver { Ġresult -> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġweather Ġ= Ġresult . get OrNull () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( weather != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Weather Info ( weather ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" æĹłæ³ķ èİ·åıĸ å¤© æ°Ķ ä¿¡æģ¯ åķ ¦ ï¼ģ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . exception OrNull ()?. printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġswipe Refresh . is Refresh ing Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġswipe Refresh . setColor Scheme Resources ( R . color . blue 5 0 0 ) ĊĠĠĠĠĠĠĠ Ġrefresh Weather () ĊĠĠĠĠĠĠĠ Ġswipe Refresh . setOn Refresh Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Weather () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( swipe Refresh ," å·² åıĳéĢģ åĪ·æĸ° ", Snackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif ( Sun Rain Application . settings Preference . getBoolean (" title _ refresh _ switch ", false )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġweather ToolBar . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrefresh Weather () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( swipe Refresh ," å·² åıĳéĢģ åĪ·æĸ° ", Snackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ Ġ// set ĊĠĠĠĠĠĠĠ ĠActivity Set . remove Activity ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen ( item . itemId ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . R . id . home Ġ-> Ġdrawer Layout . open Drawer ( Gravity Compat . START ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . CO VID Explorer Ġ-> { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcov id Intent Ġ= ĠIntent ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠC ov id Special :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( covid Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . settings Icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Intent Ġ= ĠIntent ( this , Settings Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( settings Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . about Icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabout Intent Ġ= ĠIntent ( this , About Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( about Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . share Icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsend Intent : ĠIntent Ġ= ĠIntent (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaction Ġ= ĠIntent . ACTION _ SEND ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( Intent . EXTRA _ TEXT , Ġ" æĪĳ æŃ£åľ¨ ä½¿çĶ¨ æĻ ´ éĽ ¨ ï¼Į è¿Ļä¸ª APP å¾Ī å¥½ çĶ¨ ï¼Į åı¯ä»¥ çľĭ å¤© æ°Ķ é¢Ħ æĬ¥ ï¼Į \ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å®ĥçļĦ ä¸ĭè½½ åľ°åĿĢ æĺ¯ ï¼ļ https :// blue bon net 2 7 . g itee . io /") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtype Ġ= Ġ" text / plain " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Intent Ġ= ĠIntent . create Chooser ( send Intent , Ġ" æĬĬ ä¸ĭè½½ ç½ĳ åĿĢ åıĳ ç»Ļ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( share Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . exit Icon Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" åĨį è§ģ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Set . finish All Activities () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġmenu Inflater . inflate ( R . menu . toolbar _ menu , menu ) ĊĠĠĠĠĠĠĠ Ġreturn Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Prepare Options Menu ( menu : ĠMenu ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// CO VID ĊĠĠĠĠĠĠĠ Ġval Ġcov id Option Ġ= Ġmenu ?. getItem ( 0 ) ĊĠĠĠĠĠĠĠ Ġcov id Option ?. isVisible Ġ= ĠSun Rain Application . settings Preference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" covid 1 9 _ switch ", true ) ĊĊĠĠĠĠĠĠĠ Ġ// dark Ġtheme ĊĠĠĠĠĠĠĠ Ġif ( is Dark Theme ( this )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsettings Option Ġ= Ġmenu ?. getItem ( 1 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsettings Option ?. icon Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( this , R . drawable . baseline _ settings _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġabout Option Ġ= Ġmenu ?. getItem ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġabout Option ?. icon Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( this , R . drawable . baseline _ sentiment _ satisfied _ alt _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġshare Option Ġ= Ġmenu ?. getItem ( 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Option ?. icon Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( this , R . drawable . baseline _ share _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexit Option Ġ= Ġmenu ?. getItem ( 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexit Option ?. icon Ġ= ĠContext Compat ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. get Drawable ( this , R . drawable . baseline _ power _ settings _ new _ white _ 2 4 dp ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Prepare Options Menu ( menu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Menu Opened ( feature Id : ĠInt , Ġmenu : ĠMenu ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( Sun Rain Application . settings Preference . getBoolean (" others _ icon _ menu ", true )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( menu . java Class . simple Name . equals (" Menu Builder ", false )){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmethod Ġ= Ġmenu . java Class . getDeclared Method (" set Optional Icons Visible ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBoolean :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . is Accessible Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmethod . invoke ( menu , true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : Exception ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Menu Opened ( feature Id , Ġmenu ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ·æĸ° å¤© æ°Ķ ï¼Į åĪ©çĶ¨ ç»ı çº ¬ åº¦ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġrefresh Weather (){ ĊĠĠĠĠĠĠĠ ĠviewModel . refresh Weather ( viewModel . location Lng , viewModel . location Lat ) ĊĠĠĠĠĠĠĠ Ġswipe Refresh . is Refresh ing Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ ä¸»è¦ģ çļĦ åĪ·æĸ° å¤© æ°Ķ åĩ½æķ° ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Weather Info ( weather : ĠWeather ){ ĊĊĠĠĠĠĠĠĠ Ġ// å¤© æ°Ķ éĢļçŁ¥ é¢ĳ éģĵ ĊĠĠĠĠĠĠĠ Ġval Ġmanager Ġ= Ġget System Service ( Context . NOTIFICATION _ SERVICE ) Ġas ĠNotification Manager ĊĠĠĠĠĠĠĠ Ġif ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchannel Ġ= ĠNotification Channel (" sun _ rain _ realtime "," åį³ æĹ¶ å¤© æ°Ķ ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠNotification Manager . IMPORT ANCE _ LOW ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . create Notification Channel ( channel ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// èİ·åıĸ ViewModel ä¸ŃçļĦ æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġreal time Ġ= Ġweather . realtime ĊĠĠĠĠĠĠĠ Ġval Ġdaily Ġ= Ġweather . daily ĊĠĠĠĠĠĠĠ Ġval Ġresponse For Realtime Ġ= Ġweather . realtime Response ĊĠĠĠĠĠĠĠ Ġval Ġwind Return Ġ= Ġweather . wind ĊĠĠĠĠĠĠĠ Ġval Ġhourly Return Ġ= Ġweather . hourly ĊĠĠĠĠĠĠĠ Ġval Ġmin ut ely Return Ġ= Ġweather . min ut ely ĊĠĠĠĠĠĠĠ Ġval Ġserver Time Ġ= Ġresponse For Realtime . getServer Time () ĊĠĠĠĠĠĠĠ Ġval Ġserver Time Text Ġ= ĠviewModel . change UNIX In toString ( server Time ) ĊĊĠĠĠĠĠĠĠ Ġ// ToolBar Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġinit ToolBar Basic ( viewModel . place Name ," $ server Time Text Ġ${ resources . getString ( R . string . refresh )} ") ĊĊĠĠĠĠĠĠĠ Ġ// now . xml Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Temp Text Ġ= Ġ"${ realtime . temperature . toInt ()} Â° " ĊĠĠĠĠĠĠĠ Ġcurrent Temperature . text Ġ= Ġcurrent Temp Text ĊĠĠĠĠĠĠĠ Ġcurrent Sky . text Ġ= Ġget Sky ( realtime . sky con ). info ĊĠĠĠĠĠĠĠ Ġval Ġcurrent PM 2 5 Text Ġ= Ġresources . getString ( R . string . air Index )+" Ġ${ realtime . air Quality . a qi . chn . toInt () }" ĊĠĠĠĠĠĠĠ Ġcurrent AQ I . text Ġ= Ġcurrent PM 2 5 Text ĊĠĠĠĠĠĠĠ Ġval Ġcurrent AQ ID esc In for Ġ= Ġreal time . air Quality . description . chn ĊĠĠĠĠĠĠĠ Ġcurrent AQ ID esc . text Ġ= Ġ" Ġ$ current AQ ID esc In for " ĊĊĠĠĠĠĠĠĠ Ġ// è¿Ļ è¡Į ä»£çłģ æĺ¯ æµĭè¯ķ å¤© æ°Ķ åĬ¨æĢģ èĥĮæĻ¯ çļĦ ĊĠĠĠĠĠĠĠ Ġ// now Animation . change Weather ( Weather Util . Weather Type . th under ) ĊĠĠĠĠĠĠĠ Ġnow Animation . change Weather ( get Sky An i ( realtime . sky con )) ĊĠĠĠĠĠĠĠ Ġ// middle Rain y , heavy Rain y , fog gy , all Ġsnow , all Ġrest ĊĊĠĠĠĠĠĠĠ Ġ// now . xml Ġ åĬ¨æĢģ èĥĮæĻ¯ ĊĠĠĠĠĠĠĠ Ġval Ġfest ival Background Value Ġ= ĠSun Rain Application . settings Preference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" fest ival _ bg _ switch ", true ) ĊĠĠĠĠĠĠĠ Ġval Ġorigin Background Ġ= Ġ( get Sky ( realtime . sky con ). bg ) ĊĠĠĠĠĠĠĠ Ġif ( fest ival Background Value ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . setBackground Resource ( change Background By Hours ( origin Background ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, judge TimeIn Day ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdrawer Layout . setBackground Resource ( origin Background ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// progressbar Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġinit ProgressBar ( daily , server Time Text ) ĊĊĠĠĠĠĠĠĠ Ġ// forecast . xml Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġforecast Desc . text Ġ= Ġ" æŃ¤ åĪ» å¤© æ°Ķ " Ġ+ Ġweather . realtime . life Index . com fort . desc Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ ç´ « å¤ĸ çº¿ " Ġ+ Ġweather . realtime . life Index . ultr av io let . desc Ċ // ĠĠĠĠĠĠĠ Ġforecast Layout . removeAll Views () ĊĠĠĠĠĠĠĠ Ġval Ġdays Ġ= Ġdaily . sky con Sum . size ĊĊĠĠĠĠĠĠĠ Ġval Ġlist High Ġ= ĠArrayList < Entry >() ĊĠĠĠĠĠĠĠ Ġval Ġlist Low Ġ= ĠArrayList < Entry >() ĊĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġ 0 Ġuntil Ġdays ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemperature Ġ= Ġdaily . temperature [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist High . add ( Entry ( i . toFloat (), temperature . max )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Low . add ( Entry ( i . toFloat (), temperature . min )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// æĸ°çļĦ é¢Ħ æĬ¥ recyclerview ĊĠĠĠĠĠĠĠ Ġval Ġday For cast LayoutManager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġday For cast LayoutManager . orientation Ġ= ĠLinearLayoutManager . VERTICAL ĊĠĠĠĠĠĠĠ Ġforecast Recycler Layout . layout Manager Ġ= Ġday For cast LayoutManager ĊĊĠĠĠĠĠĠĠ Ġval Ġday Forecast Adapter Ġ= ĠDay Forecast Adapter ( init Day Forecast Items ( daily )) ĊĠĠĠĠĠĠĠ Ġday Forecast Adapter . setOn ItemClickListener ( object Ġ: ĠDay Forecast Adapter . On ItemClickListener { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Item Click ( view : ĠView , Ġposition : ĠInt , weekday : String ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdaily Info Intent Ġ= ĠIntent ( this @ Weather Activity , Daily in for Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Info Intent . putExtra (" weather ", Gson (). toJson ( weather )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Info Intent . putExtra (" day Index ", position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdaily Info Intent . putExtra (" weekday ", weekday ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( daily Info Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġforecast Recycler Layout . adapter Ġ= Ġday Forecast Adapter ĊĊĠĠĠĠĠĠĠ Ġ// å¤© æ°Ķ éĢļçŁ¥ æŃ£ æĸĩ ĊĠĠĠĠĠĠĠ Ġval Ġr T notification Ġ= Ġshow Realtime Weather Notification ( weather ) ĊĠĠĠĠĠĠĠ Ġif (! Sun Rain Application . settings Preference . getBoolean (" notification _ c anc ancel _ switch ", false )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġr T notification . flags Ġ= ĠNotification . FLAG _ NO _ CLEAR ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĊĠĠĠĠĠĠĠ Ġif ( Sun Rain Application . settings Preference . getBoolean (" notification _ switch ", false )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . notify ( 1 , r T notification ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . cancel ( 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// temperature Chart ĊĠĠĠĠĠĠĠ Ġ// åı¯ è§ģ æĢ§ ĊĠĠĠĠĠĠĠ Ġval Ġis Forecast Chart Visible Ġ= ĠSun Rain Application . settings Preference ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. getBoolean (" forecast _ chart _ switch ", false ) ĊĠĠĠĠĠĠĠ Ġif ( is Forecast Chart Visible ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Chart Card . visibility Ġ= ĠVIS IBLE ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtemp Chart Card . visibility Ġ= ĠG ONE ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// æľĢ é«ĺ æ¸ © åº¦ ĊĠĠĠĠĠĠĠ Ġval Ġset High Ġ= ĠLine DataSet ( list High ," High ") ĊĠĠĠĠĠĠĠ Ġset High . mode Ġ= ĠLine DataSet . Mode . C UB IC _ BE ZI ER ĊĠĠĠĠĠĠĠ Ġset High . color Ġ= ĠColor . parse Color ("# D 5 0 0 0 0 ") ĊĠĠĠĠĠĠĠ Ġset High . value Text Size Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠ Ġset High . lineWidth Ġ= Ġ 3 f ĊĊĠĠĠĠĠĠĠ Ġ// æľĢ ä½İ æ¸ © åº¦ ĊĠĠĠĠĠĠĠ Ġval Ġset Low Ġ= ĠLine DataSet ( list Low ," Low ") ĊĠĠĠĠĠĠĠ Ġset Low . mode Ġ= ĠLine DataSet . Mode . C UB IC _ BE ZI ER ĊĠĠĠĠĠĠĠ Ġset Low . color Ġ= ĠColor . parse Color ("# 0 0 9 1 EA ") ĊĠĠĠĠĠĠĠ Ġset Low . value Text Size Ġ= Ġ 1 2 f ĊĠĠĠĠĠĠĠ Ġset Low . lineWidth Ġ= Ġ 3 f ĊĊĠĠĠĠĠĠĠ Ġ// æ·»åĬł æķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġdata Sets Ġ= ĠArrayList < IL ine DataSet >() ĊĠĠĠĠĠĠĠ Ġdata Sets . add ( set High ) ĊĠĠĠĠĠĠĠ Ġdata Sets . add ( set Low ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Temp Ġ= ĠLine Data ( data Sets ) ĊĠĠĠĠĠĠĠ Ġtemperature Chart . data Ġ= Ġdata Temp ĊĊĠĠĠĠĠĠĠ Ġ// æĬ ĺ çº¿ åĽ¾ èĥĮæĻ¯ ĊĠĠĠĠĠĠĠ Ġtemperature Chart . xAxis . set Draw Grid Lines ( false ) ĊĠĠĠĠĠĠĠ Ġtemperature Chart . axis Left . set Draw Grid Lines ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// åı³ ä¸ĭ è§Ĵ èĭ± æĸĩåŃĹ æ¯į ĊĠĠĠĠĠĠĠ Ġtemperature Chart . description . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// åĽ¾ ä¾ĭ ĊĠĠĠĠĠĠĠ Ġtemperature Chart . legend . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// x è½´ ĊĠĠĠĠĠĠĠ Ġval Ġx Axis Ġ= Ġtemperature Chart . xAxis ĊĠĠĠĠĠĠĠ Ġx Axis . position Ġ= ĠX Axis . X Axis Position . BOTTOM ĊĠĠĠĠĠĠĠ Ġx Axis . gran ularity Ġ= Ġ 1 F Ġ// Ġ åĬł ä¸Ĭ è¿Ļä¸ª å°± ä¸įä¼ļ åĩºçİ° åĿĲæłĩ çĤ¹ ä¸į å¯¹åºĶçļĦ æĥħåĨµ ï¼Į ä½Ĩ æĪĳ ä¸į çŁ¥éģĵ è¿Ļæĺ¯ å¹² åķ ¥ çļĦ ĊĠĠĠĠĠĠĠ Ġx Axis . value Formatter Ġ= ĠTemperature Chart X Axis Formatter () ĊĊĠĠĠĠĠĠĠ Ġ// y è½´ ĊĠĠĠĠĠĠĠ Ġtemperature Chart . axis Right . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġtemperature Chart . axis Left . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġ// ä¸į åħģè®¸ è§¦ æĳ ¸ ĊĠĠĠĠĠĠĠ Ġtemperature Chart . set Touch Enabled ( false ) ĊĊĠĠĠĠĠĠĠ Ġ// life index . xml Ġæķ°æį® æ³¨ åħ¥ ĊĠĠĠĠĠĠĠ Ġval Ġlife Index Ġ= Ġdaily . life Index ĊĠĠĠĠĠĠĠ Ġcold Risk Text . text Ġ= Ġlife Index . cold Risk [ 0 ]. desc Ġ// ä»Ĭå¤© æķ°æį® å°±æĺ¯ ä¸Ģ ç»Ħ æķ°æį® éĩĮ çļĦ ç¬¬ä¸Ģä¸ª ĊĠĠĠĠĠĠĠ Ġd ress ing Text . text Ġ= Ġlife Index . d ress ing [ 0 ]. desc ĊĠĠĠĠĠĠĠ Ġultr av io let Text . text Ġ= Ġlife Index . ultr av io let [ 0 ]. desc ĊĠĠĠĠĠĠĠ Ġcar W ashing Text . text Ġ= Ġlife Index . car W ashing [ 0 ]. desc ĊĠĠĠĠĠĠĠ Ġcomfort Text . text Ġ= Ġlife Index . com fort [ 0 ]. desc ĊĠĠĠĠĠĠĠ Ġwind Index Text Direction . text Ġ= Ġ"${ get Wind Direction ( wind Return . direction )} é£İ " ĊĠĠĠĠĠĠĠ Ġwind Index Text Level . text Ġ= Ġ" é£İ åĬĽ ${ get Wind Speed ( wind Return . speed )} çº§ " ĊĊĠĠĠĠĠĠĠ Ġ// life index . xml ĠCL ick ĊĠĠĠĠĠĠĠ ĠC old Risk Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( life Index . cold Risk [ 0 ]. desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" æĺİ å¤© çļĦ ï¼ļ Ġ${ life Index . cold Risk [ 1 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĲİ å¤© çļĦ ï¼ļ Ġ${ life Index . cold Risk [ 2 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å¤§ åĲİ å¤© ï¼ļ Ġ${ life Index . cold Risk [ 3 ]. desc }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġd ress ing Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( life Index . d ress ing [ 0 ]. desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" æĺİ å¤© çļĦ ï¼ļ Ġ${ life Index . d ress ing [ 1 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĲİ å¤© çļĦ ï¼ļ Ġ${ life Index . d ress ing [ 2 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å¤§ åĲİ å¤© ï¼ļ Ġ${ life Index . d ress ing [ 3 ]. desc }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġultr av io let Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( life Index . ultr av io let [ 0 ]. desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" æĺİ å¤© çļĦ ï¼ļ Ġ${ life Index . ultr av io let [ 1 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĲİ å¤© çļĦ ï¼ļ Ġ${ life Index . ultr av io let [ 2 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å¤§ åĲİ å¤© ï¼ļ Ġ${ life Index . ultr av io let [ 3 ]. desc }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcar W ashing Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( life Index . car W ashing [ 0 ]. desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" æĺİ å¤© çļĦ ï¼ļ Ġ${ life Index . car W ashing [ 1 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĲİ å¤© çļĦ ï¼ļ Ġ${ life Index . car W ashing [ 2 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å¤§ åĲİ å¤© ï¼ļ Ġ${ life Index . car W ashing [ 3 ]. desc }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġcomfort Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( life Index . com fort [ 0 ]. desc ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" æĺİ å¤© çļĦ ï¼ļ Ġ${ life Index . com fort [ 1 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åĲİ å¤© çļĦ ï¼ļ Ġ${ life Index . com fort [ 2 ]. desc }\ n "+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å¤§ åĲİ å¤© ï¼ļ Ġ${ life Index . com fort [ 3 ]. desc }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġwind Daily Item . setOnClickListener Ġ{ Ġview -> ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( view ," è¯· åīį å¾Ģ å¯¹åºĶ æĹ¥æľŁ é¡µ æŁ¥çľĭ ", Snackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġweather Layout . visibility Ġ= ĠVIS IBLE ĊĊĠĠĠĠĠĠĠ Ġ// air . xml ĊĠĠĠĠĠĠĠ Ġinit Air Pie ( weather ) ĊĊĠĠĠĠĠĠĠ Ġ// ç©º æ°Ķ é¡µéĿ¢ ĊĠĠĠĠĠĠĠ Ġair Card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġair Activity Intent Ġ= ĠIntent ( this , Air Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġair Activity Intent . putExtra (" weather ", Gson (). toJson ( weather )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( air Activity Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// åĪĨ éĴŁ éĻį æ°´ é¡µéĿ¢ ĊĠĠĠĠĠĠĠ Ġmin ut ely Card . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmin ut ely Activity Intent Ġ= ĠIntent ( this , Min ut ely Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ut ely Activity Intent . putExtra (" weather ", Gson (). toJson ( weather )) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( min ut ely Activity Intent ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// hourly Ġæķ°æį® ĊĠĠĠĠĠĠĠ Ġval Ġlayout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġlayout Manager . orientation Ġ= ĠLinearLayoutManager . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġhourly Layout . layout Manager Ġ= Ġlayout Manager ĊĠĠĠĠĠĠĠ Ġval Ġadapter Ġ= ĠHour ly Adapter ( init Hour ly ItemList ( hourly Return )) ĊĠĠĠĠĠĠĠ Ġhourly Layout . adapter Ġ= Ġadapter ĊĊĠĠĠĠĠĠĠ Ġhourly Desc Text . text Ġ= Ġhourly Return . description ĊĊĠĠĠĠĠĠĠ Ġ// åĪĨ éĴŁ éĻį æ°´ ĊĠĠĠĠĠĠĠ Ġval Ġminute LayoutManager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠ Ġminute LayoutManager . orientation Ġ= ĠLinearLayoutManager . HORIZONTAL ĊĠĠĠĠĠĠĠ Ġmin ut ely Layout . layout Manager Ġ= Ġminute LayoutManager ĊĠĠĠĠĠĠĠ Ġval Ġminute Adapter Ġ= ĠMin ut ely Adapter ( init Min ut ely ItemList ( min ut ely Return )) ĊĠĠĠĠĠĠĠ Ġmin ut ely Layout . adapter Ġ= Ġminute Adapter ĊĊĠĠĠĠĠĠĠ Ġmin ut ely Desc Text . text Ġ= Ġmin ut ely Return . description ĊĊĠĠĠĠĠĠĠ Ġ// é¦ĸé¡µ åĪĨ éĴŁ éĻį æ°´ ĊĠĠĠĠĠĠĠ Ġmin ut ely Card Desc Icon HS . setImage Resource ( transfer Data 1 Minute To Icon ( get Rain Data 1 Minute ( min ut ely Return ))) ĊĠĠĠĠĠĠĠ Ġmin ut ely Card Icon . setImage Resource ( minute Adapter . get Rain Icon Desc ( get Rain Data 1 Minute ( min ut ely Return ))) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ ä¸» Ġtoolbar ĠçļĦ æłĩé¢ĺ åĴĮ åī¯ æłĩé¢ĺ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit ToolBar Basic ( title : ĠString , Ġsub Title : String ){ ĊĠĠĠĠĠĠĠ Ġweather ToolBar . title Ġ= Ġtitle ĊĠĠĠĠĠĠĠ Ġweather ToolBar . subtitle Ġ= Ġsub Title ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĺ¯ æ·± èī² æ¨¡å¼ı ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Dark Theme ( context : Context ): Boolean { ĊĠĠĠĠĠĠĠ Ġval Ġflag Ġ= Ġcontext . resources . configuration . ui Mode Ġand ĠConfiguration . UI _ MODE _ N IGHT _ MASK ĊĠĠĠĠĠĠĠ Ġreturn Ġflag Ġ== ĠConfiguration . UI _ MODE _ N IGHT _ YES ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¡« åħħ å°ı æĹ¶ å¤© æ°Ķ çļĦæķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Hour ly ItemList ( hourly : Hour ly Response . Result . Hour ly ): ArrayList < Hour ly Item >{ ĊĠĠĠĠĠĠĠ Ġval Ġhourly Items Ġ= ĠArrayList < Hour ly Item >( hourly . temperature . size ) ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġhourly . temperature . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsky con Ġ= Ġhourly . sky con [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemperature Ġ= Ġhourly . temperature [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwind Ġ= Ġhourly . wind [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġhourly Items . add ( Hour ly Item ( sky con , temperature , wind )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġhourly Items ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¡« åħħ åĪĨ éĴŁ éĻį æ°´ æķ°æį® ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Min ut ely ItemList ( min ut ely : Min ut ely Response . Result . Min ut ely ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ: ArrayList < Min ut ely Item >{ ĊĠĠĠĠĠĠĠ Ġval Ġmin ut ely Items Ġ= ĠArrayList < Min ut ely Item >( min ut ely . prec ip itation . size ) ĊĠĠĠĠĠĠĠ Ġ// If Ġyou Ġwant Ġto Ġchange Ġthe Ġtype Ġof Ġpre cip itation , Ġplease Ġchange Ġthe Ġtwo Ġparams ĊĠĠĠĠĠĠĠ Ġfor ( j Ġin Ġmin ut ely . prec ip itation . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġminute Description Ġ= Ġmin ut ely . prec ip itation [ j ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġmin ut ely Items . add ( Min ut ely Item ( minute Description )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġmin ut ely Items ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Rain Data 1 Minute ( min ut ely : ĠMin ut ely Response . Result . Min ut ely ): Float { ĊĠĠĠĠĠĠĠ Ġreturn Ġmin ut ely . prec ip itation [ 0 ] ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtransfer Data 1 Minute To Icon ( prec ip itation : Float ): Int Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Dark Theme Ġ= Ġis Dark Theme ( this ) ĊĠĠĠĠĠĠĠ Ġval Ġis Positive Ġ= Ġpre cip itation Ġ> Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( is Dark Theme Ġ&& Ġis Positive ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . baseline _ sentiment _ dis satisfied _ white _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} else Ġif (! is Dark Theme Ġ&& Ġis Positive ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . baseline _ sentiment _ dis satisfied _ black _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( is Dark Theme Ġ&& Ġ! is Positive ){ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . baseline _ sentiment _ satisfied _ alt _ white _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . baseline _ sentiment _ satisfied _ alt _ black _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¡« åħħ ç©º æ°Ķ æĮĩ æķ° çļĦæķ°æį® ï¼Į ç»ĺ åĽ¾ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Air Pie ( weather : ĠWeather ){ ĊĠĠĠĠĠĠĠ Ġ// air . xml Ġ æķ° åĪĹ åĨĻåħ¥ æķ°æį® ĊĠĠĠĠĠĠĠ Ġair Desc . text Ġ= Ġweather . realtime . air Quality . description . chn ĊĊĠĠĠĠĠĠĠ Ġair Desc Text Half . text Ġ= Ġweather . realtime . air Quality . description . chn ĊĊĠĠĠĠĠĠĠ Ġval Ġa q Ġ= Ġweather . realtime . air Quality ĊĊĠĠĠĠĠĠĠ Ġair Desc Half AQ I . text Ġ= Ġa q . a qi . chn . toInt (). toString () ĊĠĠĠĠĠĠĠ Ġair Desc Half AQ I Progress . progress Ġ= Ġa q . a qi . chn . toInt () ĊĊĠĠĠĠĠĠĠ Ġpm 2 5 Num . text Ġ= Ġ"${ aq . pm 2 5 } ĠÎ¼ g / m 3 " ĊĠĠĠĠĠĠĠ Ġpm 1 0 Num . text Ġ= Ġ"${ aq . pm 1 0 } ĠÎ¼ g / m 3 " ĊĠĠĠĠĠĠĠ Ġno 2 Num . text Ġ= Ġ"${ aq . no 2 } ĠÎ¼ g / m 3 " ĊĠĠĠĠĠĠĠ Ġo 3 Num . text Ġ= Ġ"${ aq . o 3 } ĠÎ¼ g / m 3 " ĊĠĠĠĠĠĠĠ Ġso 2 Num . text Ġ= Ġ"${ aq . so 2 } ĠÎ¼ g / m 3 " ĊĠĠĠĠĠĠĠ Ġco Num . text Ġ= Ġ"${ aq . co } Ġmg / m 3 " ĊĊĠĠĠĠĠĠĠ Ġpm 2 5 Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" PM Ġ 2 . 5 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" ç»Ĩ é¢ Ĺ ç² Ĵ çī© åıĪ ç§° ç»Ĩ ç² Ĵ ãĢģ ç»Ĩ é¢ Ĺ ç² Ĵ ãĢģ PM 2 . 5 ãĢĤ ç»Ĩ é¢ Ĺ ç² Ĵ çī© æĮĩ çİ¯å¢ĥ ç©º æ°Ķ ä¸Ń ç©º æ°Ķ åĬ¨ åĬĽ åŃ¦ å½ĵ éĩı çĽ´ å¾Ħ å°ı äºİ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çŃīäºİ Ġ 2 . 5 Ġ å¾® ç±³ çļĦ é¢ Ĺ ç² Ĵ çī© ãĢĤ å®ĥ èĥ½ è¾ĥ éķ¿ æĹ¶éĹ´ æ Ĥ¬ æµ ® äºİ ç©º æ°Ķ ä¸Ń ï¼Į åħ¶ åľ¨ ç©º æ°Ķ ä¸Ń åĲ« éĩı æµ ĵ åº¦ è¶Ĭ é«ĺ ï¼Į å°± ä»£è¡¨ ç©º " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æ°Ķ æ± ¡ æŁĵ è¶Ĭ ä¸¥ éĩį ãĢĤ èĻ½çĦ¶ PM 2 . 5 åıªæĺ¯ åľ° çĲĥ å¤§ æ°Ķ æĪĲ åĪĨ ä¸Ń åĲ« éĩı å¾Ī å°ĳ çļĦ ç»Ħ åĪĨ ï¼Į ä½Ĩ å®ĥ å¯¹ ç©º æ°Ķ è´¨ éĩı åĴĮ èĥ½ è§ģ åº¦ çŃī " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æľī éĩįè¦ģ çļĦ å½±åĵį ãĢĤ ä¸İ è¾ĥ ç² Ĺ çļĦ å¤§ æ°Ķ é¢ Ĺ ç² Ĵ çī© çĽ¸ æ¯Ķ ï¼Į PM 2 . 5 ç² Ĵ å¾Ħ å°ı ï¼Į éĿ¢ ç§¯ å¤§ ï¼Į æ´» æĢ§ å¼º ï¼Į æĺĵ éĻĦ å¸¦ æľī æ¯ Ĵ ãĢģ æľī " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å®³ çī© è´¨ ï¼Ī ä¾ĭå¦Ĥ ï¼Į éĩį éĩĳ å±ŀ ãĢģ å¾® çĶŁ çī© çŃī ï¼īï¼Į ä¸Ķ åľ¨ å¤§ æ°Ķ ä¸ŃçļĦ åģľ çķĻ æĹ¶éĹ´ éķ¿ ãĢģ è¾ĵ éĢģ è·Ŀç¦» è¿ľ ï¼Į åĽł èĢĮ å¯¹ äºº ä½ĵ åģ ¥ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" åº· åĴĮ å¤§ æ°Ķ çİ¯å¢ĥ è´¨ éĩı çļĦ å½±åĵį æĽ´ å¤§ ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpm 1 0 Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" PM Ġ 1 0 ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" åı¯ åĲ ¸ åħ¥ é¢ Ĺ ç² Ĵ çī© ï¼Į éĢļå¸¸ æĺ¯ æĮĩ ç² Ĵ å¾Ħ åľ¨ 1 0 å¾® ç±³ ä»¥ä¸ĭ çļĦ é¢ Ĺ ç² Ĵ çī© ï¼Į åıĪ ç§° PM 1 0 ãĢĤ åı¯ åĲ ¸ åħ¥ é¢ Ĺ ç² Ĵ çī© åľ¨ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çİ¯å¢ĥ ç©º æ°Ķ ä¸Ń æĮģ ç»Ń çļĦæĹ¶éĹ´ å¾Ī éķ¿ ï¼Į å¯¹ äºº ä½ĵ åģ ¥ åº· åĴĮ å¤§ æ°Ķ èĥ½ è§ģ åº¦ çļĦ å½±åĵį éĥ½ å¾Ī å¤§ ãĢĤ éĢļå¸¸ æĿ¥ èĩª åľ¨ æľª éĵ º çļĦ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æ² ¥ éĿĴ ãĢģ æ°´ æ³ ¥ çļĦ è·¯ éĿ¢ ä¸Ĭ è¡Į é© ¶ çļĦ æľº åĬ¨ è½¦ ãĢģ æĿĲ æĸĻ çļĦ çł´ ç¢ İ ç¢ ¾ ç£ ¨ å¤ĦçĲĨ è¿ĩç¨ĭ ä»¥åıĬ è¢« é£İ æī ¬ èµ· çļĦ å° ĺ åľŁ ãĢĤ åı¯ åĲ ¸ åħ¥ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" é¢ Ĺ ç² Ĵ çī© è¢« äºº åĲ ¸ åħ¥ åĲİ ï¼Į ä¼ļ ç§¯ ç´ ¯ åľ¨ åĳ¼ åĲ ¸ ç³»ç»Ł ä¸Ń ï¼Į å¼ķ åıĳ è®¸ å¤ļ çĸ ¾ çĹħ ï¼Į å¯¹ äºº ç±» åį ± å®³ å¤§ ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġo 3 Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" èĩ Ń æ° § ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" å½ĵ äºº ç±» çĶŁæ´» åĮº åĳ¨ è¾¹ çļĦ èĩ Ń æ° § æµ ĵ åº¦ è¶ħè¿ĩ ä¸Ģå®ļ éĻĲ åĢ¼ ï¼Į å°± å°Ĩ éĢł æĪĲ çģ ° çĸ Ĩ åĴĮ åħī åĮĸ åŃ¦ çĥ Ł éĽ ¾ çŃī æ± ¡ æŁĵ ï¼Į ä¸¥ éĩį " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" å½±åĵį æŃ£å¸¸ çĶŁäº§ ä¸İ çĶŁæ´» ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġno 2 Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" äºĮ æ° § åĮĸ æ° ® ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" äºĮ æ° § åĮĸ æ° ® åľ¨ èĩ Ń æ° § çļĦ å½¢ æĪĲ è¿ĩç¨ĭä¸Ń èµ· çĿĢ éĩįè¦ģ ä½ľçĶ¨ ãĢĤ äºº ä¸º äº§çĶŁ çļĦ äºĮ æ° § åĮĸ æ° ® ä¸»è¦ģ æĿ¥ èĩª é«ĺ æ¸ © ç ĩ ĥ çĥ § è¿ĩ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ç¨ĭ çļĦ éĩĬæĶ¾ ï¼Į æ¯Ķå¦Ĥ æľº åĬ¨ è½¦ å°¾ æ°Ķ ãĢģ éĶ ħ çĤ ī åº Ł æ°Ķ çļĦ æİĴ æĶ¾ çŃī ãĢĤ Ġ äºĮ æ° § åĮĸ æ° ® è¿ĺæĺ¯ éħ ¸ éĽ ¨ çļĦ æĪĲ åĽł ä¹ĭ ä¸Ģ ï¼Į æīĢ å¸¦ æĿ¥çļĦ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çİ¯å¢ĥ æķĪ åºĶ å¤ļ ç§į å¤ļ æł· ï¼Į åĮħæĭ¬ ï¼ļ å¯¹ æ¹ ¿ åľ° åĴĮ éĻĨ çĶŁ æ¤ į çī© çī© ç§į ä¹ĭéĹ´ ç« ŀ äºī ä¸İ ç»Ħ æĪĲ åıĺåĮĸ çļĦ å½±åĵį ï¼Į å¤§ æ°Ķ èĥ½ è§ģ åº¦ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çļĦ éĻį ä½İ ï¼Į åľ° è¡¨ æ°´ çļĦ éħ ¸ åĮĸ ãĢģ å¯Į èĲ¥ åħ » åĮĸ ï¼Ī çĶ±äºİ æ°´ ä¸Ń å¯Į åĲ« æ° ® ãĢģ ç£ · çŃī èĲ¥ åħ » çī© èĹ » ç±» å¤§ éĩı ç¹ ģ æ® ĸ èĢĮ å¯¼èĩ´ ç¼º " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æ° § ï¼ī ä»¥åıĬ å¢ŀåĬł æ°´ ä½ĵ ä¸Ń æľī å®³ äºİ é±¼ ç±» åĴĮ åħ¶å®ĥ æ°´ çĶŁ çĶŁ çī© çļĦ æ¯ Ĵ ç´ł åĲ« éĩı ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġso 2 Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" äºĮ æ° § åĮĸ ç¡ « ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" äºĮ æ° § åĮĸ ç¡ « æĺ¯ æľĢ å¸¸ è§ģ ãĢģ æľĢ ç®Ģåįķ ãĢģ æľī åĪ º æ¿Ģ æĢ§ çļĦ ç¡ « æ° § åĮĸ çī© ï¼Į åĮĸ åŃ¦ å¼ı SO 2 ï¼Į æĹł èī² æ°Ķ ä½ĵ ï¼Į å¤§ æ°Ķ ä¸»è¦ģ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æ± ¡ æŁĵ çī© ä¹ĭ ä¸Ģ ãĢĤ 2 0 1 7 å¹´ 1 0 æľĪ 2 7 æĹ¥ ï¼Į ä¸ĸçķĮ åį « çĶŁ ç»Ħç»ĩ åĽ½ éĻħ çĻ Į çĹ ĩ çłĶç©¶ æľº æŀĦ åħ¬ å¸ĥ çļĦ èĩ´ çĻ Į çī© æ¸ħ åįķ åĪĿ æŃ¥ æķ´ " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" çĲĨ åıĤèĢĥ ï¼Į äºĮ æ° § åĮĸ ç¡ « åľ¨ 3 ç±» èĩ´ çĻ Į çī© æ¸ħ åįķ ä¸Ń ãĢĤ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġco Item . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle (" ä¸Ģ æ° § åĮĸ ç¢ ³ ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage (" ä¸Ģ æ° § åĮĸ ç¢ ³ ï¼Ī carbon Ġmon ox ide ï¼īï¼Į ä¸Ģç§į ç¢ ³ æ° § åĮĸ åĲĪ çī© ï¼Į åĮĸ åŃ¦ å¼ı ä¸º CO ï¼Į åĪĨ åŃĲ éĩı ä¸º 2 8 . 0 1 0 1 " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" ï¼Į éĢļå¸¸ çĬ¶ åĨµ ä¸ĭ ä¸º æĺ¯ æĹł èī² ãĢģ æĹł èĩ Ń ãĢģ æĹł åĳ³ çļĦ æ°Ķ ä½ĵ ãĢĤ åħ·æľī æ¯ Ĵ æĢ§ ï¼Į è¾ĥ é«ĺ æµ ĵ åº¦ æĹ¶ èĥ½ ä½¿ äºº åĩºçİ° ä¸įåĲĮ ç¨ĭ åº¦ ä¸Ń " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" æ¯ Ĵ çĹ ĩ çĬ¶ ï¼Į åį ± å®³ äºº ä½ĵ çļĦ èĦĳ ãĢģ å¿ĥ ãĢģ èĤ Ŀ ãĢģ èĤ ¾ ãĢģ èĤ º åıĬ åħ¶ä»ĸ ç»Ħç»ĩ ï¼Į çĶļ èĩ³ çĶµ åĩ» æł· æŃ» äº ¡ ï¼Į ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( getString ( R . string . ok ), Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// air . xml Ġ åĽ¾ ç»ĺ åĪ¶ ĊĠĠĠĠĠĠĠ Ġval Ġdirty Data Ġ= ĠArrayList < Pie Entry >() ĊĠĠĠĠĠĠĠ Ġdirty Data . add ( Pie Entry ( aq . a qi . chn , "" )) ĊĠĠĠĠĠĠĠ Ġdirty Data . add ( Pie Entry ( 6 0 0 - aq . a qi . chn , "" )) ĊĠĠĠĠĠĠĠ Ġval Ġdirty DataSet Ġ= ĠP ie DataSet ( dirty Data ," ") ĊĊĠĠĠĠĠĠĠ Ġ// air . xml Ġ ç¾İ åĮĸ ĊĠĠĠĠĠĠĠ Ġdirty DataSet . set Colors ( Color . parse Color ( viewModel . get AQ I Color ( aq . a qi . chn . toInt ())), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠColor . parse Color ("# eeee ee ")) ĊĠĠĠĠĠĠĠ Ġdirty DataSet . value Text Size Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġair Pie . hole Radius Ġ= Ġ 9 0 f ĊĠĠĠĠĠĠĠ Ġair Pie . description . isEnabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġair Pie . transparent Circle Radius Ġ= Ġ 0 f ĊĠĠĠĠĠĠĠ Ġair Pie . center Text Ġ= Ġa q . a qi . chn . toInt (). toString () ĊĠĠĠĠĠĠĠ Ġair Pie . set Center Text Size ( 2 0 f ) ĊĊĠĠĠĠĠĠĠ Ġif ( is Dark Theme ( Sun Rain Application . context )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġair Pie . set Center TextColor ( Color . WHITE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġair Pie . set Hole Color ( Color . parse Color ("# ff 3 f 3 f 3 f ")) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġair Pie . set Center TextColor ( Color . BLACK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġair Pie . set Hole Color ( Color . WHITE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġair Pie . animate XY ( 4 0 0 0 , 4 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġair Pie . legend . isEnabled Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ Ġval Ġdirty Data Use Ġ= ĠP ie Data ( dirty DataSet ) ĊĠĠĠĠĠĠĠ Ġair Pie . data Ġ= Ġdirty Data Use ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ å¤© æ°Ķ éĢļçŁ¥ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġshow Realtime Weather Notification ( weather : ĠWeather ): Notification { ĊĠĠĠĠĠĠĠ Ġval Ġsky Con Today Ġ= Ġget Sky ( weather . daily . sky con Sum [ 0 ]. value ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġicon Day Or Night Ġ= ĠR . drawable . baseline _ wb _ sun ny _ black _ 2 4 dp ĊĊĠĠĠĠĠĠĠ Ġif ( is Dark Theme ( this )){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġicon Day Or Night Ġ= ĠR . drawable . baseline _ n ights _ st ay _ white _ 2 4 dp ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= Ġ ĠNotification Compat . Builder ( this ," sun _ rain _ realtime ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. setContent Title ("${ weather . realtime . temperature . toInt ()} Â° ${ get Sky ( weather . realtime . sky con ). info }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Small Icon ( icon Day Or Night ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Large Icon ( Bitmap Factory . decode Resource ( resources , sky Con Today . weather _ icon )) ĊĊĠĠĠĠĠĠĠ Ġ// val Ġpreferences Notification Long Ġ= Ġget SharedPreferences (" settings ", 0 ) ĊĠĠĠĠĠĠĠ Ġval Ġis More info Ġ= ĠSun Rain Application . settings Preference . getBoolean (" notification _ more info _ switch ", false ) ĊĊĠĠĠĠĠĠĠ Ġif ( is More info ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . setStyle ( Notification Compat . Big TextStyle (). big Text (" AQ I :${ weather . realtime . air Quality . a qi . chn }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġweather . hourly . description ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ)) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotification . setContent Text (" AQ I :${ weather . realtime . air Quality . a qi . chn } Ġ${ weather . realtime . air Quality . description . chn }") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġnotification . build () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġ åĪ©çĶ¨ ä¸īä¸ª æĹ¶éĹ´ çĤ¹ å¾ĹåĪ° è¿Ľ åº¦ æĿ¡ è¿Ľ åº¦ Ġx / 1 0 0 ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Sun Progress From Times ( sun R ise Time : String , sun Set Time : String , current : String ): Int { ĊĠĠĠĠĠĠĠ Ġval Ġtime Formatter Ġ= ĠSimpleDateFormat (" HH : mm ", Locale . getDefault ()) ĊĊĠĠĠĠĠĠĠ Ġval Ġsun R ise Ġ= Ġtime Formatter . parse ( sun R ise Time ) ĊĠĠĠĠĠĠĠ Ġval Ġsun Set Ġ= Ġtime Formatter . parse ( sun Set Time ) ĊĠĠĠĠĠĠĠ Ġval ĠcurrentTime Ġ= Ġtime Formatter . parse ( current ) ĊĊĠĠĠĠĠĠĠ Ġif ( sun R ise Ġ== Ġnull Ġ|| Ġsun Set Ġ== Ġnull Ġ|| ĠcurrentTime Ġ== Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġ 0 ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġset Sub R ise Ġ= Ġ( sun Set . time Ġ- Ġsun R ise . time ). toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġcurrent Sub R ise Ġ= Ġ( currentTime . time Ġ- Ġsun R ise . time ). toDouble () ĊĊĠĠĠĠĠĠĠ Ġreturn Ġ(( current Sub R ise / set Sub R ise )* 1 0 0 ). toInt () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪĿå§ĭåĮĸ æĹ¥ åįĩ æĹ¥ èĲ½ è¿Ľ åº¦ æĿ¡ ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit ProgressBar ( daily : ĠDaily Response . Daily , server Time Text : String ){ ĊĠĠĠĠĠĠĠ Ġ// Sun R ise ĠProgress Bar ĊĠĠĠĠĠĠĠ Ġval Ġsun R ise Time Ġ= Ġdaily . astro [ 0 ]. sun rise . ri set ime ĊĠĠĠĠĠĠĠ Ġval Ġsun Set Time Ġ= Ġdaily . astro [ 0 ]. sun set . set time ĊĊĠĠĠĠĠĠĠ Ġsun R ise Time Progress . text Ġ= Ġ" âĨ ĳ $ sun R ise Time " ĊĠĠĠĠĠĠĠ Ġsun Set Time Progress . text Ġ= Ġ"$ sun Set Time âĨ ĵ " ĊĊĠĠĠĠĠĠĠ Ġval Ġresult Ġ= Ġget Sun Progress From Times ( sun R ise Time , sun Set Time , server Time Text ) ĊĠĠĠĠĠĠĠ Ġsun Time ProgressBar . progress Ġ= Ġresult ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġjudge TimeIn Day (): Int { ĊĠĠĠĠĠĠĠ Ġval Ġdate Ġ= ĠDate () ĊĠĠĠĠĠĠĠ Ġval Ġdf Ġ= ĠSimpleDateFormat (" HH ", ĠLocale . getDefault ()) ĊĠĠĠĠĠĠĠ Ġval Ġhours Ġ= ĠInteger . parseInt ( df . format ( date )) ĊĊĠĠĠĠĠĠĠ Ġreturn Ġif ( hours Ġin Ġ 0 .. 5 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 0 ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( hours Ġin Ġ 6 .. 1 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 1 ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( hours Ġ== Ġ 1 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 3 ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( hours Ġin Ġ 1 3 .. 1 8 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠ 4 ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠ 5 ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġchange Background By Hours ( origin Background Res Id : Int , hour : Int ): Int { ĊĠĠĠĠĠĠĠ Ġreturn Ġif ( hour Ġ== Ġ 4 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( origin Background Res Id Ġ== ĠR . drawable . bg _ sun ny day _ new ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . bg _ sun ny af tern oon _ sp ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Background Res Id ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorigin Background Res Id ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Day Forecast Items ( daily : ĠDaily Response . Daily ): ArrayList < Day Forecast Item >{ ĊĠĠĠĠĠĠĠ Ġval Ġday Forecast ItemList Ġ= ĠArrayList < Day Forecast Item >( daily . temperature . size ) ĊĠĠĠĠĠĠĠ Ġfor ( i Ġin Ġdaily . sky con Sum . indices ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsky con Ġ= Ġdaily . sky con Sum [ i ] ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtemp Ġ= Ġdaily . temperature [ i ] ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġday Forecast ItemList . add ( Day Forecast Item ( sky con , temp )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġday Forecast ItemList ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġclass ĠTemperature Chart X Axis Formatter Ġ: ĠValue Formatter () Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġdays Ġ= ĠarrayOf (" ä»Ĭå¤© ", Ġ" æĺİ å¤© ", Ġ" åĲİ å¤© ", Ġ" å¤§ åĲİ å¤© ", Ġ" åĽĽ å¤© åĲİ ") ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġget Axis Label ( value : ĠFloat , Ġaxis : ĠAxis Base ?): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdays . get OrNull ( value . toInt ()) Ġ?: Ġvalue . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }