package Ġcom . be eper . sms . provider Ċ Ċ import Ġandroid . content . Content U ris Ċ import Ġandroid . content . Context Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Tele phony . M ms .* Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . be eper . sms . Log Ċ import Ġcom . be eper . sms . commands . Time Seconds Ċ import Ġcom . be eper . sms . commands . Time Seconds . Companion . to Seconds Ċ import Ġcom . be eper . sms . commands . outgoing . Message Ċ import Ġcom . be eper . sms . extensions .* Ċ import Ġcom . be eper . sms . provider . Guid Provider . Companion . chat Guid Ċ import Ġcom . google . android . m ms . pdu _ alt . P du Headers Ċ Ċ class ĠM ms Provider Ġconstructor ( ĊĠĠĠ Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġpart Provider : ĠPart Provider Ġ= ĠPart Provider ( context ), ĊĠĠĠ Ġprivate Ġval Ġguid Provider : ĠGuid Provider Ġ= ĠGuid Provider ( context ), Ċ ) Ġ{ ĊĠĠĠ Ġprivate Ġval ĠpackageName Ġ= Ġcontext . application Info . packageName ĊĠĠĠ Ġprivate Ġval Ġcr Ġ= Ġcontext . content Resolver ĊĊĠĠĠ Ġfun Ġget Latest ( thread : ĠLong , Ġlimit : ĠInt ) Ġ= Ġget M ms ( where Ġ= Ġ"$ THREAD _ ID Ġ= Ġ$ thread ", Ġlimit Ġ= Ġlimit ) ĊĊĠĠĠ Ġfun Ġget Messages After ( thread : ĠLong , Ġtimestamp : ĠTime Seconds ) Ġ= ĊĠĠĠĠĠĠĠ Ġget M ms ("$ THREAD _ ID Ġ= Ġ$ thread ĠAND Ġ$ DATE Ġ> Ġ${ timestamp . to Long () }") ĊĊĠĠĠ Ġfun Ġget Messages After ( timestamp : ĠTime Seconds ) Ġ= Ġget M ms ("$ DATE Ġ> Ġ${ timestamp . to Long () }") ĊĊĠĠĠ Ġfun ĠgetMessage ( uri : ĠUri ) Ġ= Ġget M ms ( uri ). first OrNull () ĊĊĠĠĠ Ġprivate Ġfun Ġget M ms ( where : ĠString ): ĠList < Message > Ġ= ĊĠĠĠĠĠĠĠ Ġget M ms ( uri Ġ= ĠCONTENT _ URI , Ġwhere Ġ= Ġwhere ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( getM ms ( uri Ġ= ĠIn box . CONTENT _ URI , Ġwhere Ġ= Ġwhere )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. plus ( getM ms ( uri Ġ= ĠSent . CONTENT _ URI , Ġwhere Ġ= Ġwhere )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. distinct By Ġ{ Ġit . guid Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget M ms ( ĊĠĠĠĠĠĠĠ Ġuri : ĠUri Ġ= ĠCONTENT _ URI , ĊĠĠĠĠĠĠĠ Ġwhere : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġlimit : ĠInt Ġ= Ġ 0 , ĊĠĠĠ Ġ): ĠList < Message > Ġ= ĊĠĠĠĠĠĠĠ Ġcr . map ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġuri , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ= Ġwhere , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġorder Ġ= Ġif Ġ( limit Ġ> Ġ 0 ) Ġ"$ DATE ĠDESC ĠLIMIT Ġ$ limit " Ġelse Ġnull ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrow Id Ġ= Ġit . getLong (_ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġattachments Ġ= Ġpart Provider . get Attachment ( row Id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġis From Me Ġ= Ġwhen Ġ( it . getInt ( MESSAGE _ BOX )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠMESSAGE _ BOX _ OUT BOX , ĠMESSAGE _ BOX _ SENT Ġ-> Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcreator Ġ= Ġit . getString ( CRE ATOR ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthread Ġ= Ġit . getLong ( THREAD _ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġchat Guid Ġ= Ġguid Provider . get Chat Guid ( thread ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( chat Guid . isNull Or Blank ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Error Ġgenerating Ġguid Ġfor Ġ$ thread ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn @ map Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsender Ġ= Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis From Me Ġ-> Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġget Sender ( row Id )?. chat Guid Ġ?: Ġchat Guid . take If Ġ{ Ġcg Ġ-> Ġcg . is Dm Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMessage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġguid Ġ= Ġ"$ M MS _ PREFIX $ row Id ", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimestamp Ġ= Ġit . getLong ( DATE ). to Seconds (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubject Ġ= Ġit . getString ( SUBJECT ) Ġ?: Ġ"", ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġattachments . map NotNull Ġ{ Ġa Ġ-> Ġa . text Ġ}. join ToString (""), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchat _ guid Ġ= Ġchat Guid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsender _ guid Ġ= Ġsender , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ from _ me Ġ= Ġis From Me , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachments Ġ= Ġattachments . map NotNull Ġ{ Ġa Ġ-> Ġa . attachment Ġ}, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsent _ from _ matrix Ġ= Ġcreator Ġ== ĠpackageName , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis _ m ms Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresp _ st Ġ= Ġit . getInt OrNull ( RESPONSE _ STATUS ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreator Ġ= Ġcreator , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrow Id Ġ= Ġrow Id , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġif Ġ( where Ġ== Ġnull ) Ġuri Ġelse ĠContent U ris . with App ended Id ( uri , Ġrow Id ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsub Id Ġ= Ġit . getInt OrNull ( SUB SCRIPTION _ ID ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget Sender ( message : ĠLong ): ĠString ? Ġ= ĊĠĠĠĠĠĠĠ Ġcr . first OrNull ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuri Ġ= Ġ"$ CONTENT _ URI /$ message / addr ". to Uri (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhere Ġ= Ġ"${ Addr . TYPE } Ġ= Ġ${ P du Headers . FROM }" ĊĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . getString ( Addr . ADDRESS ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" M ms Provider " ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠM MS _ PREFIX Ġ= Ġ" m ms _" ĊĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠString . is Dm : ĠBoolean ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget () Ġ= Ġstart sWith (" SMS ;- ; ") ĊĠĠĠ Ġ} Ċ }