package Ġcom . ken ilt . skeleton Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . app . Activity Ċ import Ġandroid . os . Handler Ċ import Ġandroidx . fragment . app . Fragment Activity Ċ import Ġcom . crash ly t ics . android . Crash ly t ics Ċ import Ġcom . crash ly t ics . android . core . Crash ly t ics Core Ċ import Ġcom . google . android . gms . common . wrappers . Instant Apps Ċ import Ġcom . google . android . play . core . missing splits . Missing Spl its ManagerFactory Ċ import Ġcom . google . firebase . analytics . Firebase Analytics Ċ import Ġcom . ken ilt . skeleton . api . rest client . RestClient Ċ import Ġcom . ken ilt . skeleton . constant . Constant Ċ import Ġcom . ken ilt . skeleton . di . App Injector Ċ import Ġcom . ken ilt . skeleton . extension . isNotNull Nor Empty Ċ import Ġcom . ken ilt . skeleton . managers . common . Foreground Ċ import Ġcom . ken ilt . skeleton . managers . helpers . Controller Helper Ċ import Ġcom . ken ilt . skeleton . managers . helpers . L XP ic asso Ċ import Ġcom . ken ilt . skeleton . managers . notification . Notification Opened Handler Ċ import Ġcom . ken ilt . skeleton . managers . notification . Notification Received Handler Ċ import Ġcom . ken ilt . skeleton . managers . prefs . LX Config Ċ import Ġcom . ken ilt . skeleton . managers . prefs . UT MP refs Ċ import Ġcom . ken ilt . skeleton . ui . custom . dialog . Install Recommendation Dialog Ċ import Ġcom . ken ilt . skeleton . utils . Device Util Ċ import Ġcom . ken ilt . skeleton . utils . Installation Ċ import Ġcom . ken ilt . skeleton . utils . Instant Clock Ċ import Ġcom . ken ilt . skeleton . utils . LX Log Ċ import Ġcom . ones ign al . One Signal Ċ import Ġdagger . android . Android Injector Ċ import Ġdagger . android . D agger Application Ċ import Ġio . branch . ref erral . Branch Ċ import Ġio . fabric . sdk . android . Fabric Ċ import Ġio . fabric . sdk . android . Initialization Callback Ċ import Ġretrofit 2 . Ret rofit Ċ import Ġjavax . inject . Inject ĊĊ Ċ /** Ċ Ġ* ĠCreated Ġby Ġthan h . ng uy en Ġon Ġ 1 1 / 1 5 / 1 6 . Ċ Ġ*/ Ċ Ċ open Ġclass ĠL X Application Ġ: ĠD agger Application () Ġ{ ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġconfig : ĠL X Config ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġfirebase Analytics : ĠFirebase Analytics ĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġretrofit : ĠRet rofit ĊĠĠĠ Ġval ĠdeviceId : ĠString Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġvar ĠdeviceId Ġ= ĠDevice Util . android Id ( this ) ĊĠĠĠĠĠĠĠ Ġif Ġ( deviceId Ġ== Ġnull Ġ|| ĠdeviceId . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= ĠInstallation . id ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠdeviceId Ġ?: Ġ"" ĊĠĠĠ Ġ} ĊĠĠĠ Ġval Ġis Instant App : ĠBoolean Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ ĠInstant Apps . is Instant App ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġforeground : ĠFore ground ĊĠĠĠ Ġvar Ġis App Used Ġ= Ġfalse ĊĠĠĠ Ġvar ĠisOpen From Notification Ġ= Ġfalse ĊĠĠĠ Ġprivate Ġvar Ġm Default UE H : ĠThread . Un caught ExceptionHandler ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġval Ġm Ca ught ExceptionHandler Ġ= ĠThread . Un caught ExceptionHandler Ġ{ Ġthread , Ġex Ġ-> ĊĠĠĠĠĠĠĠ Ġ// ĠCustom Ġlogic Ġgoes Ġhere ĊĠĠĠĠĠĠĠ Ġconfig . put Last Cr ashed Time ( Instant Clock . currentTimeMillis ()) ĊĊĠĠĠĠĠĠĠ Ġ// ĠThis Ġwill Ġmake ĠCrash ly t ics Ġdo Ġits Ġjob ĊĠĠĠĠĠĠĠ Ġm Default UE H ?. unc a ught Exception ( thread , Ġex ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġapplication Injector (): ĠAndroid Injector < out ĠD agger Application > Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠApp Injector . init ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Instant App Ġ&& ĠMissing Spl its ManagerFactory . create ( this ). disable App If Missing Required Spl its ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠSkip Ġapp Ġinitialization . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġsuper . onCreate () ĊĠĠĠĠĠĠĠ Ġinstance Ġ= Ġthis ĊĊĠĠĠĠĠĠĠ Ġ// Ġinject Ġconfig Ġfor ĠController Helper ĊĠĠĠĠĠĠĠ ĠController Helper . init ( config ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġretrofit Ġapi ĊĠĠĠĠĠĠĠ ĠRest Client . init ( ret rofit ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠFabric ĊĠĠĠĠĠĠĠ Ġinit Crash ly t ics () ĊĊĠĠĠĠĠĠĠ Ġ// ĠFore ground ĊĠĠĠĠĠĠĠ Ġinit Foreground () ĊĊĠĠĠĠĠĠĠ Ġ// ĠOne Signal ĊĠĠĠĠĠĠĠ Ġregister One Signal () ĊĊĠĠĠĠĠĠĠ Ġ// ĠBranch ĊĠĠĠĠĠĠĠ ĠBranch . get Auto Instance ( this ) ĊĊĠĠĠĠĠĠĠ ĠL XP ic asso . init ( this ) ĊĠĠĠĠĠĠĠ ĠU TMP refs ( this ). load UT M Id () ĊĊĠĠĠĠĠĠĠ Ġcheck Instant App Open Count () ĊĊĠĠĠĠĠĠĠ Ġinit Firebase An alytic For App Type () ĊĊĠĠĠĠĠĠĠ ĠController Helper . increase Open App Count () ĊĊĠĠĠĠĠĠĠ ĠL X Log . d (" LX Application ", Ġ" version Name : Ġ${ Build Config . VERSION _ NAME }, Ġversion Code : Ġ${ Build Config . VERSION _ CODE }") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠTutorial Ġfrom Ġhere : Ġhttps :// stackoverflow . com / a / 4 9 2 6 6 3 0 3 / 2 3 4 7 8 7 2 ĊĠĠĠ Ġprivate Ġfun Ġinit Crash ly t ics () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcore Ġ= ĠCrash ly t ics Core . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. disabled ( Build Config . DEBUG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠ ĠFabric . with ( Fabric . Builder ( this ). k its ( Crash ly t ics . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. core ( core ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initialization Callback ( object Ġ: ĠInitialization Callback < Fabric ?> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġsuccess ( fabric : ĠFabric ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Default UE H Ġ= ĠThread . getDefault Un caught ExceptionHandler () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThread . setDefault Un caught ExceptionHandler ( m Ca ught ExceptionHandler ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġfailure ( e : ĠException ) Ġ{} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Foreground () Ġ{ ĊĠĠĠĠĠĠĠ Ġforeground Ġ= ĠFore ground . get ( this ) ĊĠĠĠĠĠĠĠ Ġforeground . addListener ( object Ġ: ĠFore ground . Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B ec ame Foreground () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend GA Event (" App Ġbecame Ġforeground ", Ġ"${ foreground . current Activity ?. java Class ?. simple Name }") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon B ec ame Background () Ġ{ Ċ // ĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsend GA Event (" App Ġbecame Ġbackground ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġregister One Signal () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Instant App ) Ġ{ Ġreturn Ġ} ĊĊĠĠĠĠĠĠĠ ĠOne Signal . start Init ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Notification Opened Handler ( Notification Opened Handler ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Notification Received Handler ( Notification Received Handler ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. in Focus Display ing ( One Signal . OS In Focus Display Option . Notification ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. unsubscribe When Notifications Are Disabled ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. init () ĊĊĠĠĠĠĠĠĠ ĠOne Signal . ids Available Ġ{ ĠuserId , Ġregistration Id Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( userId . isNotNull Nor Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠController Helper . one Signal UserId Controller ( userId ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( registration Id . isNotNull Nor Empty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠController Helper . google Registration Id Controller ( registration Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Firebase An alytic For App Type () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġapp Type Status Ġ= Ġif Ġ( is Instant App ) ĠConstant . STATUS _ INST ANT Ġelse ĠConstant . STATUS _ INST ALLED ĊĠĠĠĠĠĠĠ Ġfirebase Analytics . setUser Property ( Constant . ANAL YT ICS _ APP _ PROP , Ġapp Type Status ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġshow Recommend Install Dialog () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġactivity Ġ= Ġcurrent Activity ĊĠĠĠĠĠĠĠ Ġif Ġ( activity Ġis ĠFragment Activity ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Instant App Ġ&& Ġ! activity . is Finish ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠInstall Recommendation Dialog . show ( activity ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Instant App Open Count () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! is Instant App ) Ġ{ Ġreturn Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġcount Ġ= Ġconfig . get Instant App Open Count () ĊĠĠĠĠĠĠĠ Ġval Ġnumber Before Ask Ġ= ĠConstant . OPEN _ INST ANT _ APP _ COUNT _ BEFORE _ ASK ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ== Ġnumber Before Ask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler (). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow Recommend Install Dialog () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 1 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif Ġ( count Ġ<= Ġnumber Before Ask ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconfig . put Instant App Open Count ( count Ġ+ Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġval Ġcurrent Activity : ĠActivity ? ĊĠĠĠĠĠĠĠ Ġget () Ġ= Ġforeground . current Activity ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġ@ Suppress Lint (" Static Field Leak ") ĊĠĠĠĠĠĠĠ Ġlateinit Ġvar Ġinstance : ĠL X Application ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġset ĊĠĠĠ Ġ} Ċ } Ċ