package Ġcom . wh iz sid . subtitle adjust Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Dialog Ċ import Ġandroid . os . Bundle Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . material . floating action button . Floating ActionButton Ċ import Ġcom . wh iz sid . subtitle adjust . adapters . Subtitle Adjust ListAdapter Ċ import Ġcom . wh iz sid . subtitle adjust . database . DB Open Helper Ċ import Ġcom . wh iz sid . subtitle adjust . database . Subtitle Model Ċ import Ġcom . wh iz sid . subtitle adjust . lib . Subtitle Adjust Ċ import Ġcom . wh iz sid . subtitle adjust . lib . Time Ċ import Ġkotlinx . android . synt hetic . main . app _ bar .* Ċ import Ġandroid . content . Intent Ċ import Ġandroid . view . View Ċ import Ġandroid . widget .* Ċ import Ġandroidx . core . content . Permission Checker Ċ import Ġcom . wh iz sid . subtitle adjust . lib . Speed Calculator Ċ import Ġnet . rd rei . android . dir cho oser . Directory Chooser Activity Ċ import Ġnet . rd rei . android . dir cho oser . Directory Chooser Config Ċ import Ġjava . io . File ĊĊ Ċ class ĠSub title Adjust Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġvar Ġlist Items : Mutable List < Subtitle Adjust > Ġ= Ġmutable ListOf () ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġsubtitle Adapter : Subtitle Adjust ListAdapter ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġdir : ĠString ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpath Dialog : Dialog ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ adjust ) ĊĠĠĠĠĠĠĠ Ġset Support ActionBar ( toolbar ) ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Helper Ġ= ĠDB Open Helper ( this , null ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠLoading Ġtwo Ġsub titles . Ġtwo Ġsub titles Ġis Ġrequired Ġto Ġfind Ġoffset Ġand Ġspeed . ĊĠĠĠĠĠĠĠ Ġval Ġsub titles Ġ= Ġdb Helper . search ( Subtitle Model ," ", 2 ) ĊĊĠĠĠĠĠĠĠ Ġsub titles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( Subtitle Adjust ( it , Time ( it . get StartTime (). toString ()))) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠSetting Ġthe Ġlist Ġview Ġadapter ĊĠĠĠĠĠĠĠ Ġsubtitle Adapter Ġ= Ġ ĠSub title Adjust ListAdapter ( this , list Items ) ĊĊĠĠĠĠĠĠĠ Ġval ĠlistView Ġ= ĠfindViewById < ListView >( R . id . subtitle List ) ĊĠĠĠĠĠĠĠ ĠlistView ?. adapter Ġ= Ġsubtitle Adapter ĊĊĠĠĠĠĠĠĠ Ġval Ġfab Icon Ġ= ĠfindViewById < Floating ActionButton >( R . id . subtitle Adjust Add Button ) ĊĊĠĠĠĠĠĠĠ Ġfab Icon . setOnClickListener Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġsubtitle Ġ= Ġdb Helper . getN th ( Subtitle Model , list Items . size . to Long ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( subtitle != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlist Items . add ( Subtitle Adjust ( subtitle , subtitle . get StartTime ())) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsubtitle Adapter . notify DataSet Changed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// ĠAgain Ġto Ġmain Ġactivity Ġafter Ġcancel Ġpressed ĊĠĠĠĠĠĠĠ Ġval Ġcancel Button Ġ= ĠfindViewById < Button >( R . id . adjust Cancel Button ) ĊĊĠĠĠĠĠĠĠ Ġcancel Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . goto MainActivity ( null ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġconfirm Button Ġ= ĠfindViewById < Button >( R . id . adjust Confirm Button ) ĊĊĠĠĠĠĠĠĠ Ġconfirm Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Confirm Click () ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġpath Dialog Ġ= ĠDialog ( this ) ĊĠĠĠĠĠĠĠ Ġ// ĠPath Ġdialog ĊĠĠĠĠĠĠĠ Ġpath Dialog . setTitle (" Please Ġpick Ġa Ġfile Ġname Ġto Ġsave .") ĊĠĠĠĠĠĠĠ Ġpath Dialog . set ContentView ( R . layout . path _ picker ) ĊĠĠĠĠĠĠĠ Ġval Ġerror Text Ġ= Ġpath Dialog . findViewById < TextView >( R . id . path Picker Error ) ĊĠĠĠĠĠĠĠ Ġerror Text . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Back Pressed () ĊĊĠĠĠĠĠĠĠ Ġlist Items Ġ= Ġmutable ListOf () ĊĊĠĠĠĠĠĠĠ Ġval Ġdb Helper Ġ= ĠDB Open Helper ( this , null ) ĊĠĠĠĠĠĠĠ Ġdb Helper . empty () ĊĊĠĠĠĠĠĠĠ Ġsubtitle Adapter . notify DataSet Changed () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ DIRECTORY ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠDirectory Chooser Activity . RESULT _ CODE _ DIR _ SELECTED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdirectory Ġ= Ġ Ġdata !!. getString Extra ( Directory Chooser Activity . RESULT _ SELECTED _ DIR ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on Directory Selected ( directory ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Confirm Click (){ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġread Ġwrite Ġpermissions Ġfor Ġthe Ġexternal Ġstorage ĊĠĠĠĠĠĠĠ Ġval Ġread Permission Ġ= ĠPermission Checker . check Self Permission ( this , ĠManifest . permission . READ _ EXTERNAL _ STORAGE ) ĊĠĠĠĠĠĠĠ Ġval Ġwrite Permission Ġ= ĠPermission Checker . check Self Permission ( this , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( read Permission Ġ== ĠPermission Checker . PERMISSION _ GRAN TED && write Permission Ġ== ĠPermission Checker . PERMISSION _ GRAN TED ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcho oser Intent Ġ= ĠIntent ( this , ĠDirectory Chooser Activity :: class . java ) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġconfig Ġ= ĠDirectory Chooser Config . builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. new DirectoryName (" Sub titles ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. initial Directory ("") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow ReadOnly Directory ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. allow New DirectoryName Modification ( true ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcho oser Intent . putExtra ( Directory Chooser Activity . EXTRA _ CONFIG , Ġconfig ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠREQUEST _ DIRECTORY Ġis Ġa Ġconstant Ġinteger Ġto Ġidentify Ġthe Ġrequest , Ġe . g . Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( cho oser Intent , ĠREQUEST _ DIRECTORY ) ĊĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this , R . string . required Permissions , Toast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast . show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon Directory Selected ( directory : ĠString ){ ĊĠĠĠĠĠĠĠ Ġdir Ġ= Ġdirectory ĊĊĠĠĠĠĠĠĠ Ġif ( path Dialog != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Dialog . show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġok Button Ġ= Ġpath Dialog . findViewById < Button >( R . id . path OK ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcancel Button Ġ= Ġpath Dialog . findViewById < Button >( R . id . path Cancel ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġerror Text Ġ= Ġpath Dialog . findViewById < TextView >( R . id . path Picker Error ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcancel Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Dialog . hide () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġok Button . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Input Ġ= Ġpath Dialog . findViewById < EditText >( R . id . path Picker Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= ĠfileName Input . text ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġ"$ dir /$ fileName . s rt " ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( filePath ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif (! file . exists ()){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text . visibility Ġ= ĠView . IN VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġpath Dialog . hide () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis . on File Pick ed ( file ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġerror Text . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġon File Pick ed ( file : ĠFile ){ ĊĠĠĠĠĠĠĠ Ġval Ġdb Helper Ġ= ĠDB Open Helper ( this , null ) ĊĊĠĠĠĠĠĠĠ Ġval Ġsub titles Ġ= Ġdb Helper . search ( Subtitle Model ," ", null ) ĊĠĠĠĠĠĠĠ Ġval Ġcalculator Ġ= ĠSpeed Calculator ( list Items ) ĊĠĠĠĠĠĠĠ Ġcalculator . calculate () ĊĊĠĠĠĠĠĠĠ Ġval Ġtoast Ġ= ĠToast . makeText ( this , R . string . writing File , Toast . LENGTH _ LONG ) ĊĠĠĠĠĠĠĠ Ġtoast . show () ĊĊĠĠĠĠĠĠĠ Ġfile . print Writer (). use Ġ{ Ġout Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġsub titles . forEach Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcorrected Ġ= Ġcalculator . correct ( it ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġid Ġ= Ġcorrected . getId () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġcontent Ġ= Ġcorrected . getContent () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠstartTime Ġ= Ġcorrected . get StartTime () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠendTime Ġ= Ġcorrected . get EndTime () ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( id ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ("$ startTime Ġ--> Ġ$ endTime ") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ( content ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġout . println ("") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġthis . goto MainActivity ( resources . getString ( R . string . success Adjust )) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgoto MainActivity ( message : ĠString ? ){ ĊĠĠĠĠĠĠĠ Ġval Ġnew Intent Ġ= ĠIntent ( this , ĠMainActivity :: class . java ) ĊĠĠĠĠĠĠĠ Ġif ( message != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnew Intent . putExtra (" message _ from _ previous ", message ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġif ( path Dialog != null ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpath Dialog . dismiss () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġthis . startActivity ( new Intent ) ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠREQUEST _ DIRECTORY Ġ= Ġ 1 2 3 ĊĠĠĠ Ġ} Ċ }