package Ġcom . example . image compressor Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . os . Build Ċ import Ġandroid . support . v 7 . app . AppCompatActivity Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . support . v 4 . content . File Provider Ċ import Ġandroid . support . v 4 . content . Permission Checker Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġcom . bump tech . glide . G lide Ċ import Ġcom . example . image compressor . helpers . Rx Java Utils Ċ import Ġkotlinx . android . synt hetic . main . activity _ main .* Ċ import Ġjava . io . File Ċ import Ġjava . text . Decimal Format Ċ Ċ class ĠMainActivity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġprivate Ġval ĠPER MISSION S _ REQUEST _ CAMERA Ġ= Ġ 1 0 0 0 1 ĊĠĠĠ Ġprivate Ġval ĠCAM ERA _ REQ _ ID Ġ= Ġ 1 2 4 3 ĊĠĠĠ Ġprivate Ġvar Ġselected Image File : ĠFile ? Ġ= Ġnull ĊĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ main ) ĊĊĠĠĠĠĠĠĠ Ġbtn _ camera . setOnClickListener Ġ{ Ġcheck Camera Permission () Ġ} ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( request Code Ġ== ĠPER MISSION S _ REQUEST _ CAMERA ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( permissions [ 0 ] Ġ== ĠManifest . permission . CAMERA Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ&& Ġpermissions [ 1 ] Ġ== ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE Ġ&& Ġgrant Results [ 1 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġopen Camera () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Permission ĠDen ied ", ĠToast . LENGTH _ LONG ). show () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif Ġ( result Code Ġ== ĠActivity . RESULT _ OK ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcompress Image () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġcompress Image () Ġ{ ĊĠĠĠĠĠĠĠ Ġset G lide Image ( imageView , Ġselected Image File !!. absolute Path ) ĊĠĠĠĠĠĠĠ Ġtv _ size . text Ġ= Ġget Size FromFile ( selected Image File !!. length ()) ĊĠĠĠĠĠĠĠ ĠCompress Application . get Inst an se () !!. getFile Compress () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compress ( this , Ġselected Image File !! ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. compose ( Rx Java Utils . apply Observer Schedulers < File >()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. subscribe ({ Ġfile Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġset G lide Image ( imageView 2 , Ġfile !!. absolute Path ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtv _ size 2 . text Ġ= Ġget Size FromFile ( file . length ()) ĊĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġ}, Ġ{ Ġthrowable Ġ-> Ġthrowable . printStackTrace () Ġ}) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġset G lide Image ( view : ĠImageView ?, Ġpath : ĠString ?) Ġ{ ĊĠĠĠĠĠĠĠ ĠG lide ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. with ( this ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. load ( path ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ. into ( view !! ); ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġprivate Ġfun Ġopen Camera () Ġ{ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent (" android . media . action . IMAGE _ CAPTURE ") ĊĊĠĠĠĠĠĠĠ Ġval Ġfolder Ġ= ĠFile ( Build Config . ATTACHMENT _ DOWNLOAD _ FILES _ FOLDER ) ĊĠĠĠĠĠĠĠ Ġif Ġ(! folder . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfolder . mkdir () ĊĊĠĠĠĠĠĠĠ Ġval Ġphoto File Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠ ĠFile ( Build Config . ATTACHMENT _ DOWNLOAD _ FILES _ FOLDER , ĠSystem . currentTimeMillis (). toString () Ġ+ Ġ". jpg ") ĊĠĠĠĠĠĠĠ Ġif Ġ(! photo File . exists ()) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġphoto File . createNew File () ĊĊĠĠĠĠĠĠĠ Ġselected Image File Ġ= Ġphoto File ĊĠĠĠĠĠĠĠ Ġval Ġuri Ġ= ĠFile Provider . get Uri For File ( this , ĠBuild Config . APPLICATION _ ID , Ġphoto File ) ĊĊĠĠĠĠĠĠĠ Ġintent . putExtra ( Media Store . EXTRA _ OUTPUT , Ġuri ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , ĠCAM ERA _ REQ _ ID ) ĊĠĠĠ Ġ} ĊĊĊĠĠĠ Ġprivate Ġfun Ġcheck Camera Permission () Ġ{ ĊĠĠĠĠĠĠĠ Ġif Ġ( Build . VERSION . SDK _ INT Ġ>= ĠBuild . VERSION _ CODES . M ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( Permission Checker . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED Ġ|| ĠPermission Checker . check Self Permission ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġthis , ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠarrayOf ( Manifest . permission . CAMERA , ĠManifest . permission . WRITE _ EXTERNAL _ STORAGE ), ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠPER MISSION S _ REQUEST _ CAMERA ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġreturn ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġopen Camera () ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Size FromFile ( size : ĠLong ): ĠString Ġ{ ĊĠĠĠĠĠĠĠ Ġvar Ġhr Size : ĠString ? Ġ= Ġnull ĊĊĠĠĠĠĠĠĠ Ġval Ġb Ġ= Ġsize . toDouble () ĊĠĠĠĠĠĠĠ Ġval Ġk Ġ= Ġsize Ġ/ Ġ 1 0 2 4 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġm Ġ= Ġsize Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġg Ġ= Ġsize Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 ĊĠĠĠĠĠĠĠ Ġval Ġt Ġ= Ġsize Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 Ġ/ Ġ 1 0 2 4 . 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġdec Ġ= ĠDecimal Format (" 0 . 0 0 ") ĊĊĠĠĠĠĠĠĠ Ġif Ġ( t Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhr Size Ġ= Ġdec . format ( t ) Ġ+ Ġ" ĠTB " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( g Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhr Size Ġ= Ġdec . format ( g ) Ġ+ Ġ" ĠGB " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( m Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhr Size Ġ= Ġdec . format ( m ) Ġ+ Ġ" ĠMB " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġif Ġ( k Ġ> Ġ 1 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhr Size Ġ= Ġdec . format ( k ) Ġ+ Ġ" ĠKB " ĊĠĠĠĠĠĠĠ Ġ} Ġelse Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġhr Size Ġ= Ġdec . format ( b ) Ġ+ Ġ" ĠBytes " ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠĠĠĠĠ Ġreturn Ġhr Size ĊĠĠĠ Ġ} Ċ Ċ } Ċ