package Ġcom . cr az yle g end . kotlin extensions . views Ċ Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Parcelable Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . core . os . bundle Of Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . FragmentManager Ċ import Ġcom . cr az yle g end . kotlin extensions . R Ċ import Ġcom . cr az yle g end . kotlin extensions . context . get SharedPreferences By Tag Ċ import Ġcom . cr az yle g end . kotlin extensions . fragments . remove Fragment With State Loss Ċ import Ġcom . cr az yle g end . kotlin extensions . intent . can Be Handled Ċ import Ġcom . cr az yle g end . kotlin extensions . shared prefs . put Boolean Ċ import Ġkotlinx . android . parcel . Parcel ize Ċ import Ġkotlinx . android . synt hetic . main . dialog _ app _ r ater . view .* ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby ĠCr azy Le gen D Ġon Ġ 2 / 7 / 1 9 Ġto Ġlong Ġlive Ġand Ġpro sper Ġ! Ċ Ġ* Ċ Ġ* ĠModified Ġon Ġ 2 1 / 0 1 / 2 0 2 0 Ċ Ġ*/ Ċ Ċ /** Ċ Ġ* ĠUS AGE Ċ Ċ App R ater . app La unched ( this , Ġsupport FragmentManager , Ġ 0 , Ġ 0 ){ Ċ app Title Ġ= ĠgetString ( R . string . app _ name ) Ċ buttons BG Color Ġ= Ġget Compat Color ( R . color . color Accent ) Ċ } Ċ Ġ*/ Ċ object ĠApp R ater Ġ{ ĊĊĠĠĠ Ġprivate Ġconst Ġval Ġpref Key Ġ= Ġ" app R ater " ĊĠĠĠ Ġprivate Ġconst Ġval Ġdo Not Show Again Pref Ġ= Ġ" do Not Show Again " ĊĠĠĠ Ġprivate Ġconst Ġval Ġlaunch Count Pref Ġ= Ġ" launch Count " ĊĠĠĠ Ġprivate Ġconst Ġval Ġdate First Launch Pref Ġ= Ġ" date F ir La unched " ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġapp R ater Dialog : ĠApp R ater Dialog ĊĊĠĠĠ Ġfun Ġapp La unched ( context : ĠContext , Ġfragment Manager : ĠFragment Manager , ĠDAY S _ UNT IL _ PROMPT : ĠInt , ĠLA UNCH ES _ UNT IL _ PROMPT : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp R ater Model Setup : ĠApp R ater Model Setup . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġmodel To Modify Ġ= ĠApp R ater Model Setup () ĊĠĠĠĠĠĠĠ Ġapp R ater Model Setup . invoke ( model To Modify ) ĊĊĠĠĠĠĠĠĠ Ġval Ġprefs Ġ= Ġcontext . get SharedPreferences By Tag ( pref Key ) ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . getBoolean ( do Not Show Again Pref , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġeditor Ġ= Ġprefs . edit () ĊĊĠĠĠĠĠĠĠ Ġ// ĠIncrement Ġlaunch Ġcounter ĊĠĠĠĠĠĠĠ Ġval Ġlaunch Count Ġ= Ġprefs . getLong ( launch Count Pref , Ġ 0 ) Ġ+ Ġ 1 ĊĠĠĠĠĠĠĠ Ġeditor . put Long ( launch Count Pref , Ġlaunch Count ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠGet Ġdate Ġof Ġfirst Ġlaunch ĊĠĠĠĠĠĠĠ Ġvar Ġdate First Launch Ġ= Ġprefs . getLong ( date First Launch Pref , Ġ 0 ) ĊĊĊĠĠĠĠĠĠĠ Ġif Ġ( date First Launch Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdate First Launch Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġeditor . put Long ( date First Launch Pref , Ġdate First Launch ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠWait Ġat Ġleast Ġn Ġdays Ġbefore Ġopening ĊĠĠĠĠĠĠĠ Ġif Ġ( launch Count Ġ>= ĠLA UNCH ES _ UNT IL _ PROMPT ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( System . currentTimeMillis () Ġ>= Ġdate First Launch Ġ+ ĠDAY S _ UNT IL _ PROMPT Ġ* Ġ 2 4 Ġ* Ġ 6 0 Ġ* Ġ 6 0 Ġ* Ġ 1 0 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Rate Dialog ( model To Modify , Ġfragment Manager ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġeditor . apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Rate Dialog ( message : ĠApp R ater Model Setup , Ġfragment Manager : ĠFragment Manager ) Ġ{ ĊĠĠĠĠĠĠĠ Ġfragment Manager . find Fragment By Tag ( DIALOG _ TAG )?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfragment Manager . remove Fragment With State Loss ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġapp R ater Dialog Ġ= ĠApp R ater Dialog () ĊĠĠĠĠĠĠĠ Ġapp R ater Dialog . add Arguments ( message ) ĊĠĠĠĠĠĠĠ Ġapp R ater Dialog . show ( fragment Manager , ĠDIALOG _ TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ@ Parcel ize ĊĠĠĠ Ġclass ĠApp R ater Model Setup ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġapp Title : ĠString Ġ= Ġ" Rate Ġmy Ġapp ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent : ĠString Ġ= Ġ" If Ġyou 're Ġenjoy ing Ġusing Ġthis Ġapplication , Ġplease Ġtake Ġa Ġmoment Ġto Ġrate Ġit .\ n Thanks Ġfor Ġyour Ġsupport Ġ! ", ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuttons Corner Radius : ĠInt ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġcontent Text Size : ĠFloat ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrate Me ButtonText : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġdo Not Show Again ButtonText : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġrem ind Me Later ButtonText : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbackground Buttons Resource : ĠInt ? Ġ= Ġnull , Ġ// use Ġ 0 Ġto Ġremove Ġbackground Ġand Ġalso Ġremoves Ġthe Ġbutton Ġtoo ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġbuttons BG Color : ĠInt ? Ġ= Ġnull ) Ġ: ĠParcel able Ġ{ ĊĊĊĠĠĠĠĠĠĠ Ġoperator Ġfun Ġinvoke ( callback : ĠApp R ater Model Setup . () Ġ-> ĠUnit Ġ= Ġ{}) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . invoke ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġconst Ġval ĠDIALOG _ TAG Ġ= Ġ" rate Dialog Tag " ĊĠĠĠ Ġprivate Ġconst Ġval Ġargument Model Ġ= Ġ" argument " ĊĊĠĠĠ Ġclass ĠApp R ater Dialog Ġ: ĠDialog Fragment () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval Ġshared Preferences Ġby Ġlazy Ġ{ Ġrequire Context (). get SharedPreferences By Tag ( pref Key ) Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ?): ĠView ? Ġ= Ġinflater . inflate ( R . layout . dialog _ app _ r ater , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġargument Model : ĠApp R ater Model Setup ? Ġ= Ġarguments ?. get Parcelable ( argument Model ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Model Ġ?: Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ content ?. set Pre computed Text ( argument Model . content ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ title ?. set Pre computed Text ( argument Model . app Title ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Model . content Text Size ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ content ?. text Size Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Model . buttons BG Color ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rate ?. set BackgroundColor ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ do Not Show Again ?. set BackgroundColor ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rem ind Me Later ?. set BackgroundColor ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rate ?. text Ġ= Ġargument Model . rate Me ButtonText Ġ?: Ġ" Rate " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ do Not Show Again ?. text Ġ= Ġargument Model . do Not Show Again ButtonText ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" Don 't Ġshow Ġagain " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rem ind Me Later ?. text Ġ= Ġargument Model . rem ind Me Later ButtonText ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġ" Rem ind Ġme Ġlater " ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Model . background Buttons Resource ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rate ?. setBackground Resource ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ do Not Show Again ?. setBackground Resource ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rem ind Me Later ?. setBackground Resource ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġargument Model . buttons Corner Radius ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rate ?. corner Radius Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ do Not Show Again ?. corner Radius Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rem ind Me Later ?. corner Radius Ġ= Ġthis ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rate ?. setOnClickListener Cooldown Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ VIEW , ĠUri . parse (" market :// details ? id =${ require Context (). packageName } ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( intent . can Be Handled ( require Context ())) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). startActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ do Not Show Again ?. setOnClickListener Cooldown Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshared Preferences . put Boolean ( do Not Show Again Pref , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġview . dar _ rem ind Me Later ?. setOnClickListener Cooldown Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġfun Ġadd Arguments ( app R ater Model Setup : ĠApp R ater Model Setup ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġarguments Ġ= Ġbundle Of ( Pair ( argument Model , Ġapp R ater Model Setup )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdialog Ġ= Ġsuper . onCreate Dialog ( savedInstanceState ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith ( dialog ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. attributes ?. window Animations Ġ= ĠR . style . Dialog Animation ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Cancel able ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Canceled On Touch Outside ( false ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwindow ?. setBackground Drawable Resource ( R . drawable . rounded _ bg _ theme _ compatible ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġdialog ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ }