/* Ċ Ġ* ĠMIT ĠLicense Ċ Ġ* Ċ Ġ* ĠCopyright Ġ( c ) Ġ 2 0 2 1 ĠAnd re - max Ċ Ġ* Ċ Ġ* ĠPermission Ġis Ġhereby Ġgranted , Ġfree Ġof Ġcharge , Ġto Ġany Ġperson Ġobtaining Ġa Ġcopy Ċ Ġ* Ġof Ġthis Ġsoftware Ġand Ġassociated Ġdocumentation Ġfiles Ġ( the Ġ" Software "), Ġto Ġdeal Ċ Ġ* Ġin Ġthe ĠSoftware Ġwithout Ġrestriction , Ġincluding Ġwithout Ġlimitation Ġthe Ġrights Ċ Ġ* Ġto Ġuse , Ġcopy , Ġmodify , Ġmerge , Ġpublish , Ġdistribute , Ġsublicense , Ġand / or Ġsell Ċ Ġ* Ġcopies Ġof Ġthe ĠSoftware , Ġand Ġto Ġpermit Ġpersons Ġto Ġwhom Ġthe ĠSoftware Ġis Ċ Ġ* Ġfurnished Ġto Ġdo Ġso , Ġsubject Ġto Ġthe Ġfollowing Ġconditions : Ċ Ġ* Ċ Ġ* ĠThe Ġabove Ġcopyright Ġnotice Ġand Ġthis Ġpermission Ġnotice Ġshall Ġbe Ġincluded Ġin Ġall Ċ Ġ* Ġcopies Ġor Ġsubstantial Ġportions Ġof Ġthe ĠSoftware . Ċ Ġ* Ċ Ġ* ĠTHE ĠSOFTWARE ĠIS ĠPROVIDED Ġ" AS ĠIS ", ĠWITHOUT ĠWARRANTY ĠOF ĠANY ĠKIND , ĠEXPRESS ĠOR Ċ Ġ* ĠIMPLIED , ĠINCLUDING ĠBUT ĠNOT ĠLIMITED ĠTO ĠTHE ĠWARRANTIES ĠOF ĠMERCHANTABILITY , Ċ Ġ* ĠFITNESS ĠFOR ĠA ĠPARTICULAR ĠPURPOSE ĠAND ĠNONINFRINGEMENT . ĠIN ĠNO ĠEVENT ĠSHALL ĠTHE Ċ Ġ* ĠAUTHORS ĠOR ĠCOPYRIGHT ĠHOLDERS ĠBE ĠLIABLE ĠFOR ĠANY ĠCLAIM , ĠDAMAGES ĠOR ĠOTHER Ċ Ġ* ĠLIABILITY , ĠWHETHER ĠIN ĠAN ĠACTION ĠOF ĠCONTRACT , ĠTORT ĠOR ĠOTHERWISE , ĠARISING ĠFROM , Ċ Ġ* ĠOUT ĠOF ĠOR ĠIN ĠCONNECTION ĠWITH ĠTHE ĠSOFTWARE ĠOR ĠTHE ĠUSE ĠOR ĠOTHER ĠDEALINGS ĠIN ĠTHE Ċ Ġ* ĠSOFTWARE . Ċ Ġ*/ Ċ Ċ package Ġcom . andre _ max . tik tok clone . presentation . ui . custom _ views Ċ Ċ import Ġandroid . annotation . Target Api Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . graphics . Type face Ċ import Ġandroid . os . Build Ċ import Ġandroid . util . Attribute Set Ċ import Ġandroid . util . Typed Value Ċ import Ġandroid . view . View Ċ import Ġandroidx . core . content . res . Resources Compat Ċ import Ġcom . andre _ max . tik tok clone . R Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġcom . twitter . sdk . android . core . Callback Ċ import Ġcom . twitter . sdk . android . core . Twitter Ċ import Ġcom . twitter . sdk . android . core . Twitter Core Ċ import Ġcom . twitter . sdk . android . core . Twitter Session Ċ import Ġcom . twitter . sdk . android . core . identity . Twitter Auth Client Ċ import Ġcom . twitter . sdk . android . core . identity . Twitter Login Button Ċ import Ġcom . twitter . sdk . android . core . internal . Common Utils Ċ import Ġjava . lang . ref . Weak Reference Ċ Ċ class ĠCustom Twitter Login Button ( context : ĠContext , Ġattrs : ĠAttributeSet ): ĠMaterial Button ( context , Ġattrs ) Ġ{ ĊĊĠĠĠ Ġval Ġactivity Ref : ĠWeak Reference < Activity ?> ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Volatile ĊĠĠĠ Ġvar Ġauth Client : ĠTwitter Auth Client ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġcallback : ĠCallback < Twitter Session >? Ġ= Ġnull ĊĠĠĠ Ġvar Ġthe ClickListener : ĠOn ClickListener ? Ġ= Ġnull ĊĊĠĠĠ Ġ@ Target Api ( Build . VERSION _ CODES . LO L LI POP ) ĊĠĠĠ Ġprivate Ġfun Ġsetup Button () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġres Ġ= Ġresources ĊĠĠĠĠĠĠĠ Ġsuper . set Compound Draw ables With Intr insic Bounds ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠResources Compat . get Drawable ( res , ĠR . drawable . tw __ ic _ logo _ default , Ġnull ), Ġnull , Ġnull , Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . set Compound Drawable Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . get Dimension Pixel Size ( R . dim en . tw __ login _ btn _ drawable _ padding ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . setText ( R . string . tw __ login _ btn _ txt ) ĊĠĠĠĠĠĠĠ Ġsuper . setTextColor ( Resources Compat . getColor ( res , ĠR . color . tw __ solid _ white , Ġnull )) ĊĠĠĠĠĠĠĠ Ġset Text Size ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTyped Value . COMPLEX _ UNIT _ PX , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . get Dimension Pixel Size ( R . dim en . tw __ login _ btn _ text _ size ). toFloat () ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . setType face ( Type face . DEFAULT _ BOLD ) ĊĠĠĠĠĠĠĠ Ġsuper . set Padding ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . get Dimension Pixel Size ( R . dim en . tw __ login _ btn _ left _ padding ), Ġ 0 , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġres . get Dimension Pixel Size ( R . dim en . tw __ login _ btn _ right _ padding ), Ġ 0 ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġsuper . setBackground Resource ( R . drawable . tw __ login _ btn ) ĊĠĠĠĠĠĠĠ Ġsuper . setOnClickListener ( Login ClickListener ()) ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . LO L LI POP ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . set All Caps ( false ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCall Ġthis Ġmethod Ġwhen Ġ[ android . app . Activity . on Activity Result ] ĊĠĠĠĠ Ġ* Ġis Ġcalled Ġto Ġcomplete Ġthe Ġauthorization Ġflow . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ param Ġrequest Code Ġthe Ġrequest Ġcode Ġused Ġfor ĠSSO ĊĠĠĠĠ Ġ* Ġ@ param ĠresultCode Ġthe Ġresult Ġcode Ġreturned Ġby Ġthe ĠSSO Ġactivity ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġthe Ġresult Ġdata Ġreturned Ġby Ġthe ĠSSO Ġactivity ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġget Twitter Auth Client () !!. request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Twitter Auth Client () !!. on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGets Ġthe Ġactivity . ĠOverride Ġthis Ġmethod Ġif Ġthis Ġbutton Ġwas Ġcreated Ġwith Ġa Ġnon - Activity ĊĠĠĠĠ Ġ* Ġcontext . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun ĠgetActivity (): ĠActivity ? Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġis ĠActivity Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcontext Ġas ĠActivity ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠisIn Edit Mode Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ĠIllegalStateException ( ERROR _ MSG _ NO _ ACTIVITY ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCould n 't Ġfind Ġa Ġway Ġto Ġinvoke Ġthe Ġclick Ġlistener Ġof Ġthe Ġmaterial Ġbutton ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġset The ClickListener ( onClick : Ġ( View ) Ġ-> ĠUnit ) Ġ{ ĊĠĠĠĠĠĠĠ Ġthe ClickListener Ġ= ĠOn ClickListener Ġ{ ĠonClick ( it ) Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġinner Ġclass ĠLogin ClickListener Ġ: ĠOn ClickListener Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Callback ( callback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcheck Activity ( activity Ref ?. get ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Twitter Auth Client ()?. authorize ( activity Ref ?. get (), Ġcallback ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthe ClickListener ?. onClick ( view ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Callback ( callback : ĠCallback < *> ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( callback Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . log OrThrow IllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTwitter Core . TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Callback Ġmust Ġnot Ġbe Ġnull , Ġdid Ġyou Ġcall Ġset Callback ?" ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun Ġcheck Activity ( activity : ĠActivity ?) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( activity Ġ== Ġnull Ġ|| Ġactivity . is Finish ing ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠCommon Utils . log OrThrow IllegalStateException ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTwitter Core . TAG , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠERROR _ MSG _ NO _ ACTIVITY ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Twitter Auth Client (): ĠTwitter Auth Client ? Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( auth Client Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsynchronized ( Twitter Login Button :: class . java ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( auth Client Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġauth Client Ġ= ĠTwitter Auth Client () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġauth Client ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcheck Twitter Core And Enable () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Default Ġ( Enabled ) Ġin Ġedit Ġmode ĊĠĠĠĠĠĠĠ Ġif Ġ( isIn Edit Mode ) Ġreturn ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTwitter Core . getInstance () ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( ex : ĠIllegalStateException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Disable Ġif ĠTwitter Core Ġhasn 't Ġstarted ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTwitter . getLogger (). e ( TAG , Ġex . message ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis Enabled Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġval ĠTAG Ġ= ĠTwitter Core . TAG ĊĠĠĠĠĠĠĠ Ġval ĠERROR _ MSG _ NO _ ACTIVITY Ġ= Ġ(" Twitter Login Button Ġrequires Ġan Ġactivity ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ+ Ġ" ĠOverride ĠgetActivity Ġto Ġprovide Ġthe Ġactivity Ġfor Ġthis Ġbutton .") ĊĊĠĠĠ Ġ} Ċ } Ċ