/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 1 8 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ Ġ* Ċ Ġ* Ġ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 Ġcom . android . tools . idea . stats Ċ Ċ import Ġcom . android . tools . idea . Option Ċ import Ġcom . android . tools . idea . Survey Ċ import Ġcom . intellij . openapi . action System . An ActionEvent Ċ import Ġcom . intellij . openapi . application . Application Manager Ċ import Ġcom . intellij . openapi . project . D umb Aware Action Ċ import Ġcom . intellij . openapi . ui . Dialog Wrapper Ċ import Ġcom . intellij . ui . components . JB Label Ċ import Ġcom . intellij . util . ui . J BU I Ċ import Ġjava . awt . AW T Event Ċ import Ġjava . awt . Flow Layout Ċ import Ġjava . awt . event . ActionEvent Ċ import Ġjava . awt . event . ActionListener Ċ import Ġjava . awt . event . Item Event Ċ import Ġjava . awt . event . Item Listener Ċ import Ġjava . awt . event . Mouse Adapter Ċ import Ġjava . awt . event . MouseEvent Ċ import Ġjavax . swing . Box Ċ import Ġjavax . swing . Button Group Ċ import Ġjavax . swing . J Component Ċ import Ġjavax . swing . JPanel Ċ import Ġjavax . swing . J RadioButton Ċ Ċ private Ġconst Ġval ĠSUB MIT _ BUTTON _ TEXT Ġ= Ġ" Submit " Ċ private Ġconst Ġval ĠNEXT _ BUTTON _ TEXT Ġ= Ġ" Next " Ċ private Ġval ĠC ENTER _ PANEL _ BORDER Ġ= ĠJ BU I . B orders . empty ( 0 , Ġ 0 , Ġ 1 0 , Ġ 5 0 ) Ċ Ċ class ĠSingle Choice Dialog ( private Ġval Ġsurvey : ĠSurvey , Ġprivate Ġval Ġchoice Logger : ĠChoice Logger , Ġhas Follow up : ĠBoolean ) ĊĠ Ġ: ĠDialog Wrapper ( null ), ĠActionListener , ĠItem Listener Ġ{ ĊĠ Ġval Ġbutton Group Ġ= ĠButton Group () ĊĠ Ġprivate Ġval Ġbuttons : ĠMutable List < J RadioButton > Ġ= Ġmutable ListOf () ĊĠ Ġval Ġordering : ĠMutable List < Int > Ġ= Ġmutable ListOf () ĊĊĠ Ġval Ġcontent : ĠJ Component Ġ= ĠBox . create Vertical Box (). apply Ġ{ ĊĠĠĠ Ġborder Ġ= ĠC ENTER _ PANEL _ BORDER ĊĠĠĠ Ġadd ( JB Label ( survey . question )) ĊĠĠĠ Ġadd ( Box . create Vertical Str ut ( J BU I . scale ( 1 0 ))) ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġ 0 Ġuntil Ġsurvey . options Count ) Ġ{ ĊĠĠĠĠĠ Ġordering . add ( i ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġif Ġ( survey . has Random Order () Ġ&& Ġsurvey . random Order ) Ġ{ ĊĠĠĠĠĠ Ġordering . shuffle () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfor Ġ( i Ġin Ġordering ) Ġ{ ĊĠĠĠĠĠ Ġadd ( create Button ( survey . options List [ ordering [ i ]])) ĊĠĠĠ Ġ} ĊĠ Ġ} ĊĊĠ Ġinit Ġ{ ĊĠĠĠ Ġis Auto Adjust able Ġ= Ġtrue ĊĠĠĠ Ġset OK ButtonText ( ĊĠĠĠĠĠ Ġif Ġ( has Follow up ) Ġ{ ĊĠĠĠĠĠĠĠ ĠNEXT _ BUTTON _ TEXT ĊĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠ ĠSUB MIT _ BUTTON _ TEXT ĊĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ) ĊĠĠĠ Ġset Resizable ( false ) ĊĠĠĠ Ġtitle Ġ= Ġsurvey . title ĊĠĠĠ Ġis OK Action Enabled Ġ= Ġfalse ĊĠĠĠ Ġis Modal Ġ= Ġfalse ĊĊĠĠĠ Ġinit () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġcreate Center Panel (): ĠJ Component Ġ= Ġcontent ĊĊĠ Ġoverride Ġfun Ġget Preferred Focused Component (): ĠJ Component ? Ġ= Ġbutton Group . elements . nextElement () ĊĊĠ Ġoverride Ġfun Ġdo OK Action () Ġ{ ĊĠĠĠ Ġchoice Logger . log ( survey . name , Ġordering [ buttons . indexOf First Ġ{ Ġit . isSelected Ġ} ]) ĊĠĠĠ Ġsuper . do OK Action () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun Ġdo Cancel Action ( source : ĠA WT Event ?) Ġ{ ĊĠĠĠ Ġchoice Logger . cancel ( survey . name ) ĊĠĠĠ Ġsuper . do Cancel Action ( source ) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠImplementation Ġof Ġ[ Item Listener ] Ġto Ġhandle Ġkeyboard Ġselection . ĊĠĠ Ġ*/ ĊĠ Ġoverride Ġfun Ġitem StateChanged ( e : ĠItem Event ) Ġ{ ĊĠĠĠ Ġhandle Selection () ĊĠ Ġ} ĊĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAction Event ) Ġ{ ĊĠĠĠ Ġhandle Selection () ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġhandle Selection () Ġ{ ĊĠĠĠ Ġis OK Action Enabled Ġ= Ġbuttons . any Ġ{ Ġit . isSelected Ġ} ĊĠ Ġ} ĊĊĠ Ġprivate Ġfun Ġcreate Button ( option : ĠOption ) Ġ= ĠJPanel ( Flow Layout ( Flow Layout . LEFT )). apply Ġ{ ĊĠĠĠ Ġalignment X Ġ= ĠJPanel . LEFT _ ALIGNMENT ĊĠĠĠ Ġval Ġbutton Ġ= ĠJ RadioButton (). apply Ġ{ ĊĠĠĠĠĠ Ġadd ActionListener ( this @ Single Choice Dialog ) ĊĠĠĠĠĠ Ġadd Item Listener ( this @ Single Choice Dialog ) ĊĠĠĠĠĠ Ġbutton Group . add ( this ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġadd ( button ) ĊĠĠĠ Ġbuttons . add ( button ) ĊĠĠĠ Ġadd ( JB Label ( option . label , Ġoption . icon , ĠJ B Label . LEFT ). apply Ġ{ ĊĠĠĠĠĠ Ġadd Mouse Listener ( object Ġ: ĠMouse Adapter () Ġ{ ĊĠĠĠĠĠĠĠ Ġoverride Ġfun Ġmouse Clicked ( e : ĠMouseEvent ) Ġ{ ĊĠĠĠĠĠĠĠĠĠ Ġdelegate Action To Button ( button , Ġe ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠ Ġ}) ĊĠĠĠ Ġ}) ĊĠ Ġ} ĊĊĠ Ġ/** ĊĠĠ Ġ* ĠSelect Ġthe Ġbutton Ġwhen Ġthe Ġuser Ġclicks Ġthe Ġlabel ĊĠĠ Ġ*/ ĊĠ Ġprivate Ġfun Ġdelegate Action To Button ( button : ĠJ RadioButton , Ġe : ĠMouseEvent ) Ġ{ ĊĠĠĠ Ġbutton . request Focus () ĊĠĠĠ Ġbutton . isSelected Ġ= Ġtrue ĊĠĠĠ Ġbutton . action Listeners . forEach Ġ{ Ġaction Listener Ġ-> ĊĠĠĠĠĠ Ġaction Listener . action Performed ( ActionEvent ( e . source , Ġe . id , Ġbutton . action Command )) ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ Ċ class ĠShow Satisf action Dialog Action Ġ: ĠD umb Aware Action (" Show Ġsatisf action Ġdialog ") Ġ{ ĊĠ Ġoverride Ġfun ĠactionPerformed ( e : ĠAn ActionEvent ) Ġ{ ĊĠĠĠ Ġif Ġ( Application Manager . getApplication (). is Internal ) Ġ{ ĊĠĠĠĠĠ ĠAndroid Studio Usage Tracker . request User Sent iment () ĊĠĠĠ Ġ} ĊĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠ Ġthrow ĠRuntimeException ("${ Show Satisf action Dialog Action :: class . simple Name } Ġcan Ġonly Ġbe Ġcalled Ġin Ġinternal Ġbuilds ") ĊĠĠĠ Ġ} ĊĠ Ġ} Ċ } Ċ