/* Ċ * ĠCopyright Ġ 2 0 1 7 ĠThe ĠAndroid ĠOpen ĠSource ĠProject Ċ * Ċ * Ġ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 . example . android . system . runtime permissions . camera Ċ Ċ import Ġandroid . hardware . Camera Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . support . design . widget . Snackbar Ċ import Ġandroid . support . v 4 . app . Fragment Ċ import Ġandroid . view . LayoutInflater Ċ import Ġandroid . view . View Ċ import Ġandroid . view . ViewGroup Ċ import Ġcom . example . android . system . runtime permissions . R Ċ import Ġkotlinx . android . synt hetic . main . fragment _ camera .* Ċ Ċ /** Ċ Ġ* ĠDisplays Ġa Ġ[ Camera Preview ] Ġof Ġthe Ġfirst Ġ[ Camera ]. Ċ Ġ* ĠAn Ġerror Ġmessage Ġis Ġdisplayed Ġif Ġthe ĠCamera Ġis Ġnot Ġavailable . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠThis ĠFragment Ġis Ġonly Ġused Ġto Ġillustr ate Ġthat Ġaccess Ġto Ġthe ĠCamera ĠAPI Ġhas Ġbeen Ġgranted Ġ( or Ċ Ġ* Ġdenied ) Ġas Ġpart Ġof Ġthe Ġruntime Ġpermissions Ġmodel . ĠIt Ġis Ġnot Ġrelevant Ġfor Ġthe Ġuse Ġof Ġthe Ċ Ġ* Ġpermissions ĠAPI . Ċ Ġ* Ċ Ġ* Ċ Ġ* ĠImplementation Ġis Ġbased Ġdirectly Ġon Ġthe Ġdocumentation Ġat Ċ Ġ* Ġhttp :// developer . android . com / guide / topics / media / camera . html Ċ Ġ*/ Ċ class ĠCamera Preview Fragment Ġ: ĠFragment () Ġ{ ĊĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġpreview : ĠCamera Preview ĊĠĠĠ Ġprivate Ġvar Ġcamera : ĠCamera ? Ġ= Ġnull ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate View ( in flater : ĠLayoutInflater , Ġcontainer : ĠViewGroup ?, ĊĠĠĠĠĠĠĠĠĠĠĠ ĠsavedInstanceState : ĠBundle ?): ĠView Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ// ĠOpen Ġan Ġinstance Ġof Ġthe Ġfirst Ġcamera Ġand Ġretrieve Ġits Ġinfo . ĊĠĠĠĠĠĠĠ Ġcamera Ġ= ĠCamera . open ( CAMERA _ ID ) ĊĠĠĠĠĠĠĠ Ġval Ġcamera Info : ĠCamera . Camera Info Ġ= ĠCamera . Camera Info () ĊĊĠĠĠĠĠĠĠ Ġif Ġ( camera Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġcamera Ġinfo Ġonly Ġif Ġthe Ġcamera Ġis Ġavailable ĊĠĠĠĠĠĠĠĠĠĠĠ ĠCamera . get Camera Info ( CAMERA _ ID , Ġcamera Info ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġval Ġroot : ĠView ĊĊĠĠĠĠĠĠĠ Ġif Ġ( camera Ġ== Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCamera Ġis Ġnot Ġavailable , Ġdisplay Ġerror Ġmessage ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ camera _ un available , Ġcontainer , Ġfalse ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠSn ackbar . make ( root , Ġ" Camera Ġis Ġnot Ġavailable .", ĠSn ackbar . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġroot Ġ= Ġinflater . inflate ( R . layout . fragment _ camera , Ġcontainer , Ġfalse ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠGet Ġthe Ġrotation Ġof Ġthe Ġscreen Ġto Ġadjust Ġthe Ġpreview Ġimage Ġaccordingly . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġdisplay Rotation Ġ= Ġactivity . window Manager . default Display . rotation ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe ĠPreview Ġview Ġand Ġset Ġit Ġas Ġthe Ġcontent Ġof Ġthis ĠActivity . ĊĠĠĠĠĠĠĠĠĠĠĠ Ġpreview Ġ= ĠCamera Preview ( activity , Ġcamera , Ġcamera Info , Ġdisplay Rotation ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcamera Preview . addView ( preview ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġroot ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Pause () Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Pause () ĊĠĠĠĠĠĠĠ Ġ// ĠStop Ġcamera Ġaccess ĊĠĠĠĠĠĠĠ Ġrelease Camera () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġrelease Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġcamera ?. release () Ġ// Ġrelease Ġthe Ġcamera Ġfor Ġother Ġapplications . ĊĠĠĠĠĠĠĠ Ġcamera Ġ= Ġnull ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġcompanion Ġobject Ġ{ ĊĊĠĠĠĠĠĠĠ Ġ/** ĊĠĠĠĠĠĠĠĠ Ġ* ĠId Ġof Ġthe Ġcamera Ġto Ġaccess . Ġ 0 Ġis Ġthe Ġfirst Ġcamera . ĊĠĠĠĠĠĠĠĠ Ġ*/ ĊĠĠĠĠĠĠĠ Ġprivate Ġconst Ġval ĠCAM ERA _ ID Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġfun Ġnew Instance () Ġ= ĠCamera Preview Fragment () ĊĠĠĠ Ġ} Ċ } Ċ