package Ġcom . robert lev ony an . demo . cam er ax . fragments Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . os . Environment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġandroidx . activity . On Back Pressed Callback Ċ import Ġandroidx . core . app . Activity Compat Ċ import Ġandroidx . core . content . Context Compat Ċ import Ġandroidx . databinding . Data Binding Util Ċ import Ġandroidx . databinding . ViewData Binding Ċ import Ġandroidx . fragment . app . Fragment Ċ import Ġcom . google . android . material . sn ackbar . Snackbar Ċ import Ġcom . robert lev ony an . demo . cam er ax . R Ċ import Ġjava . io . File Ċ Ċ /** Parent Ġclass Ġof Ġall Ġthe Ġfragments Ġin Ġthis Ġproject */ Ċ abstract Ġclass ĠBase Fragment < B Ġ: ĠView Data Binding >( private Ġval Ġfragment Layout : ĠInt ) Ġ: ĠFragment () Ġ{ ĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠREQUEST _ CODE _ PERMISSION S Ġ= Ġ 1 0 ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġbinding : ĠB Ġ// ĠGeneric ĠView Binding Ġof Ġthe Ġsubclasses ĊĠĠĠ Ġprotected Ġlateinit Ġvar Ġoutput Directory : ĠFile Ġ// ĠThe ĠFolder Ġwhere Ġall Ġthe Ġfiles Ġwill Ġbe Ġstored ĊĊĠĠĠ Ġ// ĠThe Ġpermissions Ġwe Ġneed Ġfor Ġthe Ġapp Ġto Ġwork Ġproperly ĊĠĠĠ Ġprivate Ġval Ġpermissions Ġ= ĠarrayOf ( ĊĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA , ĊĠĠĠĠĠĠĠ ĠManifest . permission . RECORD _ AUDIO , ĊĠĠĠĠĠĠĠ ĠManifest . permission . READ _ EXTERNAL _ STORAGE , ĊĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠ Ġ) ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġfragment Ġis Ġretained , Ġthe Ġlifecycle Ġdoes Ġnot Ġget Ġrestarted Ġit Ġon Ġconfig Ġchange ĊĠĠĠĠĠĠĠ Ġretain Instance Ġ= Ġtrue ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( ĊĠĠĠĠĠĠĠ Ġinflater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĠsavedInstanceState : ĠBundle ? ĊĠĠĠ Ġ): ĠView Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠAdding Ġan Ġoption Ġto Ġhandle Ġthe Ġback Ġpress Ġin Ġfragment ĊĠĠĠĠĠĠĠ Ġrequire Activity (). on Back Pressed Dispatcher . add Callback ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠ Ġobject Ġ: ĠOn Back Pressed Callback ( true ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġoverride Ġfun Ġhandle On Back Pressed () Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Back Pressed () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĊĠĠĠĠĠĠĠ Ġ// ĠInit Ġthe Ġoutput Ġfolder ĊĠĠĠĠĠĠĠ Ġoutput Directory Ġ= ĠFile ( ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Context (). get External Files Dir ( Environment . DIRECTORY _ DC IM )?. absolute Path ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ?: Ġrequire Context (). external Media Dirs . first (). absolute Path ĊĠĠĠĠĠĠĠ Ġ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġa Ġbinding Ġinstance ĊĠĠĠĠĠĠĠ Ġbinding Ġ= ĠData Binding Util . inflate ( in flater , Ġfragment Layout , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠ Ġreturn Ġbinding . root ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Resume () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Resume () ĊĠĠĠĠĠĠĠ Ġ// ĠEach Ġtime Ġthe Ġapp Ġcomes Ġto Ġforeground Ġwe Ġwill Ġcheck Ġfor Ġthe Ġpermissions ĊĠĠĠĠĠĠĠ Ġif Ġ( all Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Granted () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . request Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity (), Ġpermissions , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠREQUEST _ CODE _ PERMISSION S ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( ĊĠĠĠĠĠĠĠ Ġrequest Code : ĠInt , ĊĠĠĠĠĠĠĠ Ġpermissions : ĠArray < out ĠString >, ĊĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ĊĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠREQUEST _ CODE _ PERMISSION S ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( all Permissions Granted ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġon Permission Granted () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġview ?. let Ġ{ Ġv Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( v , ĠR . string . message _ no _ permissions , ĠSn ackbar . LENGTH _ IN DEFIN ITE ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setAction ( R . string . label _ ok ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠActivity Compat . finish Affinity ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequire Activity () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// ĠCheck Ġfor Ġthe Ġpermissions ĊĠĠĠ Ġprotected Ġfun Ġall Permissions Granted () Ġ= Ġpermissions . all Ġ{ ĊĠĠĠĠĠĠĠ ĠContext Compat . check Self Permission ( require Context (), Ġit ) Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġopen Ġfun Ġon Permission Granted () Ġ= ĊĠĠĠĠĠĠĠ ĠUnit Ġ// Ġa Ġfunction Ġwhich Ġwill Ġbe Ġcalled Ġafter Ġthe Ġpermission Ġcheck ĊĊĠĠĠ Ġabstract Ġfun Ġon Back Pressed () Ġ// Ġan Ġabstract Ġfunction Ġwhich Ġwill Ġbe Ġcalled Ġon Ġthe ĠBack Ġbutton Ġpress Ċ Ċ }