/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠSer ge j ĠSh af aren ka , Ġwww . half bit . de Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġde . half bit . tools . autoplay Ċ Ċ import Ġcom . android . build . gradle . App Extension Ċ import Ġcom . android . build . gradle . api . A pk Variant Output Ċ import Ġcom . android . build . gradle . api . Application Variant Ċ import Ġcom . android . builder . model . Version Ċ import Ġde . half bit . tools . autoplay . publisher .* Ċ import Ġorg . gradle . api . Plugin Ċ import Ġorg . gradle . api . Project Ċ import Ġorg . gradle . kotlin . dsl . invoke Ċ import Ġorg . gradle . kotlin . dsl . register Ċ import Ġjava . io . File Ċ import Ġjava . util .* Ċ Ċ internal Ġconst Ġval ĠTASK _ GROUP Ġ= Ġ" Publishing " Ċ internal Ġconst Ġval ĠP LU GIN _ ID Ġ= Ġ" android - autoplay " Ċ internal Ġconst Ġval ĠEXT ENSION _ NAME Ġ= Ġ" autoplay " Ċ Ċ internal Ġclass ĠPlay Publisher Plugin Ġ: ĠPlugin < Project > Ġ{ ĊĊĠĠĠ Ġoverride Ġfun Ġapply ( project : ĠProject ) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġval Ġextension Ġ= Ġproject . extensions ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. create ( EXTENSION _ NAME , ĠAut oplay Publisher Extension :: class . java ) ĊĊĠĠĠĠĠĠĠ Ġval Ġandroid App Extension Ġ= Ġproject . require Android App Extension () ĊĠĠĠĠĠĠĠ Ġandroid App Extension . application Variants . when Object Added Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( build Type . isDebug gable ) Ġreturn @ when Object Added ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġapplication Variant Ġ= Ġthis @ when Object Added ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvariant Name Ġ= Ġname . capitalize () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġwhen Ġ( extension . artifact Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . A pk . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister (" publish A pk $ variant Name ", ĠPublish Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Publish Ġ$ variant Name Ġapk , Ġmapping Ġand Ġrelease - notes Ġto ĠGoogle ĠPlay ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠTASK _ GROUP ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Id Ġ= Ġapplication Variant . application Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Type Ġ= ĠArtifact Type . A pk ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts Ġ= Ġcollect Artifacts ( Artifact Type . A pk , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġob fusc ation Mapping File Ġ= Ġget Ob fusc ation Mapping File () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Track Ġ= Ġextension . get Release Track () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Status Ġ= Ġextension . get Release Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Notes Ġ= Ġextension . get Release Notes ( project . project Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ= Ġextension . get Credentials () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . Bundle . name Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġproject . tasks Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġregister (" publish Bundle $ variant Name ", ĠPublish Task :: class ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdescription Ġ= Ġ" Publish Ġ$ variant Name Ġbundle Ġand Ġrelease - notes Ġto ĠGoogle ĠPlay ." ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgroup Ġ= ĠTASK _ GROUP ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġapplication Id Ġ= Ġapplication Variant . application Id ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Type Ġ= ĠArtifact Type . Bundle ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġartifacts Ġ= Ġcollect Artifacts ( Artifact Type . Bundle , Ġproject ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Track Ġ= Ġextension . get Release Track () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Status Ġ= Ġextension . get Release Status () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Notes Ġ= Ġextension . get Release Notes ( project . project Dir ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcredentials Ġ= Ġextension . get Credentials () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠMIN IMAL _ ANDROID _ PLUGIN _ VERSION Ġ= Ġ" 3 . 0 . 1 " ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠApplication Variant . collect Artifacts ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġartifact Type : ĠArtifact Type , Ġproject : ĠProject ĊĠĠĠĠĠĠĠ Ġ): ĠList < File > Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( artifact Type ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . A pk Ġ-> Ġthis . outputs ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Is Instance < A pk Variant Output >() ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġit . outputFile Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠArtifact Type . Bundle Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġarch ives Base Name Ġ= Ġproject . properties [" archives Base Name "] Ġas ĠString ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠlistOf ( File ( project . build Dir , Ġ" outputs / bundle /$ name /$ archives Base Name . aab ")) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠApplication Variant . get Ob fusc ation Mapping File (): ĠFile ? Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġmapping Ġ= Ġmapping File ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( mapping Ġ== Ġnull Ġ|| Ġmapping . length () Ġ== Ġ 0 L ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġmapping ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠAut oplay Publisher Extension . get Release Track (): ĠRelease Track Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( track ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġerror ("$ EXTENSION _ NAME Ġ{ Ġtrack Ġ} Ġproperty Ġis Ġrequired .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Track . Internal . name Ġ-> ĠRelease Track . Internal ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Track . Alpha . name Ġ-> ĠRelease Track . Alpha ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Track . Beta . name Ġ-> ĠRelease Track . Beta ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTR ACK _ ROL LO UT Ġ-> ĠRelease Track . R ollo ut ( user Fraction Ġ?: Ġ 1 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Track . Production . name Ġ-> ĠRelease Track . Production ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġtrack : Ġ$ track ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠAut oplay Publisher Extension . get Release Status (): ĠRelease Status Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġwhen Ġ( status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull Ġ-> Ġerror ("$ EXTENSION _ NAME Ġ{ Ġstatus Ġ} Ġproperty Ġis Ġrequired .") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Status . Completed . name Ġ-> ĠRelease Status . Completed ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Status . Draft . name Ġ-> ĠRelease Status . Draft ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Status . Hal ted . name Ġ-> ĠRelease Status . Hal ted ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Status . InProgress . name Ġ-> ĠRelease Status . InProgress ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġerror (" Unsupported Ġstatus : Ġ$ status ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠAut oplay Publisher Extension . get Release Notes ( rootDir : ĠFile ): ĠList < Release Notes > Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrelease Note Path Ġ= Ġthis . release Notes Path Ġ?: Ġerror ("$ EXTENSION _ NAME Ġ{ Ġrelease Notes Path Ġ} Ġis Ġrequired .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtrack Directory Ġ= ĠFile ( rootDir , Ġ"$ release Note Path /$ track ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( track Directory . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtrack Directory . list Files () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. filter Ġ{ Ġit . isFile Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map NotNull Ġ{ Ġlocalized File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( localized File . exists ()) Ġlocalized File Ġelse Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Ġ{ Ġrelease Note File Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠRelease Notes ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Note File . getLocale (), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrelease Note File ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġempty List () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠAut oplay Publisher Extension . get Credentials (): ĠCredentials Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsecret Json Ġ= Ġif Ġ( secret Json Base 6 4 Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠBase 6 4 . get Decoder (). decode ( secret Json Base 6 4 ). toString ( Charsets . UTF _ 8 ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĠCredentials ( secret Json , Ġsecret Json Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠProject . require Android App Extension (): ĠApp Extension Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcurrent Ġ= ĠVersion . ANDROID _ GRAD LE _ PLUGIN _ VERSION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġexpected Ġ= ĠMIN IMAL _ ANDROID _ PLUGIN _ VERSION ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Ġ< Ġexpected ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Plugin Ġ'$ PLUGIN _ ID ' Ġrequires Ġ' com . android . application ' Ġplugin Ġversion Ġ$ expected Ġor Ġhigher ," Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġwhile Ġyours Ġis Ġ$ current . ĠUpdate Ġandroid Ġgradle Ġplugin Ġand Ġtry Ġagain .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġproject . extensions . findBy Type ( App Extension :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġerror (" Required Ġ' com . android . application ' Ġplugin Ġmust Ġbe Ġadded Ġprior Ġ'$ PLUGIN _ ID ' Ġplugin .") ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġprivate Ġfun ĠFile . getLocale (): ĠString Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( name . length Ġ< Ġ 5 Ġ|| Ġname . substring ( 2 , Ġ 3 ) Ġ!= Ġ"- ") Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror (" Release Ġnotes Ġmust Ġbe Ġnamed Ġusing Ġthe Ġfollowing Ġformat :" Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Ġ< language >-< COUNTRY >. txt , Ġe . g . Ġen - US . txt . ĠFound Ġname : Ġ$ this ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġname . substring ( 0 , Ġ 5 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} Ċ Ċ }