package Ġcom . code path . apps . rest client template Ċ Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Color Ċ import Ġandroid . n fc . Tag Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . text . Editable Ċ import Ġandroid . text . Text Watcher Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . TextView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . code path . apps . rest client template . models . Tweet Ċ import Ġcom . code path . as yn ch ttp client . callback . Json HttpResponse Handler Ċ import Ġokhttp 3 . Headers Ċ Ċ class ĠCompose Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġlateinit Ġvar Ġet Compose : ĠEditText ĊĠĠĠ Ġlateinit Ġvar Ġbtn Tweet : ĠButton ĊĠĠĠ Ġlateinit Ġvar Ġclient : ĠTwitter Client ĊĠĠĠ Ġlateinit Ġvar Ġtv Character Count : ĠTextView ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ compose ) ĊĊĠĠĠĠĠĠĠ Ġet Compose Ġ= ĠfindViewById ( R . id . et Tweet Compose ) ĊĠĠĠĠĠĠĠ Ġbtn Tweet Ġ= ĠfindViewById ( R . id . btn Tweet ) ĊĠĠĠĠĠĠĠ Ġtv Character Count Ġ= ĠfindViewById ( R . id . tv Character Count ) ĊĠĠĠĠĠĠĠ Ġval Ġoriginal Tweet Color Ġ= Ġtv Character Count . current TextColor ĊĊĠĠĠĠĠĠĠ Ġclient Ġ= ĠTwitter Application . get RestClient ( this ) ĊĊĠĠĠĠĠĠĠ Ġet Compose . add TextChanged Listener ( object : ĠText Watcher { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġbefore TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon TextChanged ( p 0 : ĠCharSequence ?, Ġp 1 : ĠInt , Ġp 2 : ĠInt , Ġp 3 : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġafter TextChanged ( s : ĠEdit able ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" updated Ġtext ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlength Of Tweet Ġ= Ġet Compose . text . toString (). length ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġremaining Tweet Length Ġ= Ġ 2 8 0 Ġ- Ġlength Of Tweet ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcharacters Remaining Ġ= Ġ" Characters ĠRem aining : Ġ$ remaining Tweet Length / 2 8 0 " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Character Count . text Ġ= Ġcharacters Remaining ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġchange Ġcolor Ġdepending Ġon Ġthe Ġnumber Ġof Ġremaining Ġcharacters ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( remaining Tweet Length Ġ< Ġ 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Character Count . setTextColor ( Color . parse Color ("# FF 0 0 0 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv Character Count . setTextColor ( original Tweet Color ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠHandling Ġuser 's Ġclick Ġon Ġthe Ġtweet Ġbutton ĊĠĠĠĠĠĠĠ Ġbtn Tweet . setOnClickListener { ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġcontent Ġfrom Ġet Compose ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Content Ġ= Ġet Compose . text . toString () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠRequirements ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 1 . ĠMake Ġsure Ġthe Ġtweet Ġis Ġnot Ġempty ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( tweet Content . isEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Empty ĠT weets Ġnot Ġallowed !", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġ 2 . ĠMake Ġsure Ġthe Ġtweet Ġis Ġunder Ġcharacter Ġlimit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġif Ġ( tweet Content . length Ġ> Ġ 2 8 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Tweet Ġis Ġtoo Ġlong . Ġ 2 8 0 Ġcharacter Ġlimit ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġclient . publish Tweet ( tweet Content , Ġobject : ĠJson HttpResponse Handler (){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Failure ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstatusCode : ĠInt , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġheaders : ĠHeaders ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresponse : ĠString ?, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrowable : ĠThrowable ? ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . e ( TAG , Ġ" Failed Ġto Ġpublish Ġthe Ġtweet ", Ġthrowable ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonSuccess ( statusCode : ĠInt , Ġheaders : ĠHeaders ?, Ġjson : ĠJSON ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i ( TAG , Ġ" Successfully Ġpublished Ġthe Ġtweet !") ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtweet Ġ= ĠTweet . fromJson ( json . jsonObject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" tweet ", Ġtweet ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Result ( RESULT _ OK , Ġintent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" Compose Activity " ĊĠĠĠ Ġ} Ċ }