/* ĊĠĠ ĠCopyright Ġ 2 0 1 7 - 2 0 2 0 ĠChar les ĠK orn . ĊĊĠĠ Ġ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 Ġb ate ct . telemetry Ċ Ċ import Ġb ate ct . cli . CommandLine Options Parser Ċ import Ġb ate ct . os . Console Info Ċ import Ġb ate ct . ui . Console Ċ import Ġb ate ct . ui . Output Style Ċ import Ġb ate ct . ui . Prompt Ċ import Ġb ate ct . ui . Yes No Answer Ċ Ċ class ĠTe lemetry Consent Prompt ( ĊĠĠĠ Ġprivate Ġval Ġconfiguration Store : ĠTe lemetry Configuration Store , ĊĠĠĠ Ġprivate Ġval Ġdisabled On CommandLine : ĠBoolean ?, ĊĠĠĠ Ġprivate Ġval Ġrequested Output Style : ĠOutput Style ?, ĊĠĠĠ Ġprivate Ġval Ġconsole Info : ĠConsole Info , ĊĠĠĠ Ġprivate Ġval Ġci Environment Detector : ĠCI Environment Detector , ĊĠĠĠ Ġprivate Ġval Ġconsole : ĠConsole , ĊĠĠĠ Ġprivate Ġval Ġprompt : ĠPrompt Ċ ) Ġ{ ĊĠĠĠ Ġfun Ġask For Consent If Required () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( configuration Store . current Configuration . state Ġ!= ĠCon sent State . None ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( disabled On CommandLine Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( requested Output Style Ġ== ĠOutput Style . Quiet ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġconsole . println (" b ate ct Ġcan Ġcollect Ġanonymous Ġenvironment , Ġusage Ġand Ġperformance Ġinformation .") ĊĠĠĠĠĠĠĠ Ġconsole . println (" This Ġinformation Ġdoes Ġnot Ġinclude Ġpersonal Ġor Ġsensitive Ġinformation , Ġand Ġis Ġused Ġonly Ġto Ġhelp Ġimprove Ġb ate ct .") ĊĠĠĠĠĠĠĠ Ġconsole . println (" More Ġinformation Ġis Ġavailable Ġat Ġhttps :// b ate ct . dev / Privacy . html , Ġincluding Ġdetails Ġof Ġwhat Ġinformation Ġis Ġcollected Ġand Ġa Ġformal Ġprivacy Ġpolicy .") ĊĠĠĠĠĠĠĠ Ġconsole . println () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( console Info . stdin Is TTY Ġ&& Ġ! ci Environment Detector . detect (). sus pect Running On CI ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġprompt For Response () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println (" It Ġlooks Ġlike Ġb ate ct Ġis Ġrunning Ġin Ġa Ġnon - interactive Ġsession , Ġso Ġit Ġcan 't Ġask Ġfor Ġpermission Ġto Ġcollect Ġand Ġreport Ġthis Ġinformation . ĠTo Ġsuppress Ġthis Ġmessage :") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println ("* ĠTo Ġallow Ġcollection Ġof Ġdata , Ġset Ġthe ĠB ATE CT _ ENABLE _ TELE METRY Ġenvironment Ġvariable Ġto Ġ' true ', Ġor Ġrun Ġ'./ b ate ct Ġ-- ${ CommandLine Options Parser . per manently Enable Telemetry Flag Name }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println ("* ĠTo Ġprevent Ġcollection Ġof Ġdata , Ġset Ġthe ĠB ATE CT _ ENABLE _ TELE METRY Ġenvironment Ġvariable Ġto Ġ' false ', Ġor Ġrun Ġ'./ b ate ct Ġ-- ${ CommandLine Options Parser . per manently Disable Telemetry Flag Name }'. ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println (" No Ġdata Ġwill Ġbe Ġcollected Ġfor Ġthis Ġsession .") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġconsole . println () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġprompt For Response () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġconsent State Ġ= Ġwhen Ġ( prompt . ask Yes No Question (" Is Ġit ĠOK Ġfor Ġb ate ct Ġto Ġcollect Ġthis Ġinformation ? ")) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYes No Answer . Yes Ġ-> ĠCon sent State . Telemetry Allowed ĊĠĠĠĠĠĠĠĠĠĠĠ ĠYes No Answer . No Ġ-> ĠCon sent State . Telemetry Disabled ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġnew Configuration Ġ= Ġconfiguration Store . current Configuration . copy ( state Ġ= Ġconsent State ) ĊĠĠĠĠĠĠĠ Ġconfiguration Store . save Configuration ( new Configuration ) ĊĠĠĠ Ġ} Ċ } Ċ