package Ġcom . h eng . ku . jn it est Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . os . Looper Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . Motion Event Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . h eng . ku . jn it est . media . Mp 4 Re pack Ċ import Ġcom . my l hy l . ac p . Ac p Ċ import Ġcom . my l hy l . ac p . Ac p Options Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġkotlinx . coroutines .* Ċ import Ġjava . io . File Ċ import Ġandroidx . core . app . Component Activity . Extra Data Ċ import Ġandroidx . core . content . Context Compat . getSystem Service Ċ import Ġandroid . icu . lang . U Character . G rap heme Cluster Break . T ĊĊĊ Ċ val ĠV IDE O _ FILE 1 Ġ= ĊĠĠĠ ĠEnvironment . get External Storage Directory (). absolute Path Ġ+ ĠFile . separator Ġ+ Ġ" h eng " Ġ+ ĠFile . separator Ġ+ Ġ" mv test . mp 4 " Ċ val ĠV IDE O _ FILE 2 Ġ= ĊĠĠĠ ĠEnvironment . get External Storage Directory (). absolute Path Ġ+ ĠFile . separator Ġ+ Ġ" h eng " Ġ+ ĠFile . separator Ġ+ Ġ" mv test _ 2 . mp 4 " Ċ val ĠDEST _ VIDEO _ FILE Ġ= ĊĠĠĠ ĠEnvironment . get External Storage Directory (). absolute Path Ġ+ ĠFile . separator Ġ+ Ġ" h eng " Ġ+ ĠFile . separator Ġ+ Ġ" dest . mp 4 " Ċ Ċ /** Ċ Ġ* ä¸»è¦ģ åıĤèĢĥ https :// github . com / Ch en Little Ping / Learning Video Ġ åŃ¦ä¹ł Ċ Ġ*/ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ ĠA cp . getInstance ( this ). request ( ĊĠĠĠĠĠĠĠĠĠĠĠ ĠA cp Options . Builder () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠManifest . permission . RECORD _ AUDIO ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠManifest . permission . INTER NET ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ, ĠManifest . permission . READ _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. build (), ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ// Media Code cc Ġæ Ĵ Ń æĶ¾ è§Ĩé¢ĳ ĊĠĠĠĠĠĠĠ Ġbtn _ play . setOnClickListener Ġ{ ĠstartActivity ( Intent ( this , ĠVideo Play Activity :: class . java )) Ġ} ĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġæ¸ ²æŁĵ è§Ĩé¢ĳ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ video . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠGl Video Play Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ so ul _ video . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠS oul Video Play Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġ æĺ¾ç¤º Ġ ä¸ī è§Ĵ å½¢ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ triangle . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . TRI ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġ æĺ¾ç¤º ĠBitmap ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ bitmap . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( this , ĠGl Triangle Activity . Type . BITMAP ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġ æĺ¾ç¤º Ġ é¢ľèī² æ¸ Ĳ åıĺ Ġ ä¸ī è§Ĵ å½¢ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ triangle 2 . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . COLOR _ TRI ANGLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġ æĺ¾ç¤º Ġ ç«ĭ æĸ¹ ä½ĵ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ cube . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . CUBE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// OpenGL Ġ æĺ¾ç¤º åľĨ å½¢ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ circle . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . CIR CLE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Open Gl Ġ æĺ¾ç¤º åľĨ éĶ ¥ ä½ĵ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ cone . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . CON E ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġ// Open Gl Ġ æĺ¾ç¤º åľĨ æŁ ± ä½ĵ ĊĠĠĠĠĠĠĠ Ġbtn _ gl _ cy linder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . start ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠGl Triangle Activity . Type . CY L IND ER ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ mux er . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠM p 4 Re pack ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠV IDE O _ FILE 2 , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠDEST _ VIDEO _ FILE ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ). start Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . prepare () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" å°ģè£ħ å®Į æ¯ķ ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠL ooper . loop () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn _ encoder . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠEncoder Video Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġbtn _ camera _ record . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠCamera Record Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġbtn _ camera _ record _ sdk . setOnClickListener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( Intent ( this , ĠRecord Video Sdk Activity :: class . java )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġis Launch By Virtual App () ĊĠĠĠĠĠĠĠ ĠGlobal Scope . launch Ġ Ġ( Dispatch ers . Main ){ ĊĠĠĠĠĠĠĠĠĠĠ Ġval Ġio 1 Ġ= Ġwith Context ( Dispatch ers . IO ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ch un "," io 1 Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" io 1 " ĊĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġwith Context Ġ= Ġwith Context ( Dispatch ers . Default ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ch un "," Default Ġ${ Thread . currentThread (). name }") ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Default " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ch un ", io 1 + with Context + Thread . currentThread (). name ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠLog . d (" ch un ", ĠLog . get StackTrace String ( Throwable ())) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĠĠĠ Ġoverride Ġfun Ġdispatch Touch Event ( ev : ĠMotion Event ?): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġreturn Ġsuper . dispatch Touch Event ( ev ) ĊĠĠĠ Ġ} ĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠåĪ¤æĸŃ æĺ¯åĲ¦ æĺ¯ èĻļæĭŁ App ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġis Launch By Virtual App (): ĠBoolean Ġ{ ĊĠĠĠĠĠĠĠ Ġtry Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġmd 5 ( anti - virtual - app ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti Filename Ġ= Ġ". 6 7 8 4 5 4 7 bf 9 f 3 b 7 1 2 caa 4 7 7 5 ae fa 1 4 2 f 9 " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti FilePath Ġ= Ġ"/ data / data /${ packageName }/ $ anti Filename " ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġanti File Ġ= ĠFile ( anti FilePath ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anti File . exists ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( anti File . isFile ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanti File . delete () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġanti File . delete Re cursively () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġanti File . createNew File () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġprocess Ġ= ĠRuntime . get Runtime (). exec (" find Ġ$ anti FilePath ") ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfind Result Ġ= Ġprocess ?. let Ġ{ Ġit . inputStream . buffered Reader (). readLine () Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreturn Ġanti FilePath Ġ!= Ġfind Result ĊĠĠĠĠĠĠĠ Ġ} Ġcatch Ġ( e : ĠException ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġreturn Ġfalse ĊĠĠĠ Ġ} Ċ Ċ } Ċ