package Ġcom . be eper . sms . provider Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . provider . Tele phony Ċ import Ġandroid . provider . Tele phony . M ms . Part .* Ċ import Ġandroidx . core . net . to Uri Ċ import Ġcom . be eper . sms . Log Ċ import Ġcom . be eper . sms . commands . outgoing . Message . Attachment Ċ import Ġcom . be eper . sms . extensions .* Ċ import Ġjava . io . File Ċ import Ġjava . io . InputStream Reader Ċ import Ġjava . nio . charset . StandardCharsets . UTF _ 8 Ċ import Ġjava . util .* ĊĊ Ċ class ĠPart Provider Ġconstructor ( private Ġval Ġcontext : ĠContext ) Ġ{ ĊĠĠĠ Ġprivate Ġval Ġcr Ġ= Ġcontext . content Resolver ĊĊĠĠĠ Ġfun Ġget Attachment ( message : ĠLong ): ĠList < Part > Ġ= ĊĠĠĠĠĠĠĠ Ġcr . map ( URI _ PART , Ġ"$ MSG _ ID Ġ= Ġ$ message ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpart Id Ġ= Ġit . getLong (_ ID ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmime type Ġ= Ġit . getString ( CONTENT _ TYPE ) Ġ?: Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġit . getString ("_ data ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( mime type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" text / plain " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart ( text Ġ= Ġdata ?. let Ġ{ Ġget M ms Text ( part Id ) Ġ} Ġ?: Ġit . getString ( TEXT )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" application / sm il " Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ" Ign oring Ġ$ mime type : Ġ${ it . getString ( TEXT )} ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( context . cacheDir (" m ms "), ĠUUID . randomUUID (). toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcr . open InputStream ("$ URI _ PART /$ part Id ". to Uri ()) ?. writeTo ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPart ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġattachment Ġ= ĠAttachment ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmime _ type Ġ= Ġmime type , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfile _ name Ġ= Ġit . getString ( NAME ) Ġ?: ĠUUID . randomUUID (). toString (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath _ on _ disk Ġ= Ġfile . absolute Path , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġget M ms Text ( id : ĠLong ) Ġ= ĊĠĠĠĠĠĠĠ Ġcr . open InputStream ("$ URI _ PART /$ id ". to Uri ()) ?. use Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠInputStreamReader ( it , ĠUTF _ 8 ). read Lines (). join ToString ("") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġdata Ġclass ĠPart ( ĊĠĠĠĠĠĠĠ Ġvar Ġtext : ĠString ? Ġ= Ġnull , ĊĠĠĠĠĠĠĠ Ġvar Ġattachment : ĠAttachment ? Ġ= Ġnull , ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠTAG Ġ= Ġ" Part Provider " ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠURI _ PART Ġ= Ġ"${ Tele phony . M ms . CONTENT _ URI }/ part ". to Uri () ĊĠĠĠ Ġ} Ċ }