package Ġcom . example . snap chat clone Ċ Ċ import Ġandroid . app . Activity Ċ import Ġandroid . content . Intent Ċ import Ġandroid . content . pm . PackageManager Ċ import Ġandroid . graphics . Bitmap Ċ import Ġandroid . graphics . drawable . Bitmap Drawable Ċ import Ġandroid . net . Uri Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . provider . Media Store Ċ import Ġandroid . util . Log Ċ import Ġandroid . view . View Ċ import Ġandroid . widget . Button Ċ import Ġandroid . widget . EditText Ċ import Ġandroid . widget . ImageView Ċ import Ġandroid . widget . Toast Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġcom . google . android . gms . tasks . Task Ċ import Ġcom . google . firebase . storage . Firebase Storage Ċ import Ġjava . io . ByteArray OutputStream Ċ import Ġjava . util .* ĊĊ Ċ class ĠCreate Snap Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĊĠĠĠ Ġvar Ġcreate Snap ImageView : ImageView ? Ġ= Ġnull ĊĠĠĠ Ġvar Ġmessage EditText : EditText ? Ġ= Ġnull ĊĠĠĠ Ġval Ġimage Name Ġ= ĠUUID . randomUUID (). toString ()+ Ġ". jpg "; ĊĠĠĠ Ġvar Ġcamera ImageView : ImageView ?= null ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . activity _ create _ snap ) ĊĠĠĠĠĠĠĠ Ġget Support ActionBar ()?. setTitle (" Create Ġsnap "); ĊĊĠĠĠĠĠĠĠ Ġcreate Snap ImageView Ġ= ĠfindViewById ( R . id . create Snap ImageView ) ĊĠĠĠĠĠĠĠ Ġmessage EditText Ġ= ĠfindViewById ( R . id . message EditText ) ĊĊĊĠĠĠ Ġ} ĊĠĠĠ Ġfun Ġcamera ( v : View ){ ĊĠĠĠĠĠĠĠ Ġval Ġintent 2 Ġ= ĠIntent ( Media Store . ACTION _ IMAGE _ CAPTURE ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent 2 , Ġ 2 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġget Photo (){ ĊĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( Intent . ACTION _ P ICK , ĠMedia Store . Images . Media . EXTERNAL _ CONTENT _ URI ) ĊĠĠĠĠĠĠĠ ĠstartActivity For Result ( intent , Ġ 1 ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġchoose Image ( view : ĠView ){ ĊĠĠĠĠĠĠĠ Ġif ( check Self Permission ( android . Manifest . permission . READ _ EXTERNAL _ STORAGE ) Ġ!= ĠPackage Manager . PERMISSION _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( android . Manifest . permission . READ _ EXTERNAL _ STORAGE ), Ġ 1 ) ĊĠĠĠĠĠĠĠ Ġ} else { ĊĠĠĠĠĠĠĠĠĠĠĠ Ġget Photo () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Activity Result ( request Code : ĠInt , ĠresultCode : ĠInt , Ġdata : ĠIntent ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . on Activity Result ( request Code , ĠresultCode , Ġdata ) ĊĠĠĠĠĠĠĠ Ġif ( request Code Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġselected Image Ġ= Ġdata !!. data ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( result Code Ġ== ĠActivity . RESULT _ OK Ġ&& Ġdata Ġ!= Ġnull ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtry { ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= ĠMedia Store . Images . Media . get Bitmap ( this . content Resolver , Ġselected Image ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Snap ImageView ?. setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} catch Ġ( e : ĠException ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġe . printStackTrace () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} else Ġif ( request Code Ġ== Ġ 2 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġdata !!. extras !! [" data "] Ġas ĠBitmap ? ĊĠĠĠĠĠĠĠĠĠĠĠ Ġcreate Snap ImageView ?. setImage Bitmap ( bitmap ) ĊĠĠĠĠĠĠĠ Ġ} ĊĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun Ġon Request Permissions Result ( request Code : ĠInt , Ġpermissions : ĠArray < out ĠString >, Ġgrant Results : ĠInt Array ) Ġ{ ĊĠĠĠĠĠĠĠ Ġif ( request Code Ġ== Ġ 1 ){ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif ( grant Results . size Ġ> Ġ 0 Ġ&& Ġgrant Results [ 0 ] Ġ== ĠPackage Manager . PERMISSION _ GRAN TED ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġget Photo () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġsuper . on Request Permissions Result ( request Code , Ġpermissions , Ġgrant Results ) ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġfun Ġnext Clicked ( view : ĠView ){ ĊĠĠĠĠĠĠĠ Ġcreate Snap ImageView ?. is Drawing Cache Enabled Ġ= Ġtrue ĊĠĠĠĠĠĠĠ Ġcreate Snap ImageView ?. build Drawing Cache () ĊĠĠĠĠĠĠĠ Ġval Ġbitmap Ġ= Ġ( create Snap ImageView ?. drawable Ġas ĠBitmap Drawable ). bitmap ĊĠĠĠĠĠĠĠ Ġval Ġba os Ġ= ĠByteArrayOutputStream () ĊĠĠĠĠĠĠĠ Ġbitmap ?. compress ( Bitmap . Compress Format . JPEG , Ġ 1 0 0 , Ġba os ) ĊĠĠĠĠĠĠĠ Ġval Ġdata Ġ= Ġba os . toByteArray () ĊĊĠĠĠĠĠĠĠ Ġ// Firebase Storage . getInstance (). getReference (). child (" Images "). child ( image Name ) ĊĊĠĠĠĠĠĠĠ Ġvar Ġupload Task Ġ= ĠFirebase Storage . getInstance (). getReference (). child (" Images "). child ( image Name ). put Bytes ( data ) ĊĠĠĠĠĠĠĠ Ġupload Task . add On Success Listener Ġ{ Ġtask Snapshot Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Snapshot . metadata Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( task Snapshot . metadata !!. reference Ġ!= Ġnull ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġresult : ĠTask < Uri > Ġ= Ġtask Snapshot . storage . download Url ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġresult . add On Success Listener Ġ{ Ġuri Ġ-> ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval ĠimageUrl : ĠString Ġ= Ġuri . toString () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠLog . i (" Download Ġurl Ġ: Ġ", ĠimageUrl . toString ()) ĊĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġintent Ġ= ĠIntent ( this , ĠCh ose User Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" imageUrl ", ĠimageUrl ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" image Name ", Ġimage Name ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġintent . putExtra (" message ", Ġmessage EditText ?. text . toString ()) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( intent ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ}. add On Failure Listener Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ// ĠHandle Ġun successful Ġuploads ĊĠĠĠĠĠĠĠĠĠĠĠ ĠToast . makeText ( this , Ġ" Upload Ġfailed ", ĠToast . LENGTH _ SHORT ). show () ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }