package Ġcom . be lo tron . we ath err ad ar hr Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . AlertDialog Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . content . Component Name Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Context . MODE _ PRIVATE Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . Intent . ACTION _ VIEW Ċ import Ġandroid . content . Intent . FLAG _ ACTIVITY _ CLEAR _ TOP Ċ import Ġandroid . content . Intent . FLAG _ ACTIVITY _ NEW _ TASK Ċ import Ġandroid . content . Intent . FLAG _ ACTIVITY _ RESET _ TASK _ IF _ NE EDED Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . format . Date Utils . DAY _ IN _ M ILL IS Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . widget . Button Ċ import Ġandroidx . fragment . app . Dialog Fragment Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ Ċ private Ġconst Ġval ĠDAY S _ UNT IL _ PROMPT Ġ= Ġ 2 Ċ private Ġconst Ġval ĠUSE S _ UNT IL _ PROMPT Ġ= Ġ 4 Ċ private Ġconst Ġval ĠDAY S _ UNT IL _ REPEAT _ PROMPT Ġ= Ġ 1 Ċ private Ġconst Ġval ĠUSE S _ UNT IL _ REPEAT _ PROMPT Ġ= Ġ 3 Ċ Ċ private Ġconst Ġval ĠTAG _ RATE _ ME : ĠString Ġ= Ġ" rate _ me _ fragment " Ċ private Ġconst Ġval ĠP REF S _ NAME Ġ= Ġ" rate _ app _ reminder " Ċ private Ġconst Ġval ĠKEY _ D ONT _ SHOW _ AG AIN Ġ= Ġ" dont _ show _ again " Ċ private Ġconst Ġval ĠKEY _ USE _ COUNT Ġ= Ġ" use _ count " Ċ private Ġconst Ġval ĠKEY _ TIMESTAMP _ FIRST _ USE Ġ= Ġ" timestamp _ first _ use " Ċ private Ġconst Ġval ĠKEY _ USE _ COUNT _ WHEN _ PRO MP TED Ġ= Ġ" use _ count _ when _ pro mp ted " Ċ private Ġconst Ġval ĠKEY _ TIMESTAMP _ WHEN _ PRO MP TED Ġ= Ġ" timestamp _ pro mp ted " Ċ Ċ fun ĠFragment Activity . open Rate Me Dialog () Ġ{ ĊĠĠĠ ĠRate Me Dialog Fragment (). show ( support FragmentManager , ĠTAG _ RATE _ ME ) Ċ } Ċ Ċ fun ĠContext . open App Rating () Ġ{ ĊĠĠĠ Ġval Ġrate Intent Ġ= ĠIntent ( ACTION _ VIEW , ĠUri . parse (" market :// details ? id =$ packageName ")) ĊĠĠĠ Ġpackage Manager . query Intent Activities ( rate Intent , Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . activity Info Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. find Ġ{ Ġit . application Info . packageName Ġ== Ġ" com . android . v ending " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlay ĠStore Ġapp Ġis Ġinstalled , Ġuse Ġit Ġto Ġrate Ġour Ġapp ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Intent . component Ġ= ĠComponent Name ( it . application Info . packageName , Ġit . name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrate Intent . add Flags ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġdon 't Ġopen ĠPlay ĠStore Ġin Ġthe Ġstack Ġof Ġour Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFLAG _ ACTIVITY _ NEW _ TASK Ġor ĠFLAG _ ACTIVITY _ RESET _ TASK _ IF _ NE EDED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmake Ġsure ĠPlay ĠStore Ġopens Ġour Ġapp Ġpage , Ġwhatever Ġit Ġwas Ġdoing Ġbefore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġor ĠFLAG _ ACTIVITY _ CLEAR _ TOP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( rate Intent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠPlay ĠStore Ġapp Ġnot Ġinstalled , Ġopen Ġin Ġweb Ġbrowser ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: ĠstartActivity ( Intent ( ACTION _ VIEW , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUri . parse (" https :// play . google . com / store / apps / details ? id =$ packageName "))) Ċ } Ċ Ċ fun ĠContext . record App Usage () Ġ{ ĊĠĠĠ Ġval Ġprefs Ġ= Ġget SharedPreferences ( PRE FS _ NAME , ĠMODE _ PRIVATE ) ĊĠĠĠ Ġprefs . apply Update Ġ{ ĊĠĠĠĠĠĠĠ Ġprefs . getLong ( KEY _ TIMESTAMP _ FIRST _ USE , Ġ 0 ). take If Ġ{ Ġit Ġ== Ġ 0 L Ġ} Ġ? . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( KEY _ TIMESTAMP _ FIRST _ USE , ĠSystem . currentTimeMillis ()) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ( 1 Ġ+ Ġprefs . getLong ( KEY _ USE _ COUNT , Ġ 0 )). also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Long ( KEY _ USE _ COUNT , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Recording Ġnew Ġusage , Ġcount : Ġ$ it " Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ Ċ fun ĠFragment Activity . maybe Ask To Rate () Ġ{ ĊĠĠĠ Ġval Ġprefs Ġ= Ġget SharedPreferences ( PRE FS _ NAME , ĠMODE _ PRIVATE ) ĊĠĠĠ Ġval Ġday In Millis Ġ= ĠDAY _ IN _ M ILL IS ĊĠĠĠ Ġprefs . apply Update Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġuse Count Ġ= Ġprefs . getLong ( KEY _ USE _ COUNT , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" use Count Ġ$ use Count " Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( prefs . getBoolean ( KEY _ D ONT _ SHOW _ AG AIN , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Don 't Ġshow Ġagain " Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġnow Ġ= ĠSystem . currentTimeMillis () ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp First Use Ġ= Ġprefs . getLong ( KEY _ TIMESTAMP _ FIRST _ USE , Ġnow ) ĊĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" now Ġ$ now , Ġtimestamp First Use Ġ$ timestamp First Use "} ĊĠĠĠĠĠĠĠ Ġif Ġ( use Count Ġ< ĠUSE S _ UNT IL _ PROMPT Ġ|| Ġnow Ġ< Ġtimestamp First Use Ġ+ ĠDAY S _ UNT IL _ PROMPT Ġ* Ġday In Millis ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġtimestamp When Pro mp ted Ġ= Ġprefs . getLong ( KEY _ TIMESTAMP _ WHEN _ PRO MP TED , ĠLong . MIN _ VALUE ) ĊĠĠĠĠĠĠĠ Ġval Ġuse Count When Pro mp ted Ġ= Ġprefs . getLong ( KEY _ USE _ COUNT _ WHEN _ PRO MP TED , ĠLong . MIN _ VALUE ) ĊĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" timestamp When Pro mp ted Ġ$ timestamp When Pro mp ted , Ġuse Count When Pro mp ted Ġ$ use Count When Pro mp ted "} ĊĠĠĠĠĠĠĠ Ġif Ġ( use Count Ġ< Ġuse Count When Pro mp ted Ġ+ ĠUSE S _ UNT IL _ REPEAT _ PROMPT ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ|| Ġnow Ġ< Ġtimestamp When Pro mp ted Ġ+ ĠDAY S _ UNT IL _ REPEAT _ PROMPT Ġ* Ġday In Millis ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġput Long ( KEY _ TIMESTAMP _ WHEN _ PRO MP TED , Ġnow ) ĊĠĠĠĠĠĠĠ Ġput Long ( KEY _ USE _ COUNT _ WHEN _ PRO MP TED , Ġuse Count ) ĊĠĠĠĠĠĠĠ Ġinfo Ġ{ Ġ" Ask Ġto Ġrate " Ġ} ĊĠĠĠĠĠĠĠ Ġopen Rate Me Dialog () ĊĠĠĠ Ġ} Ċ } Ċ Ċ class ĠRate Me Dialog Fragment Ġ: ĠDialog Fragment () Ġ{ ĊĠĠĠ Ġ@ Suppress Lint (" Inf late Params ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate Dialog ( savedInstanceState : ĠBundle ?): ĠDialog Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġrequire Activity () ĊĠĠĠĠĠĠĠ Ġval Ġroot View Ġ= ĠLayoutInflater . from ( activity ). inflate ( R . layout . rate _ me , Ġnull ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . rate me _ yes ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġactivity . open App Rating () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdont Show Again () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . rate me _ later ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . rate me _ already _ did ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdont Show Again () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById < Button >( R . id . rate me _ no ). setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Allow ing State Loss () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdont Show Again () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn ĠAlertDialog . Builder ( activity , ĠR . style . AlertDialog Theme ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . rate me _ title ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( R . mip map . ic _ launcher ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( root View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. create () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdont Show Again () Ġ{ ĊĠĠĠĠĠĠĠ Ġrequire Activity (). get SharedPreferences ( PRE FS _ NAME , ĠMODE _ PRIVATE ). apply Update Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Boolean ( KEY _ D ONT _ SHOW _ AG AIN , Ġtrue ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ