package Ġjp . co . f ss oft . verbose . service Ċ Ċ import Ġandroid . app . Service Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . IB inder Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . core . app . Notification Compat Ċ import Ġjp . co . f ss oft . verbose . R Ċ import Ġjp . co . f ss oft . verbose . api . Image Object Ċ import Ġjp . co . f ss oft . verbose . api . Twitter Api Media Upload Ċ import Ġjp . co . f ss oft . verbose . api . Twitter Api Statuses Update Ċ import Ġjp . co . f ss oft . verbose . database . Database Helper Ċ import Ġjp . co . f ss oft . verbose . utility . Json Ċ import Ġjava . io . ByteArray OutputStream Ċ Ċ /** Ċ Ġ* ĠPost Ġtweet Ġservice Ċ Ġ* Ċ Ġ* Ġ@ constructor ĠCreate Ġempty ĠPost Ġtweet Ġservice Ċ Ġ*/ Ċ class ĠPost Tweet Service Ġ: ĠService () Ċ { ĊĠĠĠ Ġcompanion Ġobject ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠTag ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġval ĠTAG Ġ= ĠPost Tweet Service :: class . qualified Name ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOn Ġbind ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġp 0 ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon Bind ( p 0 : ĠIntent ?): ĠI Binder ? ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"[ START ] on Bind (${ p 0 }) ") ĊĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠOn Ġstart Ġcommand ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġintent ĊĠĠĠĠ Ġ* Ġ@ param Ġflags ĊĠĠĠĠ Ġ* Ġ@ param Ġstart Id ĊĠĠĠĠ Ġ* Ġ@ return ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonStart Command ( intent : ĠIntent ?, Ġflags : ĠInt , Ġstart Id : ĠInt ): ĠInt ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"[ START ] onStart Command (${ intent }, Ġ${ flags }, Ġ${ start Id }) ") ĊĠĠĠĠĠĠĠ Ġval Ġnotification Ġ= ĠNotification Compat . Builder ( application Context , Ġ" channel _ 1 "). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Title (" çı¾åľ¨ ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Content Text (" éĢģ ä¿¡ ä¸Ń ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Small Icon ( R . drawable . tweet _ pen ) ĊĠĠĠĠĠĠĠ Ġ}. build () ĊĊĠĠĠĠĠĠĠ Ġval Ġbody Params Ġ= Ġmutable Map Of ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" status " Ġto Ġintent ?. getString Extra (" status ") !! , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ" display _ coordinates " Ġto Ġfalse . toString () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġval Ġreply Id Ġ= Ġintent . getLong Extra (" in _ reply _ to _ status _ id ", Ġ- 1 L ) ĊĠĠĠĠĠĠĠ Ġif Ġ( reply Id Ġ!= Ġ- 1 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġbody Params [" in _ reply _ to _ status _ id "] Ġ= Ġreply Id . toString () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġval Ġmy Ġ= Ġintent . getLong Extra (" my ", Ġ 0 ) ĊĊĠĠĠĠĠĠĠ Ġval Ġimages Ġ= Ġintent . getString ArrayList Extra (" images ") ĊĠĠĠĠĠĠĠ Ġif Ġ( images ?. size Ġ!= Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmedi as Ġ= Ġmutable ListOf < Long >() ĊĠĠĠĠĠĠĠĠĠĠĠ Ġimages ?. forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġstream Ġ= Ġcontent Resolver . open InputStream ( Uri . parse ( it )) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdata Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbuffer Ġ= ĠByteArray ( 1 0 2 4 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġwhile Ġ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġread Ġ= Ġstream . read ( buffer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( read Ġ< Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbreak ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdata . write ( buffer , Ġ 0 , Ġread ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġparams Ġ= Ġmap Of ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" media _ data " Ġto Ġandroid . util . Base 6 4 . encode ToString ( data . toByteArray (), Ġandroid . util . Base 6 4 . NO _ WRAP ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTwitter Api Media Upload ( my , ĠDatabase Helper ( application Context ). readable Database ). start ( params ). callback Ġ= Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġit !! ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġpost Data Ġ= ĠJson . json Decode ( Image Object . serializer (), Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedi as . add ( post Data . id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( medi as . size Ġ== Ġimages . size ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġvar Ġmedia Ids Ġ= Ġ"" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedi as . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Ids Ġ+= Ġ"${ it . toString () }," ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmedia Ids . remove Suffix (",") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbody Params [" media _ ids "] Ġ= Ġmedia Ids ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpost Tweet ( my , Ġbody Params ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpost Tweet ( my , Ġbody Params ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġstart Foreground ( 1 , Ġnotification ) ĊĠĠĠĠĠĠĠ ĠLog . d ( TAG , Ġ"[ END ] onStart Command (${ intent }, Ġ${ flags }, Ġ${ start Id }) ") ĊĊĠĠĠĠĠĠĠ Ġreturn ĠSTART _ STICK Y ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠPost Ġtweet ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġmy ĊĠĠĠĠ Ġ* Ġ@ param Ġparam ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġpost Tweet ( my : ĠLong , Ġparam : ĠMap < String , ĠString >) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ ĠTwitter Api Statuses Update ( my , ĠDatabase Helper ( application Context ). readable Database ). start ( param ). callback Ġ= Ġ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( it Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetString ( R . string . post _ tweet _ fail ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( application Context , ĠgetString ( R . string . post _ tweet _ success ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstop Foreground ( true ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ