package Ġcom . black box . library . p log Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġcom . black box . p log . el k . P Log Meta Info Provider Ċ import Ġcom . black box . p log . el k . models . fields . Meta Info Ċ import Ġcom . black box . p log . mqtt . P Log MQTT Provider Ċ import Ġcom . black box . p log . p Logs . P Log Ċ import Ġcom . black box . p log . p Logs . exporter . Export Type Ċ import Ġcom . black box . p log . p Logs . models . LogLevel Ċ import Ġcom . black box . p log . p Logs . models . Log Type Ċ import Ġcom . m oo ve it . library . Build Config Ċ import Ġcom . m oo ve it . library . Fake it Ċ import Ġio . reactivex . android . schedul ers . Android Schedulers Ċ import Ġio . reactivex . rx kotlin . subscribe By Ċ import Ġio . reactivex . schedul ers . Schedulers Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . util .* Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval Ġ_ tag : ĠString Ġ= ĠMainActivity :: class . java . simple Name ĊĠĠĠ Ġprivate Ġvar Ġcode Ġ= Ġ 9 2 3 4 ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġdo On Permissions Set () ĊĊĠĠĠĠĠĠĠ Ġ// Check Ġread Ġwrite Ġpermissions ĊĠĠĠĠĠĠĠ Ġcheck Permissions () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġdo On Permissions Set () Ġ{ ĊĠĠĠĠĠĠĠ ĠMain Application . setUp P Logger ( this ) ĊĊĠĠĠĠĠĠĠ Ġ// Set ĠMeta Info Ġfor ĠEL K ĠLogs ĊĠĠĠĠĠĠĠ ĠP Log Meta Info Provider . el k Stack Supported Ġ= Ġfalse ĊĠĠĠĠĠĠĠ ĠP Log Meta Info Provider . set Meta Info ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMeta Info ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** App **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappId Ġ= ĠBuild Config . APPLICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠappName Ġ= ĠgetString ( R . string . app _ name ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapp Version Ġ= ĠBuild Config . VERSION _ NAME , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġ" en - US ", ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Environment **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Id Ġ= ĠBuild Config . APPLICATION _ ID , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġenvironment Name Ġ= ĠBuild Config . BUILD _ TYPE , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Organization **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Id Ġ= Ġ" 9 9 7 5 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Unit Id Ġ= Ġ" 2 4 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġorganization Name Ġ= Ġ" Black Box ", ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** User **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserId Ġ= Ġ" 1 2 1 1 2 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠuserName Ġ= Ġ" U ma ir ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Email Ġ= Ġ" m . um air . ad il @ gmail . com ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠdeviceId Ġ= Ġ" 1 2 ", ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Device **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Serial Ġ= Ġ" SK - 7 8 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Brand Ġ= ĠBuild . B RAND , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Name Ġ= ĠBuild . DEVICE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Manufacturer Ġ= ĠBuild . MAN U FACT UR ER , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Model Ġ= ĠBuild . MODEL , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdevice Sdk Int Ġ= ĠBuild . VERSION . SDK _ INT . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbattery Percent Ġ= Ġ" 8 7 ", ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Location **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlatitude Ġ= Ġ 0 . 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlongitude Ġ= Ġ 0 . 0 , ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ/** Labels **/ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlabels Ġ= Ġhash Map Of ( Pair (" env ", Ġ" dev ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// MQTT ĠSetup ĊĠĠĠĠĠĠĠ Ġ// Un comment Ġfollowing Ġblock Ġto Ġenable ĠMQTT Ġfeature ĊĠĠĠĠĠĠĠ Ġ/* P Log MQTT Provider . init MQTT Client ( this , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtopic Ġ= Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbroker Url Ġ= Ġ"", Ġ// Without ĠScheme ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcertificate Res Ġ= ĠR . raw . m 2 mqtt _ ca , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġport Ġ= Ġ" 8 8 8 3 ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwrite Logs ToLocal Storage Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinitial Delay Seconds For Publishing Ġ= Ġ 3 0 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdebug Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) */ ĊĊĠĠĠĠĠĠĠ Ġ// Initialize ĠFake It ĊĠĠĠĠĠĠĠ ĠFake it . initWith Locale ( Locale . EN GL ISH ) ĊĊĠĠĠĠĠĠĠ Ġ// If Ġpermission Ġgranted ĊĠĠĠĠĠĠĠ Ġsetup Logger Controls () ĊĊĠĠĠĠĠĠĠ Ġ// Write ĠFake ĠData Ġto ĠLogs ĊĠĠĠĠĠĠĠ Ġ/* for Ġ( i Ġin Ġ 0 .. 2 5 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFake it . game Of Th ron es (). house (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFake it . game Of Th ron es (). quote (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogLevel . INFO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ}*/ ĊĊĠĠĠĠĠĠĠ Ġrun _ test . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠHour ly Logs Test :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup Logger Controls () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Log Ġedit ĠText Ġevents Ġas Ġsoon Ġas Ġthey Ġare Ġentered ĊĠĠĠĠĠĠĠ Ġlisten For Input Text () ĊĊĠĠĠĠĠĠĠ Ġ// This Ġwill Ġget Ġ' Data Logger ' Ġobject Ġfor Ġpredefined Ġtype Ġin ĠConfig File . ĊĠĠĠĠĠĠĠ Ġval Ġlocations Log Ġ= ĠP Log . getLogger For ( Log Type . Location . type ) ĊĠĠĠĠĠĠĠ Ġval Ġnotifications Log Ġ= ĠP Log . getLogger For ( Log Type . Notification . type ) ĊĠĠĠĠĠĠĠ Ġval Ġbooks Logs Ġ= ĠP Log . getLogger For (" Books ") ĊĊĠĠĠĠĠĠĠ Ġ// Will Ġlog Ġto ĠP Logs ĊĠĠĠĠĠĠĠ Ġlog _ p log _ event . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// This Ġwill Ġtake Ġcare Ġof Ġputting Ġlogged Ġdata Ġto Ġcurrent Ġtime Ġ& Ġdate 's Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" button OnClick ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Quote : Ġ" Ġ+ ĠFake it . h arry Pot ter (). quote (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogLevel . INFO ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Will ĠLog Ġto Ġcustom Ġdata Ġlogs , Ġin ĠLog ĠFile Ġname Ġ& Ġpath Ġprovided Ġin ĠBuilder ĊĠĠĠĠĠĠĠ Ġlog _ data _ log _ event . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata To Log Ġ= Ġ" Book : Ġ" Ġ+ ĠFake it . book (). title () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbooks Logs ?. append ToFile (" Book : Ġ$ data To Log ") ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlocation To Log Ġ= Ġ" Location : Ġ" Ġ+ ĠFake it . address (). street Address () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlocations Log ?. append ToFile ( location To Log ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġnotification To Log Ġ= Ġ" Food : Ġ" Ġ+ ĠFake it . food (). sp ice () Ġ+ Ġ"\ n " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnotifications Log ?. append ToFile ( notification To Log ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Will Ġdelete Ġall ĠLogs ĊĠĠĠĠĠĠĠ Ġdelete . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear Logs () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Will Ġexport ĠP Logs ĊĠĠĠĠĠĠĠ Ġexport _ p logs . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexport P Logs () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Will ĠExport Ġcustom Ġdata Ġlog ĊĠĠĠĠĠĠĠ Ġexport _ data _ logs . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexport Data Logs () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġ// Will Ġprint Ġlogged Ġdata Ġin ĠP Logs ĊĠĠĠĠĠĠĠ Ġprint _ p logs _ hour . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint P Logs ( Export Type . LAST _ HOUR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint _ p logs _ day . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint P Logs ( Export Type . TO DAY ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint _ all . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint P Logs ( Export Type . ALL ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Will Ġprint Ġlogged Ġdata Ġin ĠData Logs ĊĠĠĠĠĠĠĠ Ġprint _ data _ logs . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Data Logs () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprint _ error . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint Exception () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġclear Logs () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// Will Ġclear ĠAll ĠP Logs ĊĠĠĠĠĠĠĠ ĠP Log . clear Logs () ĊĊĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Logs ĠC le ared !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexport P Logs () Ġ{ ĊĠĠĠĠĠĠĠ ĠP Log . export Logs ForType ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠExport Type . TO DAY , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġexport De crypted Ġ= ĠMain Application . is Encryption Enabled ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" export P Logs : ĠP Logs ĠPath : Ġ$ it ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Exported Ġto : Ġ$ it ", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" export P Logs : ĠP Log ĠError : Ġ" Ġ+ Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ= Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġexport Data Logs () Ġ{ ĊĠĠĠĠĠĠĠ ĠP Log . export All Data Logs ( export De crypted Ġ= ĠMain Application . is Encryption Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" export Data Logs : ĠData Log ĠPath : Ġ$ it ") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this @ MainActivity , Ġ" Exported Ġto : Ġ$ it ", ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" export Data Logs : ĠData Logger ĠError : Ġ" Ġ+ Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ= Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint P Logs ( export Type : ĠExport Type ) Ġ{ ĊĠĠĠĠĠĠĠ ĠP Log . print Logs ForType ( export Type , Ġprint De crypted Ġ= ĠMain Application . is Encryption Enabled ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. retry ( 2 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" P Log ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" print Logs : ĠP Log ĠError : Ġ" Ġ+ Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This (_ tag , Ġ" print _ p logs ", Ġ" Print ĠP Logs ĠCompleted .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Data Logs () Ġ{ ĊĠĠĠĠĠĠĠ ĠP Log . print Data Logs For Name ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog Type . Location . type , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprint De crypted Ġ= ĠMain Application . is Encryption Enabled ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe On ( Schedulers . io ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. observe On ( Android Schedulers . main Thread ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe By ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Next Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Data Log ", Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonError Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" print Logs : ĠData Logger ĠError : Ġ" Ġ+ Ġit . message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠonComplete Ġ= Ġ{ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprint Exception () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġtime Ġ= ĠSystem . currentTimeMillis () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( time . toInt () Ġ% Ġ 2 Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" report Error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinfo Ġ= Ġ" Some ĠInfo ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġexception Ġ= ĠException (" This Ġis Ġan ĠException ! "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlevel Ġ= ĠLogLevel . ERROR ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ_ tag , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" report Error ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠThrowable (" This Ġis Ġan Ġsever e ĠThrowable ! "), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLogLevel . SEVERE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġarray ListOf < Int >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġa [ 2 ] ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġd . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( exception : Ġjava . lang . Exception ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This (_ tag , Ġ" print Exception ", Ġexception Ġ= Ġexception , Ġlevel Ġ= ĠLogLevel . ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġa Ġ= Ġ 0 Ġ/ Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġd Ġ= Ġa Ġ- Ġ 5 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġd . toString ()) ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( throwable : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This (_ tag , Ġ" print Exception ", Ġthrowable Ġ= Ġthrowable , Ġlevel Ġ= ĠLogLevel . ERROR ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġcode ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġgrant Results [ 1 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" on Request Permissions Result : ĠPermissions ĠGr anted !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdo On Permissions Set () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (_ tag , Ġ" on Request Permissions Result : ĠPermissions ĠNot ĠGr anted !") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Permissions () Ġ{ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! are Permissions Granted ()) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcode ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġare Permissions Granted (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& ĠContext Compat . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠ Ġ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġlisten For Input Text () Ġ{ ĊĠĠĠĠĠĠĠ Ġedit Text ?. add TextChanged Listener ( object Ġ: ĠText Watcher Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( p 0 : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This (_ tag , Ġ" after TextChanged ", Ġp 0 . toString (), ĠLogLevel . INFO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠP Log . log This (_ tag , Ġ" on TextChanged ", Ġp 0 . toString (), ĠLogLevel . INFO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĊĠĠĠĠĠĠĠ ĠP Log MQTT Provider . dispose MQTT Client () ĊĠĠĠ Ġ} Ċ } Ċ