/* Ċ Ġ* ĠCopyright Ġ( C ) Ġ 2 0 2 0 ĠLink ĠDevelopment Ċ Ġ* Ċ Ġ* ĠLicensed Ġunder Ġthe ĠApache ĠLicense , ĠVersion Ġ 2 . 0 Ġ( the Ġ" License "); Ċ Ġ* Ġyou Ġmay Ġnot Ġuse Ġthis Ġfile Ġexcept Ġin Ġcompliance Ġwith Ġthe ĠLicense . Ċ Ġ* ĠYou Ġmay Ġobtain Ġa Ġcopy Ġof Ġthe ĠLicense Ġat Ċ Ġ* Ċ Ġ* Ġhttp :// www . apache . org / licenses / LICENSE - 2 . 0 Ċ Ġ* Ċ Ġ* ĠUnless Ġrequired Ġby Ġapplicable Ġlaw Ġor Ġagreed Ġto Ġin Ġwriting , Ġsoftware Ċ Ġ* Ġdistributed Ġunder Ġthe ĠLicense Ġis Ġdistributed Ġon Ġan Ġ" AS ĠIS " ĠBASIS , Ċ Ġ* ĠWITHOUT ĠWARRANTIES ĠOR ĠCONDITIONS ĠOF ĠANY ĠKIND , Ġeither Ġexpress Ġor Ġimplied . Ċ Ġ* ĠSee Ġthe ĠLicense Ġfor Ġthe Ġspecific Ġlanguage Ġgoverning Ġpermissions Ġand Ċ Ġ* Ġlimitations Ġunder Ġthe ĠLicense . Ċ Ġ*/ Ċ Ċ package Ġcom . link dev . file picker . pick ers . video Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Context Ċ import Ġandroid . content . Intent Ċ import Ġandroid . net . Uri Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Size Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . link dev . file picker . R Ċ import Ġcom . link dev . file picker . models . Error Model Ċ import Ġcom . link dev . file picker . models . File Data Ċ import Ġcom . link dev . file picker . models . MimeType Ċ import Ġcom . link dev . file picker . factory . IP ick Files Factory Ċ import Ġcom . link dev . file picker . utils . file . FileUtils Ċ import Ġcom . link dev . file picker . utils . file . FileUtils . CAMERA _ VIDEO _ TYPE Ċ import Ġcom . link dev . file picker . utils . file . FileUtils . VID _ PREFIX Ċ import Ġcom . link dev . file picker . utils . log . Logger Utils . log Error Ċ import Ġcom . link dev . file picker . inter actions . Pick Files Status Callback Ċ import Ġcom . link dev . file picker . mapper . Caller Ċ import Ġcom . link dev . file picker . models . Error Status Ċ import Ġcom . link dev . file picker . utils . constant . Constants . Error Messages . NOT _ HAND LED _ CAMERA _ ERROR _ MESSAGE Ċ import Ġcom . link dev . file picker . utils . constant . Constants . Error Messages . NO _ CAMERA _ HARD WARE _ AVAILABLE _ ERROR _ MESSAGE Ċ import Ġcom . link dev . file picker . utils . constant . Constants . Error Messages . REQUEST _ CODE _ ERROR _ MESSAGE Ċ import Ġcom . link dev . file picker . utils . file . Android Q FileUtils Ċ import Ġcom . link dev . file picker . utils . file . FileUtils Below Android Q Ċ import Ġcom . link dev . file picker . utils . version . Platform Ċ import Ġjava . io . File Ċ Ċ /** Ċ Ġ* ĠCapture Video Ġis Ġa Ġpiece Ġof ĠPick File Ġlibrary Ġto Ġhandle Ġopen Ġcamera Ġaction Ġand Ġsave Ġrecorded Ġvideo Ċ Ġ* Ġeither Ġin Ġthe ĠPicture Ġfolder Ġor Ġgiven Ġfolder Ġin Ġthe Ġgallery Ċ Ġ* Ġ@ param Ġcaller Ġfor Ġhost Ġfragment / activity Ċ Ġ* Ġ@ param Ġrequest Code Ġto Ġhandle Ġ[ Fragment . on Activity Result ]/ [ Activity . on Activity Result ] Ġrequest Ġcode Ċ Ġ* Ġ@ param Ġallow Sync With Gallery Ġboolean Ġto Ġcheck Ġif Ġshould Ġcopy Ġcaptured Ġvideo Ġto Ġthe Ġgallery Ċ Ġ* Ġ@ param Ġgallery Folder Name Ġthe Ġname Ġof Ġdirectory Ġthat Ġcaptured Ġvideo Ġwill Ġsaved Ġinto Ċ Ġ* Ġ*/ Ċ internal Ġclass ĠCapture Video ( ĊĠĠĠ Ġprivate Ġval Ġcaller : ĠCall er , ĊĠĠĠ Ġprivate Ġval Ġrequest Code : ĠInt , ĊĠĠĠ Ġprivate Ġval Ġallow Sync With Gallery : ĠBoolean Ġ= Ġfalse , ĊĠĠĠ Ġprivate Ġval Ġgallery Folder Name : ĠString ? Ġ= Ġnull Ċ ) Ġ: ĠIP ick Files Factory Ġ{ ĊĠĠĠ Ġprivate Ġvar Ġcurrent Capt ured Video Uri : ĠUri ? Ġ= Ġnull ĊĠĠĠ Ġprivate Ġvar Ġcurrent Capt ured Video Path : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġconst Ġval ĠTAG Ġ= Ġ" File Picker Tag " ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġhandle Ġaction Ġto Ġopen Ġcamera Ġand Ġsaved Ġtemporary Ġfile Ġand Ġget Ġsaved ĠURI ĊĠĠĠĠ Ġ* Ġ@ param Ġmime TypeList Ġnot Ġused ĊĠĠĠĠ Ġ* Ġ@ throws ĠSecurity Exception ĠThrow Ġexception Ġif Ġ[ Manifest . permission . WRITE _ EXTERNAL _ STORAGE ] Ġor ĊĠĠĠĠ Ġ* Ġ[ Manifest . permission . CAMERA ] Ġor Ġboth Ġare Ġnot Ġhandled Ġin Ġruntime Ġor Ġnot Ġallowed . ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġpick Files ( mime TypeList : ĠArrayList < MimeType >) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġcapture Video Intent Ġ= ĠIntent ( Media Store . ACTION _ VIDEO _ CAPTURE ) ĊĠĠĠĠĠĠĠ Ġif Ġ( capture Video Intent . resolve Activity ( caller . context . package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġvideo File Ġ= ĠFileUtils . create Video File ( caller . context ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Capt ured Video Path Ġ= Ġvideo File ?. path ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Capt ured Video Uri Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Capt ured Video Path ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// Ġget Ġphoto Ġuri Ġform Ġcontent Ġprovider ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . getFile Uri ( caller . context , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġcurrent Capt ured Video Uri ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcapture Video Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġit ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( caller . is Camera Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaller . startActivity For Result ( capture Video Intent , Ġrequest Code ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( NOT _ HAND LED _ CAMERA _ ERROR _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ( Security Exception ( NOT _ HAND LED _ CAMERA _ ERROR _ MESSAGE )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( NO _ CAMERA _ HARD WARE _ AVAILABLE _ ERROR _ MESSAGE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthrow ( RuntimeException ( NO _ CAMERA _ HARD WARE _ AVAILABLE _ ERROR _ MESSAGE )) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* Ġused Ġto Ġhandle ĠActivity Ġresult Ġcalled Ġon Ġthe Ġhost Ġview Ġ[ Fragment . on Activity Result ]/ [ Activity . on Activity Result ] ĊĠĠĠĠ Ġ* Ġ@ param Ġm Request Code Ġto Ġidentify Ġwho Ġthis Ġresult Ġcame Ġfrom ĊĠĠĠĠ Ġ* Ġ@ param ĠresultCode Ġto Ġidentify Ġif Ġoperation Ġsucceeded Ġor Ġcanceled ĊĠĠĠĠ Ġ* Ġ@ param Ġdata Ġreturn Ġresult Ġdata Ġto Ġthe Ġcaller ĊĠĠĠĠ Ġ* Ġ@ param Ġcallback Ġrefers Ġto Ġ[ Pick Files Status Callback ] Ġwhich Ġwill Ġfire Ġwith Ġthe Ġfile Ġpicking ĊĠĠĠĠ Ġ* Ġstatus Ġwhether Ġit Ġis Ġcanceled , Ġsuccessful Ġor Ġan Ġerror Ġoccurred . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġhandle Activity Result ( ĊĠĠĠĠĠĠĠ Ġm Request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?, Ġcallback : ĠPick Files Status Callback ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( m Request Code Ġ== Ġrequest Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( current Capt ured Video Path Ġ!= Ġnull Ġ&& Ġcurrent Capt ured Video Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfile Data Ġ= Ġgenerate File Data () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( file Data Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on File Pick ed ( array ListOf ( file Data )) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Pick File Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Model ( Error Status . DATA _ ERROR , ĠR . string . file _ picker _ data _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Pick File Error ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠError Model ( Error Status . FILE _ ERROR , ĠR . string . file _ picker _ file _ error ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġlog Error ( REQUEST _ CODE _ ERROR _ MESSAGE , ĠRuntimeException ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils . delete Uri ( caller . context , Ġcurrent Capt ured Video Uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcallback . on Pick File Canceled () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠGenerates Ġthe Ġfile Ġdata Ġobject Ġwhich Ġwill Ġcontain Ġall Ġthe Ġneeded Ġmeta Ġdata Ġabout Ġthe Ġcaptured Ġfile . ĊĠĠĠĠ Ġ* Ġ@ return Ġ[ File Data ] ĊĠĠĠĠ Ġ* Ġ*/ ĊĠĠĠ Ġprivate Ġfun Ġgenerate File Data (): ĠFile Data ? Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġfile Ġ= ĠFile ( current Capt ured Video Path !! ) ĊĠĠĠĠĠĠĠ Ġval ĠfilePath Ġ= Ġcurrent Capt ured Video Path ĊĠĠĠĠĠĠĠ Ġval ĠfileName Ġ= Ġfile . name ĊĠĠĠĠĠĠĠ Ġval ĠmimeType Ġ= ĠFileUtils . getFile MimeType ( caller . context , Ġcurrent Capt ured Video Uri !! ) ĊĠĠĠĠĠĠĠ Ġval ĠfileSize Ġ= ĠFileUtils . getFile Size ( caller . context , Ġcurrent Capt ured Video Uri !! ) ĊĠĠĠĠĠĠĠ Ġreturn Ġif Ġ( filePath . isNull Or Blank () Ġ|| ĠmimeType . isNull Or Blank ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġnull ĊĠĠĠĠĠĠĠ Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( allow Sync With Gallery ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġsync With Gallery ( file , ĠfilePath , ĠfileName ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile Data ( current Capt ured Video Uri !! , ĠfilePath , Ġfile , ĠfileName , ĠmimeType , ĠfileSize ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠScan Ġgiven Ġfile Ġto Ġthe Ġgallery ĊĠĠĠĠ Ġ* Ġ@ param Ġfile Ġa Ġfile Ġto Ġbe Ġscanned ĊĠĠĠĠ Ġ* Ġ@ param ĠfilePath Ġa Ġfile Ġpath Ġto Ġbe Ġscanned ĊĠĠĠĠ Ġ* Ġ@ param Ġimage Name Ġfile Ġname ĊĠĠĠĠ Ġ**/ ĊĠĠĠ Ġprivate Ġfun Ġsync With Gallery ( file : ĠFile , ĠfilePath : ĠString , Ġvideo Name : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Platform . is Android Q ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠAndroid Q FileUtils . save Video To Gallery ( caller . context , Ġfile , Ġvideo Name , Ġgallery Folder Name ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFileUtils Below Android Q . save Video To Gallery ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaller . context , Ġcurrent Capt ured Video Uri !! , ĠfilePath , Ġgallery Folder Name ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }