package Ġcom . p da . screenshot matcher 2 . views . fragments Ċ Ċ import Ġandroid . content . Context Ċ import Ġandroid . os . Build Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . view . H aptic Feedback Constants Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroid . view . input method . Input Method Manager Ċ import Ġandroid . widget .* Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġandroidx . fragment . app . Fragment Transaction Ċ import Ġandroidx . lifecycle . ViewModel Provider Ċ import Ġcom . p da . screenshot matcher 2 . R Ċ import Ġcom . p da . screenshot matcher 2 . logger . Study Logger Ċ import Ġcom . p da . screenshot matcher 2 . network . send Feedback ToServer Ċ import Ġcom . p da . screenshot matcher 2 . view Models . Capture ViewModel Ċ import Ġcom . p da . screenshot matcher 2 . views . interfaces . G arbage View Ċ Ċ /** Ċ Ġ* ĠFragment Ġthat Ġlets Ġthe Ġuser Ġsend Ġfeedback Ġto Ġa Ġfeedback Ġserver . Ċ Ġ* Ċ Ġ* ĠTODO : ĠDeploy Ġa Ġreal Ġfeedback Ġserver , Ġcurrently Ġthis Ġfragment Ġdoes Ġnot Ġactually Ġsend Ġfeedback Ġto Ġa Ġserver . Ċ Ġ* Ċ Ġ* Ġ@ property Ġlayout ĠThe Ġlayout Ġof Ġthe Ġfragment Ċ Ġ* Ġ@ property Ġcontainer View ĠThe Ġcontainer Ġview Ġholding Ġthis Ġfragment Ċ Ġ* Ġ@ property Ġm Fragment Background ĠThe Ġdark Ġbackground Ġbehind Ġthe Ġfragment , Ġcalls Ġ[ remove This Fragment ] Ġon Ġclick Ċ Ġ* Ġ@ property Ġm Send Feedback Button ĠSend Ġfeedback Ġbutton , Ġsends Ġthe Ġfeedback Ġto Ġthe Ġfeedback Ġserver Ġon Ġclick Ċ Ġ* Ġ@ property Ġm TextInput Field ĠThe Ġtext Ġinput Ġfield Ġfor Ġthe Ġuser Ġto Ġenter Ġfeedback Ċ Ġ* Ġ@ property Ġcapture ViewModel ĠThe Ġ[ Capture ViewModel ], Ġused Ġto Ġaccess Ġthe Ġserver Ġurl Ġand Ġmatch Ġid Ġof Ġthe Ġlast Ġmatch Ġrequest Ċ Ġ* Ċ Ġ*/ Ċ class ĠFeedback Fragment Ġ: ĠFragment (), ĠG arbage View Ġ{ ĊĠĠĠ Ġ// Views ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlayout : ĠLinearLayout ĊĠĠĠ Ġprivate Ġvar Ġcontainer View : ĠFrame Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġm Fragment Background : ĠFrame Layout ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm Send Feedback Button : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġm TextInput Field : ĠEditText ĊĊĠĠĠ Ġprivate Ġvar Ġcapture ViewModel : ĠCapture ViewModel ? Ġ= Ġnull ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġfragment Ġis Ġcreated , Ġsets Ġthe Ġmatch Ġresult Ġid Ġand Ġthe Ġmatching Ġserver Ġurl . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġthis . capture ViewModel Ġ= ĠViewModel Provider ( this . viewModel Store , ĠCapture ViewModel . Factory ( this . require Activity (). application )). get ( Capture ViewModel :: class . java ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġon Ġview Ġcreation , Ġreturns Ġan Ġinfl ated Ġview Ġof Ġthis Ġfragment . ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġinfl ated Ġview Ġof Ġthis Ġfragment ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView ? Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠInf late Ġthe Ġlayout Ġfor Ġthis Ġfragment ĊĠĠĠĠĠĠĠ Ġcontainer View Ġ= Ġcontainer Ġas ĠFrame Layout ĊĠĠĠĠĠĠĠ Ġcontainer View ?. visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġreturn Ġinflater . inflate ( R . layout . fragment _ feedback , Ġcontainer , Ġfalse ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCalled Ġwhen Ġthe Ġview Ġof Ġthis Ġfragment Ġis Ġcreated , Ġcalls Ġ[ init Views ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġon View Created ( view : ĠView , ĠsavedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on View Created ( view , ĠsavedInstanceState ) ĊĠĠĠĠĠĠĠ Ġinit Views () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCallback Ġfor Ġwhen Ġfeedback Ġhas Ġbeen Ġsent Ġto Ġthe Ġserver . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* ĠCalls Ġ[ remove This Fragment ] Ġand Ġupdates Ġ[ Study Logger ]. ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġfun Ġon Feedback Posted (){ ĊĠĠĠĠĠĠĠ Ġremove This Fragment () ĊĠĠĠĠĠĠĠ ĠStudy Logger . hash Map [" feedback _ sent "] Ġ= Ġtrue ĊĠĠĠĠĠĠĠ ĠToast . makeText ( context , ĠgetText ( R . string . ff _ submit _ success _ en ), ĠToast . LENGTH _ LONG ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠDis mis ses Ġthe Ġvirtual Ġkeyboard . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġdismiss Keyboard () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġimm Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcontext ?. getSystem Service ( Context . INPUT _ METHOD _ SERVICE ) Ġas ĠInput Method Manager ĊĠĠĠĠĠĠĠ Ġimm . hide Soft Input From Window ( m TextInput Field . window Token , Ġ 0 ) ĊĠĠĠĠĠĠĠ Ġm TextInput Field . clear Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠWhether Ġor Ġnot Ġthe Ġvirtual Ġkeyboard Ġis Ġvisible . ĊĠĠĠĠ Ġ* ĊĠĠĠĠ Ġ* Ġ@ return Ġtrue Ġif Ġthe Ġvirtual Ġkeyboard Ġis Ġvisible , Ġfalse Ġotherwise ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Keyboard Active (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm TextInput Field . has Focus () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠInitializes Ġthe Ġviews Ġof Ġthis Ġfragment Ġand Ġsets Ġtheir Ġlisteners . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġinit Views (){ ĊĠĠĠĠĠĠĠ Ġlayout Ġ= Ġactivity ?. findViewById ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ff _ linear Layout ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġlayout . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Keyboard Active ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġm Fragment Background Ġ= Ġactivity ?. findViewById ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ca _ dark _ background ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġm Fragment Background ?. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset OnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( is Keyboard Active ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdismiss Keyboard () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġremove This Fragment () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvisibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġm TextInput Field Ġ= Ġactivity ?. findViewById ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ff _ text _ input ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġm Send Feedback Button Ġ= Ġactivity ?. findViewById ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . ff _ send _ feedback _ button ĊĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠ Ġm Send Feedback Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsend Feedback ToServer ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). application Context , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . capture ViewModel ?. getServer Url () !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . capture ViewModel ?. get Match ID () !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Result Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhas Screenshot Ġ= Ġfalse , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomment Ġ= Ġget Input TextField Text () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġremove This Fragment () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠReturns Ġthe Ġtext Ġin Ġ[ m TextInput Field ]. ĊĠĠĠĠ Ġ* Ġ@ return ĠThe Ġtext Ġin Ġ[ m TextInput Field ] ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġget Input TextField Text (): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġm TextInput Field . text . toString () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠRemoves Ġthis Ġfragment . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġremove This Fragment () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . O _ MR 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (). window . decor View . perform H aptic Feedback ( H aptic Feedback Constants . VIRTUAL _ KEY _ RELEASE ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġcontainer View ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġm Fragment Background ?. visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠ Ġactivity ?. support FragmentManager ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . beginTransaction () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . set Transition ( Fragment Transaction . TRANS IT _ FRAGMENT _ CLOSE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ? . remove ( this )?. commit () ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġclear G arbage () Ġ{ ĊĠĠĠĠĠĠĠ Ġm Fragment Background ?. setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġm Send Feedback Button . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġm TextInput Field . setOnClickListener ( null ) ĊĠĠĠĠĠĠĠ Ġlayout . setOnClickListener ( null ) ĊĊĠĠĠĠĠĠĠ Ġcapture ViewModel Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġcontainer View Ġ= Ġnull ĊĠĠĠĠĠĠĠ Ġm Fragment Background Ġ= Ġnull ĊĊĠĠĠ Ġ} Ċ }