package Ġcom . emo j ify . me . ui . main Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Toast Ċ import Ġcom . emo j ify . me . R Ċ import Ġcom . emo j ify . me . ui . base . Base Activity Ċ import Ġcom . emo j ify . me . api . emo j ifier . E moj ifier Ċ import Ġcom . emo j ify . me . utils . resample Pic Util Ċ import Ġcom . emo j ify . me . utils . share Image Util Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjavax . inject . Inject Ċ Ċ class ĠMainActivity Ġ: ĠBase Activity (), ĠMain View , ĠView . OnClickListener Ġ{ ĊĊĠĠĠ Ġ// private Ġvar Ġm Temp Photo Path : ĠString ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġvar Ġm Results Bitmap : ĠBitmap ? Ġ= Ġnull ĊĊĠĠĠ Ġprivate Ġval Ġrequest Image Capture Ġ= Ġ 1 ĊĠĠĠ Ġprivate Ġval Ġrequest Storage Permission Ġ= Ġ 1 ĊĊĠĠĠ Ġ@ Inject ĊĠĠĠ Ġlateinit Ġvar Ġmain Presenter : ĠMain Presenter < Main View > ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĠĠĠĠĠĠĠ Ġactivity Component . inject Main ( this ) ĊĊĠĠĠĠĠĠĠ Ġmain Presenter . on Attach ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġsetup View Listeners () Ġ{ ĊĠĠĠĠĠĠĠ Ġemo j ify _ button . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġclear _ button . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġsave _ button . setOnClickListener ( this ) ĊĠĠĠĠĠĠĠ Ġshare _ button . setOnClickListener ( this ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonClick ( v : ĠView ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( v ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġemo j ify _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on E moj ify Me Btn Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġclear _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Clear Btn Clicked () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġsave _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Save Btn Clicked ( m Results Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare _ button Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Share Btn Clicked ( m Results Bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠLa unches Ġthe Ġcamera Ġapp . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġemo j ify Me () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCheck Ġfor Ġthe Ġexternal Ġstorage Ġpermission ĊĠĠĠĠĠĠĠ Ġif Ġ(! has Permission ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE )) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġdo Ġnot Ġhave Ġpermission , Ġrequest Ġit ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions S af ely ( array Of ( Manifest . permission . WRITE _ EXTERNAL _ STORAGE ), Ġrequest Storage Permission ) ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLaunch Ġthe Ġcamera Ġif Ġthe Ġpermission Ġexists ĊĠĠĠĠĠĠĠĠĠĠĠ Ġlaunch Camera () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < String >, ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCalled Ġwhen Ġyou Ġrequest Ġpermission Ġto Ġread Ġand Ġwrite Ġto Ġexternal Ġstorage ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Storage Permission Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( grant Results . isNotEmpty () Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Permissions Granted () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Permission Denied () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġdisplay Permission R ationale () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġyou Ġdo Ġnot Ġget Ġpermission , Ġshow Ġa ĠToast ĊĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠR . string . permission _ den ied , ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠCreates Ġa Ġtemporary Ġimage Ġfile Ġand Ġcaptures Ġa Ġpicture Ġto Ġstore Ġin Ġit . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġlaunch Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠCreate Ġthe Ġcapture Ġimage Ġintent ĊĠĠĠĠĠĠĠ Ġval Ġtake Picture Intent Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠEnsure Ġthat Ġthere 's Ġa Ġcamera Ġactivity Ġto Ġhandle Ġthe Ġintent ĊĠĠĠĠĠĠĠ Ġif Ġ( take Picture Intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġphoto Uri Ġ= Ġmain Presenter . on Take Picture () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( photo Uri Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠAdd Ġthe ĠURI Ġso Ġthe Ġcamera Ġcan Ġstore Ġthe Ġimage ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtake Picture Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġphoto Uri ) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠLaunch Ġthe Ġcamera Ġactivity ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( take Picture Intent , Ġrequest Image Capture ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Could Ġnot ĠLaunch Ġcamera ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthe Ġimage Ġcapture Ġactivity Ġwas Ġcalled Ġand Ġwas Ġsuccessful ĊĠĠĠĠĠĠĠ Ġwhen Ġ( result Code ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ OK Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== Ġrequest Image Capture ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠProcess Ġthe Ġimage Ġand Ġset Ġit Ġto Ġthe ĠImageView ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Activity Result Success () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠActivity . RESULT _ C ANCE LED Ġ-> Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠOtherwise , Ġdelete Ġthe Ġtemporary Ġimage Ġfile ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġmain Presenter . on Activity Result Failed () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ/** ĊĠĠĠĠ Ġ* ĠMethod Ġfor Ġprocessing Ġthe Ġcaptured Ġimage Ġand Ġsetting Ġit Ġto Ġthe ĠTextView . ĊĠĠĠĠ Ġ*/ ĊĠĠĠ Ġoverride Ġfun Ġprocess AndSet Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠToggle ĠVisibility Ġof Ġthe Ġviews ĊĠĠĠĠĠĠĠ Ġemo j ify _ button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġtitle _ text _ view . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġsave _ button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġshare _ button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġclear _ button . visibility Ġ= ĠView . VISIBLE ĊĊĠĠĠĠĠĠĠ Ġmain Presenter . on Res ample Pic Request () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġres ample Pic ( photo Path : ĠString ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠRes ample Ġthe Ġsaved Ġimage Ġto Ġfit Ġthe ĠImageView ĊĠĠĠĠĠĠĠ Ġm Results Bitmap Ġ= Ġres ample Pic Util ( this , Ġphoto Path ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠDetect Ġthe Ġfaces Ġand Ġoverlay Ġthe Ġappropriate Ġemoji ĊĠĠĠĠĠĠĠ Ġm Results Bitmap Ġ= ĠE moj ifier . detect Faces And Overlay Emoji ( this , Ġm Results Bitmap !! ) ĊĊĠĠĠĠĠĠĠ Ġ// ĠSet Ġthe Ġnew Ġbitmap Ġto Ġthe ĠImageView ĊĠĠĠĠĠĠĠ Ġimage _ view . setImage Bitmap ( m Results Bitmap ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġshare Image ( photo Path : ĠString , Ġsaved Photo Location : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( saved Photo Location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġa ĠToast Ġwith Ġthe Ġsave Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . saved _ message , Ġsaved Photo Location ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . LENGTH _ SHORT ). show () ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġshare Image Util ( this , Ġphoto Path ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġclear Image ( isFile Deleted : ĠBoolean ) Ġ{ ĊĠĠĠĠĠĠĠ Ġ// ĠClear Ġthe Ġimage Ġand Ġtoggle Ġthe Ġview Ġvisibility ĊĠĠĠĠĠĠĠ Ġimage _ view . setImage Resource ( 0 ) ĊĠĠĠĠĠĠĠ Ġemo j ify _ button . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġtitle _ text _ view . visibility Ġ= ĠView . VISIBLE ĊĠĠĠĠĠĠĠ Ġshare _ button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġsave _ button . visibility Ġ= ĠView . GONE ĊĠĠĠĠĠĠĠ Ġclear _ button . visibility Ġ= ĠView . GONE ĊĊĠĠĠĠĠĠĠ Ġ// ĠIf Ġthere Ġis Ġan Ġerror Ġdeleting Ġthe Ġfile , Ġshow Ġa ĠToast ĊĠĠĠĠĠĠĠ Ġif Ġ(! isFile Deleted ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . error ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġnotify User Of Saved Image ( saved Photo Location : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( saved Photo Location Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠShow Ġa ĠToast Ġwith Ġthe Ġsave Ġlocation ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . saved _ message , Ġsaved Photo Location ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , ĠgetString ( R . string . not _ saved ), ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ } Ċ