package Ġcom . kh ob en . aut ot itle . ui . activity Ċ Ċ import Ġandroid . annotation . Suppress Lint Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Handler Ċ import Ġandroid . os . Looper Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . view . View Ċ import Ġandroid . view . WindowManager Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . Frame Layout Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . activity . view Models Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . core . view . get Ċ import Ġandroidx . core . view . isVisible Ċ import Ġandroidx . lifecycle . lifecycle Scope Ċ import Ġandroidx . recyclerview . widget .* Ċ import Ġcom . google . android . material . button . Material Button Ċ import Ġcom . google . android . material . sn ackbar . Base Transient Bottom Bar . ANIM ATION _ MODE _ SL IDE Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . kh ob en . aut ot itle . App Ċ import Ġcom . kh ob en . aut ot itle . App . Companion . VIDEO _ EXIST _ PROJECT Ċ import Ġcom . kh ob en . aut ot itle . App . Companion . VIDEO _ LANGUAGE _ RE CO GN ITION Ċ import Ġcom . kh ob en . aut ot itle . App . Companion . VIDEO _ LOAD _ MODE Ċ import Ġcom . kh ob en . aut ot itle . App . Companion . VIDEO _ SOURCE _ URI _ INT ENT Ċ import Ġcom . kh ob en . aut ot itle . Build Config Ċ import Ġcom . kh ob en . aut ot itle . R Ċ import Ġcom . kh ob en . aut ot itle . common . Font Provider Ċ import Ġcom . kh ob en . aut ot itle . database . entity . Project Ċ import Ġcom . kh ob en . aut ot itle . databinding . Activity Video Binding Ċ import Ġcom . kh ob en . aut ot itle . model . Video Info Ċ import Ġcom . kh ob en . aut ot itle . model . Video Load Mode Ċ import Ġcom . kh ob en . aut ot itle . mvp . presenter . Video Edit Activity Presenter Ċ import Ġcom . kh ob en . aut ot itle . mvp . view . Video Edit Activity View Ċ import Ġcom . kh ob en . aut ot itle . service . medi ap layer . Media Surface Player Ċ import Ġcom . kh ob en . aut ot itle . service . medi ap layer . Video Render Ċ import Ġcom . kh ob en . aut ot itle . ui . overlay .* Ċ import Ġcom . kh ob en . aut ot itle . ui . player . Video Controls View Ċ import Ġcom . kh ob en . aut ot itle . ui . player . Video Surface View Ċ import Ġcom . kh ob en . aut ot itle . ui . player . seek bar . Frames Holder Ċ import Ġcom . kh ob en . aut ot itle . ui . popup . AlertDialog Info Message Ċ import Ġcom . kh ob en . aut ot itle . ui . popup . Custom AlertDialog Ċ import Ġcom . kh ob en . aut ot itle . ui . popup . Video Processing Progress Dialog Ċ import Ġcom . kh ob en . aut ot itle . ui . popup . text overlay editor . Text Editor Dialog Fragment Ċ import Ġcom . kh ob en . aut ot itle . ui . recyclerview . Empty RecyclerView Ċ import Ġcom . kh ob en . aut ot itle . ui . recyclerview . RecyclerView ClickListener Ċ import Ġcom . kh ob en . aut ot itle . ui . recyclerview . overlay s .* Ċ import Ġcom . kh ob en . aut ot itle . ui . sn ackbar . Sn ackBar Helper Ċ import Ġcom . kh ob en . aut ot itle . view model . Project ViewModel Ċ import Ġcom . kh ob en . aut ot itle . view model . Project ViewModel Factory Ċ import Ġkotlinx . coroutines . launch Ċ import Ġme . to pt as . fancy show case . F ancy Show Case Queue Ċ import Ġme . to pt as . fancy show case . F ancy Show Case View Ċ import Ġme . to pt as . fancy show case . Focus Shape Ċ import Ġme . to pt as . fancy show case . listener . On Complete Listener Ċ import Ġm oxy . M vp AppCompatActivity Ċ import Ġm oxy . presenter . Inject Presenter Ċ import Ġtim ber . log . Tim ber Ċ import Ġjava . util .* ĊĊ Ċ class ĠVideo Edit Activity Ġ: ĠM vp AppCompatActivity (), ĊĠĠĠ ĠVideo Edit Activity View , ĊĠĠĠ ĠRecyclerView Item EventListener , ĊĠĠĠ ĠVideo Processing Progress Dialog . Progress Dialog Listener , ĊĠĠĠ ĠCustom AlertDialog . Dialog ClickListener Ġ{ ĊĊĠĠĠ Ġ@ Inject Presenter ĊĠĠĠ Ġlateinit Ġvar Ġpresenter : ĠVideo Edit Activity Presenter ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvideo Surface View : ĠVideo Surface View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoverlay View : ĠFrame Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvideo Layer : ĠFrame Layout ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġvideo Controls View : ĠVideo Controls View ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġre cyclerView : ĠEmpty RecyclerView ĊĊĠĠĠ Ġprivate Ġvar Ġselect RecyclerView Touch Listener : ĠSelection Touch Listener ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġvideo Processing Progress Dialog : ĠVideo Processing Progress Dialog ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsave Btn : ĠButton ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġmute Btn : ĠMaterial Button ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġadd Item Btn : ĠButton ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġlo tt ie Animation Loading View : ĠView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġbinding : ĠActivity Video Binding ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġoverlay View ListAdapter : ĠOverlay View ListAdapter ĊĊĠĠĠ Ġprivate Ġval Ġproject ViewModel : ĠProject ViewModel Ġby Ġview Models Ġ{ ĊĠĠĠĠĠĠĠ ĠProject ViewModel Factory ( application Context ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġuser Settings Ġby Ġlazy Ġ{ ĊĠĠĠĠĠĠĠ Ġget SharedPreferences ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ SETTINGS _ PRE F , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠContext . MODE _ PRIVATE ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġval Ġback Pressed Dialog Token Ġ= Ġ" back _ pressed _ dialog " ĊĊĠĠĠ Ġ@ Suppress Lint (" Click ableView Accessibility ") ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠActivity Video Binding . inflate ( layout Inflater ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( binding . root ) ĊĊĠĠĠĠĠĠĠ Ġwindow . add Flags ( WindowManager . LayoutParams . FLAG _ KEEP _ SCREEN _ ON ) ĊĊĠĠĠĠĠĠĠ Ġlo tt ie Animation Loading View Ġ= Ġbinding . lott ie Loading View . root ĊĠĠĠĠĠĠĠ Ġvideo Controls View Ġ= Ġbinding . video Seek bar Layout . video Seek bar View ĊĠĠĠĠĠĠĠ Ġvideo Surface View Ġ= Ġbinding . vide ol ayer . video Preview ĊĠĠĠĠĠĠĠ Ġvideo Layer Ġ= Ġbinding . vide ol ayer . root ĊĠĠĠĠĠĠĠ Ġoverlay View Ġ= Ġbinding . vide ol ayer . overlay s Root ĊĠĠĠĠĠĠĠ Ġmute Btn Ġ= Ġbinding . video Seek bar Layout . mute Btn ĊĠĠĠĠĠĠĠ Ġsave Btn Ġ= Ġbinding . save Video Btn ĊĠĠĠĠĠĠĠ Ġadd Item Btn Ġ= Ġbinding . video Seek bar Layout . addItem ĊĠĠĠĠĠĠĠ Ġre cyclerView Ġ= Ġbinding . recyclerview ĊĊĠĠĠĠĠĠĠ Ġvideo Layer . setOnClickListener Ġ{ Ġon View Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . back Btn . setOnClickListener Ġ{ Ġon View Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġbinding . empty RecyclerView . add Caption Recycler . setOnClickListener Ġ{ Ġon View Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġsave Btn . setOnClickListener Ġ{ Ġon View Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġadd Item Btn . setOnClickListener Ġ{ Ġon View Clicked ( it ) Ġ} ĊĠĠĠĠĠĠĠ Ġmute Btn . setOnClickListener Ġ{ Ġtoggle Mute () Ġ} ĊĊĠĠĠĠĠĠĠ Ġsetup RecyclerView ( empty RecyclerView Ġ= Ġbinding . empty RecyclerView . root ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsource Video Uri Ġ= Ġintent . get Parcelable Extra < Uri >( VIDEO _ SOURCE _ URI _ INT ENT ) ĊĠĠĠĠĠĠĠ Ġval Ġvideo Loading Mode Ġ= Ġintent . get Serializable Extra ( VIDEO _ LOAD _ MODE ) Ġas ĠVideo Load Mode ĊĠĠĠĠĠĠĠ Ġval Ġexist Project Ġ= Ġintent . get Parcelable Extra < Project >( VIDEO _ EXIST _ PROJECT ) ĊĠĠĠĠĠĠĠ Ġval Ġrecognition Language Ġ= Ġintent . getString Extra ( VIDEO _ LANGUAGE _ RE CO GN ITION ) ĊĊĠĠĠĠĠĠĠ Ġpresenter . init Video Source ( source Video Uri !! , Ġvideo Loading Mode , Ġexist Project , Ġrecognition Language ) ĊĠĠĠĠĠĠĠ Ġpresenter . init Overlay Handler ( overlay View , Ġvideo Controls View ) ĊĠĠĠĠĠĠĠ Ġpresenter . set Mute State ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Settings . getBoolean ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ SETTINGS _ ITEM _ MUT ED , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠApp . DEFAULT _ M UTE _ STATE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġpass Ġactivity Ġtouch Ġevent Ġto Ġre cycler view Ġselection Ġlistener ĊĠĠĠĠĠĠĠ Ġ// Ġto Ġdismiss Ġaction Ġmode Ġpopup Ġwindow Ġthen Ġclicks Ġoutside Ġre cycler view ĊĠĠĠĠĠĠĠ Ġselect RecyclerView Touch Listener ?. check If Should Clear Selection ( ev ) ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġsetup RecyclerView ( empty RecyclerView : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . addItem Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Item Decoration ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDiv ider Item Decoration . VERTICAL ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ). also Ġ{ Ġdivider Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdivider . set Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠContext Compat . get Drawable ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . drawable . recycler _ horizontal _ divider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) !! ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . layout Manager Ġ= ĠLinearLayoutManager ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . adapter Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOverlay View ListAdapter (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Item EventListener Ġ= Ġthis @ Video Edit Activity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}. also Ġ{ Ġadapter Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View ListAdapter Ġ= Ġadapter ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . set Empty View ( empty RecyclerView ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ( re cyclerView . item Animator Ġas ĠSimple Item Animator ). supports Change Animations Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġ} ĊĊĊĠĠĠĠĠĠĠ Ġselect RecyclerView Touch Listener Ġ= ĠSelection Touch Listener ( re cyclerView ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġset Multi Select Listener ( Long Press Select Touch Listener ( re cyclerView )) ĊĠĠĠĠĠĠĠ Ġ}. also Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View ListAdapter . add Select Listener ( it ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView . add On Item Touch Listener ( it ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġre cyclerView . add On Item Touch Listener ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠRecyclerView ClickListener ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġre cyclerView , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠRecyclerView ClickListener . ClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonClick ( view : ĠView ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . select Overlay ById x ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Long Click ( view : ĠView ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon DoubleClick ( view : ĠView ?, Ġposition : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . edit Overlay Item ( position ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġval Ġswipe Handler Ġ= Ġobject Ġ: ĠSw ipe ToDelete Callback ( this ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Sw ip ed Done ( view Holder : ĠRecyclerView . ViewHolder , Ġdirection : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġswipe Ġto Ġdelete Ġaction ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . delete Overlay ( view Holder . binding Adapter Position ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġswipe Handler . swipe Listener Ġ= Ġselect RecyclerView Touch Listener ĊĠĠĠĠĠĠĠ ĠItem Touch Helper ( swipe Handler ). attach To RecyclerView ( re cyclerView ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġinit Video Container LayoutParams ( ĊĠĠĠĠĠĠĠ Ġmedia Player : ĠMedia Surface Player , ĊĠĠĠĠĠĠĠ Ġvideo Renderer : ĠVideo Render , ĊĠĠĠĠĠĠĠ Ġvideo Details : ĠVideo Info ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo Controls View . set Media Duration ( video Details . duration ) ĊĠĠĠĠĠĠĠ Ġvideo Surface View . init ( video Renderer , Ġmedia Player ) ĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠFour Ġpossible Ġrotation Ġdegree Ġvalues Ġ 0 , Ġ 9 0 , Ġ 1 8 0 , Ġ 2 7 0 ĊĠĠĠĠĠĠĠĠ Ġ* ĊĠĠĠĠĠĠĠĠ Ġ* Ġ 9 0 , Ġ 2 7 0 Ġ-- Ġwidth Ġand Ġheight Ġare Ġtransp osed ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Details . rotation Ġ== Ġ 0 Ġ|| Ġvideo Details . rotation Ġ== Ġ 1 8 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Surface View . set Video Size ( video Details . width , Ġvideo Details . height ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Surface View . set Video Size ( video Details . height , Ġvideo Details . width ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Ġadjust Ġoverlay Ġsize Ġby Ġvideo Ġsurface Ġsize ĊĠĠĠĠĠĠĠ Ġ// Ġand Ġrest ores Ġplayback Ġposition ĊĠĠĠĠĠĠĠ Ġvideo Surface View . post Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġlayout Params Ġ= Ġoverlay View . layout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . width Ġ= Ġvideo Surface View . meas ured Width ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlayout Params . height Ġ= Ġvideo Surface View . meas ured Height ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View . layout Params Ġ= Ġlayout Params ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġrest ores Ġcurrent Ġplayback Ġposition ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . restore Current Playback Position () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon View Clicked ( view : ĠView ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( view . id ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . vide ol ayer Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . clear Overlay Selection () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . back _ btn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . add _ caption _ recycler Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . add Overlay At Current Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . add _ item Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . add Overlay At Current Position () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠR . id . save _ video _ btn Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . save Video ( Pair ( video Surface View . width , Ġvideo Surface View . height )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġpresenter . save Overlay s () ĊĠĠĠĠĠĠĠ Ġpresenter . pause Playback () ĊĠĠĠĠĠĠĠ Ġuser Settings . edit (). put Boolean ( USER _ SETTINGS _ ITEM _ MUT ED , Ġpresenter . getM ute State ()). apply () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Destroy () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Destroy () ĊĠĠĠĠĠĠĠ Ġvideo Surface View . on Destroy () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġif Ġloading Ġscreen Ġis Ġshowing Ġthen Ġignore Ġback Ġpress Ġevent ĊĠĠĠĠĠĠĠ Ġif Ġ( lott ie Animation Loading View . isVisible ) Ġreturn ĊĊĠĠĠĠĠĠĠ ĠCustom AlertDialog . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive ( getString ( R . string . yes _ caption )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative ( getString ( R . string . cancel _ caption )) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. build ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . confirm _ exit ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . exit _ question ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġback Pressed Dialog Token ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠCustom AlertDialog . TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdialog On Negative ( token : ĠString ) Ġ{} ĊĊĠĠĠ Ġoverride Ġfun Ġdialog On Positive ( token : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( token Ġ== Ġback Pressed Dialog Token ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . release Resources () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Super Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdialog On Neutral ( token : ĠString ) Ġ{} ĊĊĊĠĠĠ Ġprivate Ġfun Ġon Super Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( is Task Root Ġ&& Ġsupport FragmentManager . back Stack Entry Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfinish After Transition () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Loading View Visibility ( visible : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlo tt ie Animation Loading View . isVisible Ġ= Ġvisible ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonError Video Processing ( e : ĠThrowable ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e ( e ) ĊĠĠĠĠĠĠĠ Ġset Loading View Visibility ( false ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Info Message ( content : ĠString , Ġtitle : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠAlertDialog Info Message . new ( title , Ġcontent ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. show ( support FragmentManager , ĠAlertDialog Info Message . TAG ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Processed () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Video Ġprocessed ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ(! user Settings . getBoolean ( USER _ SETTINGS _ ITEM _ GUID E _ SHO WN , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġhandler Ġ= ĠHandler ( Looper . get Main Looper ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrunnable Ġ= Ġobject Ġ: ĠRunnable Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġrun () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( support FragmentManager . find Fragment By Tag ( AlertDialog Info Message . TAG ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post Delayed ( this , ĠApp . GUID E _ SHOW _ DELAY ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . remove Callbacks ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġinit Guide () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuser Settings . edit (). put Boolean ( USER _ SETTINGS _ ITEM _ GUID E _ SHO WN , Ġtrue ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġhandler . post ( run nable ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠTim ber . d (" Guide Ġwas Ġshown ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġload Frames ( frame Result : ĠFrame s Holder ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo Controls View . load Frames ( frame Result ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġinit Guide () Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġdummy Ġ= Ġfalse ĊĠĠĠĠĠĠĠ Ġif Ġ( overlay View ListAdapter . item Count Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Ġ= Ġtrue ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġadd Ġdummy Ġitem Ġand Ġdelete Ġit Ġlater ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View ListAdapter . submit List ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmutable ListOf ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOverlay Data Mapper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ 0 L , Ġ 1 0 0 0 L , ĠUUID . randomUUID (), Ġ" Test Ġitem Ġfor Ġguide " ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġadd Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Circle Radius Factor ( 2 . 0 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( addItem Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ add _ case )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycler Item Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( re cyclerView [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ recycler _ item )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycler Item Edit Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( re cyclerView [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ recycler _ item _ edit )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġre cycler Item Delete Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( re cyclerView [ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ recycler _ delete )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdouble Tap Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( overlay View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ doub let ap )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresize Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( overlay View ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ resize )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsave Case Ġ= ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( save Btn ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title ( getString ( R . string . guide _ save )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ancy Show Case Queue (). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcomplete Listener Ġ= Ġobject Ġ: ĠOn Complete Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun ĠonComplete () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( dummy ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġdummy Ġ= Ġfalse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View ListAdapter . submit List ( emptyList ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}. add ( add Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( recycler Item Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( recycler Item Edit Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( recycler Item Delete Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( double Tap Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( resize Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. add ( save Case ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ}, Ġ 5 0 0 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġfinish OnError () Ġ{ ĊĠĠĠĠĠĠĠ Ġset Loading View Visibility ( false ) ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . some _ error ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Playback ( ĊĠĠĠĠĠĠĠ Ġoverlay s : ĠList < Overlay Object >, ĊĠĠĠĠĠĠĠ Ġselected Overlay : ĠOverlay Object ?, ĊĠĠĠĠĠĠĠ Ġis Playing : ĠBoolean ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo Controls View . update Playback ( overlay s , Ġselected Overlay , Ġis Playing ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Removed Overlay ( ĊĠĠĠĠĠĠĠ Ġidx Removed : ĠInt , ĊĠĠĠĠĠĠĠ Ġremoved Overlay : ĠOverlay Object , ĊĠĠĠĠĠĠĠ Ġoverlay s : ĠList < Overlay Object > ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ ĠSn ackbar . make ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠfindViewById ( android . R . id . content ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . sn ack _ bar _ item _ deleted ), ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . LENGTH _ LONG ĊĠĠĠĠĠĠĠ Ġ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanimation Mode Ġ= ĠAN IM ATION _ MODE _ SL IDE ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackBar Helper . add Margin ( this ) ĊĠĠĠĠĠĠĠ Ġ}. setAction ( getString ( R . string . sn ack _ bar _ undo )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . add Overlay At Specific Position ( idx Removed , Ġremoved Overlay ) ĊĠĠĠĠĠĠĠ Ġ}. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġshow Guide How De select Item Once () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ(! user Settings . getBoolean ( USER _ SETTINGS _ ITEM _ GUID E _ DE SELECT _ ITEM , Ġfalse )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠF ancy Show Case View . Builder ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. backgroundColor ( R . color . white ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus On ( video Layer ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. focus Shape ( Focus Shape . RO UN DED _ RECT ANGLE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. enable Auto Text Position () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. title (" Click Ġsomewhere Ġon Ġvideo Ġfor Ġde select Ġitem ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġuser Settings . edit (). put Boolean ( USER _ SETTINGS _ ITEM _ GUID E _ DE SELECT _ ITEM , Ġtrue ). apply () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġhighlight ListView Item ( index : ĠInt , Ġuuid : ĠUUID ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġre cyclerView . layout Manager ?. scrollTo Position ( index ) ĊĠĠĠĠĠĠĠ Ġshow Guide How De select Item Once () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Overlay s Changed List ( overlay s : ĠList < Overlay Object >) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// Ġupdate Ġre cycler Ġview ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay View ListAdapter . submit List ( overlay s . filter Is Instance < Overlay Text >(). map Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠOverlay Data Mapper ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartTime Ġ= Ġit . startTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠendTime Ġ= Ġit . endTime , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġuuid Ġ= Ġit . uuid , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtext Ġ= Ġit . text !! , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġbadge Color Ġ= Ġit . badge Color , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġis Selected Ġ= Ġit . isIn Edit ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Saving Started () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠVideo Processing Progress Dialog . new ( getString ( R . string . save _ capt ions )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġshow ( support FragmentManager , ĠVideo Processing Progress Dialog . TAG ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Saving Cancelled () Ġ{ ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . video _ saving _ cancelled _ caption ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Saving Error ( msg : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . e ( msg ) ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . error _ while _ saving ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Saving Progress ( progress : ĠDouble ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġpercent Ġ= Ġ( progress Ġ* Ġ 1 0 0 ). toInt () ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog ?. update Percentage ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠR . string . percent _ text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpercent . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrun Finish Video View ( filepath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠResult Activity :: class . java ). apply Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġput Extra ( VIDEO _ OUTPUT _ URI _ INT ENT , Ġfilepath ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Video Saving Complete ( filepath : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" Saved Ġvideo Ġwith Ġpath =$ filepath ") ĊĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog ?. update Percentage ( getString ( R . string . percent _ text , Ġ" 0 ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog ?. dismiss () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠgetString ( R . string . saved _ caption ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ ĠHandler ( Looper . get Main Looper ()). post Delayed ({ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun Finish Video View ( filepath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ 2 0 0 0 ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġset Controls To Time ( time : ĠLong ) Ġ{ ĊĠĠĠĠĠĠĠ Ġvideo Controls View . set Controls To Time ( time ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġtoggle Mute () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . toggle Mute ( true ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġtoggle d Mute State ( state : ĠBoolean , Ġclicked : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( state ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtrue Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmute Btn . setIcon Resource ( R . drawable . volume _ off _ icon _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clicked ) ĠToast . makeText ( this , ĠgetString ( R . string . sound _ off ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmute Btn . setIcon Resource ( R . drawable . volume _ up _ icon _ 2 4 dp ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( clicked ) ĠToast . makeText ( this , ĠgetString ( R . string . sound _ on ), ĠToast . LENGTH _ SHORT ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshow Overlay Editor ( overlay : ĠOverlay Object ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( overlay Ġis ĠOverlay Text ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠText Editor Dialog Fragment . show ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay . text , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverlay . textView !!. current TextColor ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). setOn Text Editor Listener ( object Ġ: ĠText Editor Dialog Fragment . Text Editor Event Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġon Done ( input Text : ĠString ?, Ġcolor Code : ĠInt ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . save Edited Overlay ( overlay , Ġinput Text , Ġcolor Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcreate New Project ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġproject ViewModel . insert With Timestamp ( project ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpresenter . setId For New Project ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġthumb Path Ġ= Ġpresenter . create Project Thumbnail ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġinserted Project Ġ= Ġproject ViewModel . getById ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ViewModel . update ( inserted Project . apply Ġ{ Ġthumb Uri Ġ= Ġthumb Path Ġ}) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġupdate Project ( project : ĠProject ) Ġ{ ĊĠĠĠĠĠĠĠ Ġlifecycle Scope . launch Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġproject ViewModel . update With Timestamp ( project ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġcancel Btn Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . pause Saving Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġconfirm Cancel Btn Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . cancel Saving Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġno pe Cancel Btn Clicked () Ġ{ ĊĠĠĠĠĠĠĠ Ġpresenter . resume Saving Video () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Attach Back ( dialog : ĠVideo Processing Progress Dialog ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( video Processing Progress Dialog Ġ== Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġvideo Processing Progress Dialog Ġ= Ġdialog ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move Up ( id : ĠInt , Ġstart : ĠInt , Ġend : ĠInt , Ġtext : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" up Ġ$ id Ġ$ start Ġ$ end Ġ$ text ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Move Down ( id : ĠInt , Ġstart : ĠInt , Ġend : ĠInt , Ġtext : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠTim ber . d (" down Ġ$ id Ġ$ start Ġ$ end Ġ$ text ") ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠV IDE O _ OUTPUT _ URI _ INT ENT Ġ= Ġ" VIDEO _ OUTPUT _ URI " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ SETTINGS _ PRE F Ġ= Ġ" USER _ SETTINGS _ PRE F " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ SETTINGS _ ITEM _ GUID E _ SHO WN Ġ= Ġ" GUID ED _ TO UR " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ SETTINGS _ ITEM _ GUID E _ DE SELECT _ ITEM Ġ= Ġ" GUID E _ DE SELECT " ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠUSER _ SETTINGS _ ITEM _ MUT ED Ġ= Ġ" PLAYER _ MUT ED " ĊĠĠĠ Ġ} Ċ }