package Ġorg . step ik . android . view . step _ quiz _ code . ui . delegate Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . graphics . drawable . Animation Drawable Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Array Adapter Ċ import Ġandroid . widget . LinearLayout Ċ import Ġandroidx . appcompat . content . res . AppCompat Resources Ċ import Ġandroidx . appcompat . widget . List Popup Window Ċ import Ġandroidx . core . graphics . drawable . Drawable Compat Ċ import Ġandroidx . core . view . is G one Ċ import Ġcom . google . android . material . tabs . Tab Layout Ċ import Ġkotlinx . android . synt hetic . main . layout _ step _ quiz _ code _ fullscreen _ run _ code . view .* Ċ import Ġorg . step ic . d roid . R Ċ import Ġorg . step ic . d roid . code . ui . Code Editor Layout Ċ import Ġorg . step ic . d roid . model . code . Programming Language Ċ import Ġorg . step ic . d roid . persistence . model . Step Persistent Wrapper Ċ import Ġorg . step ic . d roid . ui . util . Popup Helper Ċ import Ġorg . step ic . d roid . util . resolve Color Attribute Ċ import Ġorg . step ik . android . model . code . User Code Run Ċ import Ġorg . step ik . android . presentation . step _ quiz _ code . Step Quiz Code Run Presenter Ċ import Ġorg . step ik . android . presentation . step _ quiz _ code . Step Quiz Run Code View Ċ import Ġorg . step ik . android . view . ui . delegate . ViewState Delegate Ċ import Ġru . nob ird . android . view . base . ui . extension . get Drawable Compat Ċ import Ġru . nob ird . android . view . base . ui . extension . sn ackbar Ċ Ċ class ĠCode Step Run Code Delegate ( ĊĠĠĠ Ġrun Code Layout : ĠView , ĊĠĠĠ Ġprivate Ġval Ġcode Run Presenter : ĠStep Quiz Code Run Presenter , ĊĠĠĠ Ġprivate Ġval Ġfull Screen Code Tabs : ĠTab Layout , ĊĠĠĠ Ġprivate Ġval Ġcode Layout : ĠCode Editor Layout , ĊĠĠĠ Ġprivate Ġval Ġcontext : ĠContext , ĊĠĠĠ Ġprivate Ġval Ġstep Wrapper : ĠStep Persistent Wrapper Ċ ) Ġ: ĠStep Quiz Run Code View Ġ{ ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠE VAL UATION _ FRAME _ DURATION _ MS Ġ= Ġ 2 5 0 ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠRUN _ CODE _ TAB Ġ= Ġ 2 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġrun Code ScrollView Ġ= Ġrun Code Layout . data ScrollView ĊĠĠĠ Ġprivate Ġval Ġrun Code InputData Title Ġ= Ġrun Code Layout . input Data Title ĊĠĠĠ Ġprivate Ġval Ġrun Code Input Sample Picker Ġ= Ġrun Code Layout . input Data Sample Picker ĊĠĠĠ Ġprivate Ġval Ġrun Code InputData Sample Ġ= Ġrun Code Layout . input Data Sample ĊĠĠĠ Ġprivate Ġval Ġrun Code Output Data Separator Ġ= Ġrun Code Layout . output Separator ĊĠĠĠ Ġprivate Ġval Ġrun Code Output Data Title Ġ= Ġrun Code Layout . output Data Title ĊĠĠĠ Ġprivate Ġval Ġrun Code Output Data Sample Ġ= Ġrun Code Layout . output Data Sample ĊĠĠĠ Ġprivate Ġval Ġrun Code Feedback Ġ= Ġrun Code Layout . run Code Feedback ĊĠĠĠ Ġprivate Ġval Ġrun Code Fab Ġ= Ġrun Code Layout . run Code Fab ĊĠĠĠ Ġprivate Ġval Ġrun Code Action Ġ= Ġrun Code Layout . run Code Action ĊĊĠĠĠ Ġvar Ġlang : ĠString Ġ Ġ= Ġ"" ĊĠĠĠĠĠĠĠ Ġset ( value ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfield Ġ= Ġvalue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lang Ġ== ĠProgramming Language . SQL . server Print able Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample . set Hint ( R . string . step _ quiz _ code _ input _ not _ supported ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġview State Delegate Ġ= ĠView State Delegate < Step Quiz Run Code View . State >() ĊĊĠĠĠ Ġinit Ġ{ ĊĠĠĠĠĠĠĠ Ġview State Delegate . add State < Step Quiz Run Code View . State . Idle >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview State Delegate . add State < Step Quiz Run Code View . State . Loading >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Feedback ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview State Delegate . add State < Step Quiz Run Code View . State . Con sequent Loading >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Feedback , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Separator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Sample ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġview State Delegate . add State < Step Quiz Run Code View . State . User Code Run Loaded >( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Separator , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Title , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Output Data Sample ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsamples Ġ= Ġstep Wrapper ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. step ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. block ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . options ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . samples ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġempty List () ĊĊĠĠĠĠĠĠĠ Ġval Ġinput Samples Ġ= Ġsamples ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. map Indexed Ġ{ Ġindex , Ġsample Ġ-> Ġcontext . getString ( R . string . step _ quiz _ code _ spinner _ item , Ġindex Ġ+ Ġ 1 , Ġsample . first ()) Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( samples . isNotEmpty () Ġ&& Ġrun Code InputData Sample . text . isNull OrEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setText ( samples . first (). first ()) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code Input Sample Picker . is G one Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġpopup Window Ġ= ĠList Popup Window ( context ) ĊĊĠĠĠĠĠĠĠ Ġpopup Window . setAdapter ( Array Adapter ( context , ĠR . layout . run _ code _ spinner _ item , Ġinput Samples )) ĊĊĠĠĠĠĠĠĠ Ġpopup Window . setOn ItemClickListener Ġ{ Ġ_, Ġ_, Ġposition , Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsample Input Ġ= Ġsamples [ position ]. first () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrun Code InputData Sample . setText ( sample Input ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpopup Window . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpopup Window . anchor View Ġ= Ġrun Code Input Sample Picker ĊĠĠĠĠĠĠĠ Ġpopup Window . width Ġ= Ġcontext . resources . get Dimension Pixel Size ( R . dim en . step _ quiz _ full _ screen _ code _ layout _ drop _ down _ width ) ĊĠĠĠĠĠĠĠ Ġpopup Window . height Ġ= ĠWindow Manager . LayoutParams . WRAP _ CONTENT ĊĊĠĠĠĠĠĠĠ Ġrun Code Input Sample Picker . setOnClickListener Ġ{ Ġpopup Window . show () Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Code Fab . setOnClickListener Ġ{ Ġrun Code Action Click () Ġ} ĊĠĠĠĠĠĠĠ Ġrun Code Action . setOnClickListener Ġ{ Ġrun Code Action Click () Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġevaluation Drawable Ġ= ĠAnimation Drawable () ĊĠĠĠĠĠĠĠ Ġevaluation Drawable . add Frame ( context . get Drawable Compat ( R . drawable . ic _ step _ quiz _ evaluation _ frame _ 1 ), ĠE VAL UATION _ FRAME _ DURATION _ MS ) ĊĠĠĠĠĠĠĠ Ġevaluation Drawable . add Frame ( context . get Drawable Compat ( R . drawable . ic _ step _ quiz _ evaluation _ frame _ 2 ), ĠE VAL UATION _ FRAME _ DURATION _ MS ) ĊĠĠĠĠĠĠĠ Ġevaluation Drawable . add Frame ( context . get Drawable Compat ( R . drawable . ic _ step _ quiz _ evaluation _ frame _ 3 ), ĠE VAL UATION _ FRAME _ DURATION _ MS ) ĊĠĠĠĠĠĠĠ Ġevaluation Drawable . is One Shot Ġ= Ġfalse ĊĊĠĠĠĠĠĠĠ ĠDrawable Compat . set Tint ( evaluation Drawable , Ġcontext . resolve Color Attribute ( R . attr . color Secondary )) ĊĊĠĠĠĠĠĠĠ Ġrun Code Feedback . set Compound Draw ables With Intr insic Bounds ( evaluation Drawable , Ġnull , Ġnull , Ġnull ) ĊĠĠĠĠĠĠĠ Ġevaluation Drawable . start () ĊĊĠĠĠĠĠĠĠ Ġrun Code Output Data Title . setTextColor ( AppCompat Resources . getColor State List ( run Code Output Data Title . context , ĠR . color . color _ run _ code _ title )) ĊĠĠĠĠĠĠĠ Ġrun Code Output Data Sample . setTextColor ( AppCompat Resources . getColor State List ( run Code Output Data Title . context , ĠR . color . color _ run _ code _ body )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠsetState ( state : ĠStep Quiz Run Code View . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġview State Delegate . switch State ( state ) ĊĠĠĠĠĠĠĠ Ġval Ġis Enabled Ġ= Ġstate Ġis ĠStep Quiz Run Code View . State . Idle Ġ|| ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ( state Ġis ĠStep Quiz Run Code View . State . User Code Run Loaded Ġ&& Ġstate . user Code Run . status Ġ!= ĠUser Code Run . Status . EVAL UATION ) ĊĊĠĠĠĠĠĠĠ Ġrun Code Fab . isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġrun Code Action . isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġrun Code Input Sample Picker . isEnabled Ġ= Ġis Enabled ĊĠĠĠĠĠĠĠ Ġrun Code InputData Sample . isEnabled Ġ= Ġis Enabled Ġ&& Ġ!( lang Ġ== ĠProgramming Language . SQL . server Print able Name ) ĊĊĠĠĠĠĠĠĠ Ġshift Sample Weights ( state ) ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStep Quiz Run Code View . State . Con sequent Loading Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Output Text ( state . user Code Run ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStep Quiz Run Code View . State . User Code Run Loaded Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresolve Output Text ( state . user Code Run ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Network Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Code ScrollView . sn ackbar ( message Res Ġ= ĠR . string . connection Problems ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Run Code Popup () Ġ{ ĊĠĠĠĠĠĠĠ ĠPopup Helper . show Popup An ch ored To View ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfull Screen Code Tabs . get Tab At ( RUN _ CODE _ TAB )?. custom View , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext . getString ( R . string . step _ quiz _ code _ run _ code _ tooltip ), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel able On Touch Outside Ġ= Ġtrue , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġwith Arrow Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset InputData ( input Data : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Code InputData Sample . setText ( input Data ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Empty Code Error () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Code ScrollView . sn ackbar ( message Res Ġ= ĠR . string . step _ quiz _ code _ empty _ code ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġon Detach () Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Run Presenter . save InputData ( run Code InputData Sample . text . toString ()) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġresolve Output Text ( user Code Run : ĠUser Code Run ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġis Error Ġ= Ġuser Code Run . status Ġ== ĠUser Code Run . Status . FAILURE ĊĠĠĠĠĠĠĠ Ġrun Code Output Data Title . is Activated Ġ= Ġis Error ĊĠĠĠĠĠĠĠ Ġrun Code Output Data Sample . is Activated Ġ= Ġis Error ĊĊĠĠĠĠĠĠĠ Ġwhen Ġ( user Code Run . status ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Code Run . Status . SUCCESS Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Text ( user Code Run . stdout ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser Code Run . Status . FAILURE Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( lang Ġ== ĠProgramming Language . SQL . server Print able Name ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Text ( user Code Run . stdout ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset Output Text ( user Code Run . stderr ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset Output Text ( text : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġrun Code Output Data Sample . text Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtext ?. take If ( String :: isNotEmpty ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġcontext . getString ( R . string . step _ quiz _ code _ empty _ output ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshift Sample Weights ( state : ĠStep Quiz Run Code View . State ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġ( input Data Sample Params , Ġoutput Data Sample Params ) Ġ= Ġ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStep Quiz Run Code View . State . Idle , Ġis ĠStep Quiz Run Code View . State . Loading Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , Ġ 0 ). apply Ġ{ Ġweight Ġ= Ġ 1 f Ġ} Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ). apply Ġ{ Ġweight Ġ= Ġ 0 f Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġis ĠStep Quiz Run Code View . State . Con sequent Loading , Ġis ĠStep Quiz Run Code View . State . User Code Run Loaded Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , ĠLinearLayout . LayoutParams . WRAP _ CONTENT ). apply Ġ{ Ġweight Ġ= Ġ 0 f Ġ} Ġto ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLinearLayout . LayoutParams ( LinearLayout . LayoutParams . MATCH _ PARENT , Ġ 0 ). apply Ġ{ Ġweight Ġ= Ġ 1 f Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġrun Code InputData Sample . layout Params Ġ= Ġinput Data Sample Params ĊĠĠĠĠĠĠĠ Ġrun Code Output Data Sample . layout Params Ġ= Ġoutput Data Sample Params ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Code Action Click () Ġ{ ĊĠĠĠĠĠĠĠ Ġcode Run Presenter . createUser Code Run ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcode Ġ= Ġcode Layout . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlanguage Ġ= Ġlang , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstdin Ġ= Ġrun Code InputData Sample . text . toString (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġstep Id Ġ= Ġstep Wrapper . step . id ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} Ċ }