package Ġcom . ice bem . akt . ui . home Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . drawable . Anim atable Ċ import Ġandroid . graphics . drawable . Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . TextUtils Ċ import Ġandroid . view .* Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AlertDialog Ċ import Ġandroidx . appcompat . app . AppCompat Delegate Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . vect ord raw able . graphics . drawable . Anim atable 2 Compat Ċ import Ġandroidx . vect ord raw able . graphics . drawable . Animated Vector Drawable Compat Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . ice bem . akt . R Ċ import Ġcom . ice bem . akt . activity . About Activity Ċ import Ġcom . ice bem . akt . activity . MainActivity Ċ import Ġcom . ice bem . akt . app . Compat Operations Ċ import Ġcom . ice bem . akt . app . Preference Manager Ċ import Ġcom . ice bem . akt . app . Resolution Config Ċ import Ġcom . ice bem . akt . util . App Util Ċ import Ġcom . ice bem . akt . util . Data Util Ċ import Ġcom . ice bem . akt . util . IO Util Ċ import Ġorg . json . JSONObject Ċ import Ġjava . io . IOException Ċ Ċ class ĠHome Fragment Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġi Ġ= Ġ 0 ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstate : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġstate Img : ĠImageView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmanager : ĠPreference Manager ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġset Has Options Menu ( true ) ĊĠĠĠĠĠĠĠ Ġval Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ home , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġval Ġtip Ġ= Ġroot . findViewById < TextView >( R . id . txt _ tips ) ĊĠĠĠĠĠĠĠ Ġstate Img Ġ= Ġroot . findViewById ( R . id . img _ state ) ĊĠĠĠĠĠĠĠ Ġstate Ġ= Ġroot . findViewById ( R . id . txt _ state ) ĊĠĠĠĠĠĠĠ Ġmanager Ġ= ĠPreference Manager . getInstance ( require Context ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( manager . is Pro Ġ&& Ġ! manager . is Activated ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtip . setText ( R . string . tip _ not _ found ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtip . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . is Pro Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( it , ĠR . string . version _ type _ changed , ĠSn ackbar . LENGTH _ IN DEFIN ITE ). setAction ( R . string . action _ re install ) Ġ{ ĠCompat Operations . re install Self ( manager . application Context ) Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . is Single Line Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . text Ġ= Ġ( require Context () Ġas ĠMainActivity ). s log an ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . el lip size Ġ= ĠText Utils . Truncate At . MAR QUE E ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . mar quee Repeat Limit Ġ= Ġ- 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . isSelected Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . is Focus able Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . is Focus able In Touch Mode Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtip . setText ( R . string . error _ occ urred ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Created ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Created ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġif Ġ( manager . auto Update ) Ġstart Update Thread () Ġelse Ġon State End () ĊĠĠĠĠĠĠĠ Ġif Ġ( manager . is Pro ) Ġstate Img . setOn Long ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( require Context ()). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . customize _ points ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġedit Ġ= ĠEditText ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġedit . append ( manager . customize Points ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset View ( edit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( android . R . string . ok ) Ġ{ Ġ_, Ġ_ Ġ-> Ġif Ġ(! manager . set Custom ize Points ( edit . text . toString ())) ĠSn ackbar . make ( it , ĠR . string . wrong _ format , ĠSn ackbar . LENGTH _ LONG ). show () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Neutral Button ( R . string . action _ reset ) Ġ{ Ġ_, Ġ_ Ġ-> Ġmanager . set Custom ize Points ( null ) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate (). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmargin Ġ= Ġrequire Context (). resources . get Dimension Pixel Offset ( R . dim en . activity _ margin ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( edit . layout Params Ġas ĠViewGroup . Margin LayoutParams ). set Margins ( margin , Ġ 0 , Ġmargin , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon State End () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( manager . is Pro Ġ&& Ġmanager . unsupported Resolution ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Img . setImage Resource ( R . drawable . ic _ state _ running ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . setText ( R . string . state _ resolution _ unsupported ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġres Ġ= ĠResolution Config . get Absolute Resolution ( require Context ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( require Context ()). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . state _ resolution _ unsupported ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( getString ( R . string . msg _ resolution _ unsupported , Ġres [ 0 ], Ġres [ 1 ])) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . got _ it , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Neutral Button ( R . string . action _ update ) Ġ{ Ġ_, Ġ_ Ġ-> Ġstart Update Thread () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate (). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate Img . setImage Resource ( R . drawable . ic _ state _ running _ anim ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstate . setText ( R . string . state _ loading ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAnimated Vector Drawable Compat . register Animation Callback ( state Img . drawable , Ġobject Ġ: ĠAnim atable 2 Compat . Animation Callback () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Animation End ( drawable : ĠDrawable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Img . setImage Resource ( R . drawable . ic _ state _ ready _ anim ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . setText ( R . string . state _ ready ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Img . drawable Ġas ĠAnim atable ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! state Img . is Clickable ) Ġstate Img . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(++ i Ġ>= Ġ 3 Ġ&& Ġi Ġ< Ġ 1 5 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( i Ġ== Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate Img . setImage Resource ( R . drawable . ic _ state _ error _ anim ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstate . setText ( R . string . error _ occ urred ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Img . drawable Ġas ĠAnim atable ). start () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( i Ġ>= Ġ 3 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġi Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Animation End ( state Img . drawable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Img . drawable Ġas ĠAnim atable ). start () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Options ItemSelected ( item : ĠMenuItem ): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( item . itemId ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ timer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( require Context ()). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( R . string . action _ timer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Single Choice Items ( manager . get Timer Strings ( require Context ()), Ġmanager . timer Position ) Ġ{ Ġdialog , Ġwhich Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdialog . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . timer Time Ġ= Ġwhich ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( state , ĠgetString ( R . string . info _ timer _ set , Ġif Ġ( manager . timer Time Ġ== Ġ 0 ) ĠgetString ( R . string . info _ timer _ none ) Ġelse ĠgetString ( R . string . info _ timer _ min , Ġmanager . timer Time )), ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( android . R . string . cancel , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate (). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ night Ġ-> ĠAppCompat Delegate . setDefault Night Mode ( if Ġ( AppCompat Delegate . getDefault Night Mode () Ġ== ĠAppCompat Delegate . MODE _ N IGHT _ YES ) ĠAppCompat Delegate . MODE _ N IGHT _ FOLLOW _ SYSTEM Ġelse ĠAppCompat Delegate . MODE _ N IGHT _ YES ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . action _ about Ġ-> ĠstartActivity ( Intent ( require Context (), ĠAbout Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . on Options ItemSelected ( item ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Update Thread () Ġ{ ĊĠĠĠĠĠĠĠ ĠThread ({ Ġcheck Version Update () Ġ}, ĠApp Util . THREAD _ UPDATE ). start () ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( state , ĠR . string . version _ checking , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Version Update () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġid Ġ= ĠR . string . version _ update ĊĠĠĠĠĠĠĠ Ġvar Ġlog : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġvar Ġurl : ĠString ? Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġval Ġfab Ġ= Ġ( require Context () Ġas ĠMainActivity ). fab ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġentry Ġ= ĠData Util . get Online Entry () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Data Util . latest App ( entry )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= Ġif Ġ( Data Util . update Data ( manager . application Context , Ġentry )) ĠR . string . data _ updated Ġelse ĠR . string . version _ latest ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġjson Ġ= ĠJSONObject ( IO Util . stream 2 String ( IO Util . from Web ( App Util . URL _ RELEASE _ LATE ST _ API ))) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ= ĠData Util . get Change log ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġurl Ġ= ĠData Util . get Download Url ( json ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġmanager . set Check Last Time ( false ) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ= ĠR . string . version _ checking _ failed ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( e Ġis ĠIOException ) Ġlog Ġ= ĠgetString ( R . string . msg _ network _ error ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġfab . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( id Ġ!= ĠR . string . version _ checking _ failed ) Ġ( fab . context Ġas ĠMainActivity ). update Subtitle Time () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġid Ġ== ĠR . string . version _ update Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( fab . context ). run Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠsetTitle ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Message ( log ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Positive Button ( R . string . action _ update ) Ġ{ Ġ_, Ġ_ Ġ-> ĠstartActivity ( Intent ( Intent . ACTION _ VIEW , ĠUri . parse ( url ))) Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Negative Button ( R . string . no _ thanks , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate (). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Ġ!= Ġnull Ġ-> ĠSn ackbar . make ( fab , Ġid , ĠSn ackbar . LENGTH _ IN DEFIN ITE ). setAction ( R . string . action _ details ) Ġ{ ĠApp Util . show Log Dialog ( fab . context , Ġlog ) Ġ}. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĠSn ackbar . make ( fab , Ġid , ĠSn ackbar . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon State End () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate Options Menu ( menu : ĠMenu , Ġinflater : ĠMenu Inflater ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate Options Menu ( menu , Ġinflater ) ĊĠĠĠĠĠĠĠ Ġinflater . inflate ( R . menu . menu _ home , Ġmenu ) ĊĠĠĠĠĠĠĠ Ġif Ġ( manager . is Pro ) Ġmenu . find Item ( R . id . action _ timer ). isVisible Ġ= Ġtrue ĊĠĠĠ Ġ} Ċ }