package Ġcom . pol ito . s ism ic . Inter actors Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . support . v 7 . app . AlertDialog Ċ import Ġcom . pol ito . s ism ic . Extensions . toast Ċ import Ġcom . pol ito . s ism ic . Inter actors . Helpers . Media File Ċ import Ġcom . pol ito . s ism ic . Inter actors . Helpers . MediaType Ċ import Ġcom . pol ito . s ism ic . Inter actors . Helpers . Permissions Helper Ċ import Ġcom . pol ito . s ism ic . Inter actors . Helpers . User ActionType Ċ import Ġcom . pol ito . s ism ic . Present ers . Report Activity . Note Activity Ċ import Ġcom . pol ito . s ism ic . Present ers . Report Activity . Sketch Activity Ċ import Ġcom . pol ito . s ism ic . R Ċ import Ġkotlinx . android . synt hetic . main . filename _ dialog . view .* Ċ Ċ /** Ċ Ġ* ĠCreated Ġby ĠMat te o Ġon Ġ 0 8 / 0 8 / 2 0 1 7 . Ċ Ġ*/ Ċ class ĠUser Action Interactor ( private Ġval Ġm Report Manager : ĠReport Manager , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Caller Ġ: ĠActivity , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġm Permission Helper Ġ: ĠPermissions Helper , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprivate Ġval Ġreport Media Interactor : ĠReport Media Interactor Ġ= ĠReport Media Interactor ( m Report Manager , Ġm Caller )) Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠUSER _ ACTION _ PIC ĠĠĠĠĠĠĠĠ Ġ= Ġ 4 0 ĊĠĠĠ Ġprivate Ġval ĠUSER _ ACTION _ VIDEO ĠĠĠĠĠĠ Ġ= Ġ 4 1 ĊĠĠĠ Ġprivate Ġval ĠUSER _ ACTION _ AUDIO ĠĠĠĠĠĠ Ġ= Ġ 4 2 ĊĠĠĠ Ġprivate Ġval ĠUSER _ ACTION _ SK ETCH ĠĠĠĠĠ Ġ= Ġ 4 3 ĊĠĠĠ Ġprivate Ġval ĠUSER _ ACTION _ NOTE ĠĠĠĠĠĠĠ Ġ= Ġ 4 4 ĊĊĊĠĠĠ Ġfun Ġon Action Requested ( request Type Ġ: ĠUser ActionType ) Ġ= Ġwith ( m Caller ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( request Type ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Pic Request Ġ-> ĠĠĠĠĠĠĠ Ġask For File And Launch Intent ( MediaType . Picture ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Video Request Ġ-> ĠĠĠĠĠ Ġask For File And Launch Intent ( MediaType . Video ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Audio Request Ġ-> ĠĠĠĠĠ Ġask For File And Launch Intent ( MediaType . Audio ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Sketch Request -> ĠĠĠĠĠ Ġask For File And Launch Intent ( MediaType . Sketch ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Note Request -> ĠĠĠĠĠĠĠ Ġstart Note Intent ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUser ActionType . Back Request -> ĠĠĠĠĠĠĠ Ġgo Back ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġask For File And Launch Intent ( type Ġ: ĠMediaType ) Ġ= Ġwith ( m Caller ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwith ( layout Inflater . inflate ( R . layout . filename _ dialog , Ġnull )) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġandroid . support . v 7 . app . AlertDialog . Builder ( m Caller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( com . pol ito . s ism ic . R . string . report _ filename _ dialog ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setView ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( com . pol ito . s ism ic . R . string . confirm _ filename , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ _, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( filename . getParameter Value (). length Ġ< Ġ 3 ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ media _ short ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġstart Intent ( report Media Interactor . create File For Media ( type , Ġthis . filename . getParameter Value ()), Ġtype ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( com . pol ito . s ism ic . R . string . discard _ filename , Ġ{ Ġ_, Ġ_ Ġ-> Ġ}) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Intent ( media File : ĠMedia File , Ġtype : ĠMediaType ) ĊĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠ Ġwhen Ġ( type ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . Picture Ġ-> Ġstart Picture Intent ( media File ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . Video Ġ-> Ġstart Video Intent ( media File ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . Audio Ġ-> Ġstart Audio Intent ( media File ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠMediaType . Sketch Ġ-> Ġstart Sketch Intent ( media File ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġelse Ġ-> Ġ{ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġgo Back ( caller : ĠActivity ) Ġ{ ĊĊĠĠĠĠĠĠĠ ĠAlertDialog . Builder ( caller ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setTitle ( R . string . confirm _ report _ back ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setMessage ( R . string . confirm _ report _ back _ message ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. setIcon ( android . R . drawable . ic _ dialog _ alert ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Positive Button ( android . R . string . yes , Ġ{ Ġ_, Ġ_ Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġm Report Manager . delete Tmp Report () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcaller . finish () }) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. set Negative Button ( R . string . ann ull a , Ġnull ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. show () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Note Intent ( caller : ĠActivity ) Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( caller , ĠNote Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġintent . putExtra (" username ", Ġm Report Manager . getUser Name ()) ĊĠĠĠĠĠĠĠ Ġreport Media Interactor . create File For Media ( MediaType . Note , Ġ"") ĊĠĠĠĠĠĠĠ Ġcaller . startActivity For Result ( intent , ĠUSER _ ACTION _ NOTE ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Sketch Intent ( file : ĠMedia File ) Ġ= Ġwith ( m Caller ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġdraw Bitmap Ġ= ĠIntent ( this , ĠSk etch Activity :: class . java ) ĊĠĠĠĠĠĠĠ Ġif Ġ( draw Bitmap . resolve Activity ( package Manager ) Ġ!= Ġnull ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap . putExtra ( Media Store . EXTRA _ OUTPUT , Ġfile . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġdraw Bitmap . putExtra (" username ", Ġm Report Manager . getUser Name ()) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( draw Bitmap , ĠUSER _ ACTION _ SK ETCH ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Audio Intent ( file : ĠMedia File ) Ġ= Ġwith ( m Caller ){ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! m Permission Helper . PERMISSION _ AUDIO _ GRAN TED ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Permission Helper . check And Ask Audio Permissions ( this ) ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Permission Helper . PERMISSION _ AUDIO _ GRAN TED ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġaudio Record Intent Ġ= ĠIntent ( Media Store . Audio . Media . RECORD _ SOUND _ ACTION ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( audio Record Intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġaudio Record Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġfile . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( audio Record Intent , ĠUSER _ ACTION _ AUDIO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . permission _ audio _ den ied ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Video Intent ( file : ĠMedia File ) Ġ= Ġwith ( m Caller ){ ĊĊĠĠĠĠĠĠĠ Ġif Ġ(! m Permission Helper . PERMISSION _ VIDEO _ GRAN TED ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġm Permission Helper . check And Ask Video Permissions ( this ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġif Ġ( m Permission Helper . PERMISSION _ VIDEO _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġtake Video Intent Ġ= ĠIntent ( Media Store . ACTION _ VIDEO _ CAPTURE ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( take Video Intent . resolve Activity ( package Manager ) Ġ!= Ġnull ) Ġ{ ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtake Video Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġfile . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( take Video Intent , ĠUSER _ ACTION _ VIDEO ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . permission _ video _ den ied ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġstart Picture Intent ( file : ĠMedia File ) Ġ= Ġwith ( m Caller ){ ĊĊĠĠĠĠĠĠĠ Ġval Ġtake Picture Intent Ġ: Ġ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 ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtake Picture Intent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġfile . uri ) ĊĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity For Result ( take Picture Intent , ĠUSER _ ACTION _ PIC ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġ// Conf ir ms Ġor Ġdeletes Ġlast Ġadded Ġmedia ĊĠĠĠ Ġfun Ġon Action Response ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġwhen ( request Code ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ACTION _ PIC , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ACTION _ VIDEO , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ACTION _ NOTE , ĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ACTION _ SK ETCH Ġ-> Ġno Other Actions Required ( result Code , Ġdata ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ ĠUSER _ ACTION _ AUDIO Ġ-> Ġfix Uri ( data ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġfix Uri ( data : ĠIntent ?) Ġ{ ĊĊĠĠĠĠĠĠĠ Ġdata ?. let Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġit . data ?. let Ġ{ Ġd Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ// The Ġaudio Ġcould Ġbe Ġsaved Ġinto Ġcustom Ġlocation , Ġin Ġthis Ġway ĠI Ġre position Ġthe Ġfile Ġin Ġthe Ġexpected ĠUri ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreport Media Interactor . fix Uri For Audio ( d ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġno Other Actions Required ( result Code : ĠInt , Ġdata : ĠIntent ?) Ġ= Ġwith ( m Caller ){ ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Media Interactor . finalize Last Media ( data ?. getString Extra (" note ")) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . correct ly _ saving _ file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġelse ĊĠĠĠĠĠĠĠ Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġreport Media Interactor . delete Last Media () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtoast ( R . string . error _ saving _ file ) ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġsave Report ( pdf FileName : ĠString ?) Ġ= Ġwith ( m Report Manager ){ ĊĠĠĠĠĠĠĠ Ġsave Report To Db ( pdf FileName ) ĊĠĠĠ Ġ} Ċ }