package
com.example.gfggo;
import
androidx.annotation.NonNull;
import
androidx.annotation.Nullable;
import
androidx.appcompat.app.AppCompatActivity;
import
android.app.ProgressDialog;
import
android.content.Intent;
import
android.graphics.Bitmap;
import
android.net.Uri;
import
android.os.Bundle;
import
android.provider.MediaStore;
import
android.view.View;
import
android.widget.Button;
import
android.widget.ImageView;
import
android.widget.Toast;
import
com.google.android.gms.tasks.OnFailureListener;
import
com.google.android.gms.tasks.OnSuccessListener;
import
com.google.firebase.storage.FirebaseStorage;
import
com.google.firebase.storage.StorageReference;
import
com.google.firebase.storage.UploadTask;
import
java.io.ByteArrayOutputStream;
import
java.io.File;
import
java.io.IOException;
public
class
MainActivity
extends
AppCompatActivity {
ImageView displayImage;
Button selectImage, uploadWithoutCompress, uploadWithCompress;
StorageReference storageRef;
private
static
final
int
REQUEST_CODE =
101
;
Uri imageUri;
ProgressDialog mLoadingBar;
Bitmap bmp;
ByteArrayOutputStream baos;
@Override
protected
void
onCreate(Bundle savedInstanceState) {
super
.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
displayImage = findViewById(R.id.imageView);
selectImage = findViewById(R.id.selectImage);
uploadWithoutCompress = findViewById(R.id.upload);
uploadWithCompress = findViewById(R.id.uploadWithCompress);
storageRef = FirebaseStorage.getInstance().getReference().child(
"Images"
);
selectImage.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
Intent i =
new
Intent(Intent.ACTION_PICK,
MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(i, REQUEST_CODE);
}
});
uploadWithCompress.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
if
(imageUri!=
null
){
uploadImageWithCompress();
}
}
});
uploadWithoutCompress.setOnClickListener(
new
View.OnClickListener() {
@Override
public
void
onClick(View view) {
if
(imageUri!=
null
){
uploadImageWithoutCompress();
}
}
});
}
private
void
uploadImageWithCompress() {
mLoadingBar =
new
ProgressDialog(MainActivity.
this
);
mLoadingBar.setTitle(
"Uploading Image with Compress"
);
mLoadingBar.setCanceledOnTouchOutside(
false
);
mLoadingBar.show();
String timestamp =
""
+ System.currentTimeMillis();
bmp =
null
;
try
{
bmp = MediaStore.Images.Media.getBitmap(getContentResolver(), imageUri);
}
catch
(IOException e) {
e.printStackTrace();
}
baos =
new
ByteArrayOutputStream();
bmp.compress(Bitmap.CompressFormat.JPEG,
25
, baos);
byte
[] fileInBytes = baos.toByteArray();
storageRef.child(timestamp).putBytes(fileInBytes)
.addOnSuccessListener(
new
OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public
void
onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mLoadingBar.dismiss();
Toast.makeText(MainActivity.
this
,
"Image uploaded successfully!"
,
Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(
new
OnFailureListener() {
@Override
public
void
onFailure(
@NonNull
Exception e) {
mLoadingBar.dismiss();
Toast.makeText(MainActivity.
this
,
"Image upload failed!"
,
Toast.LENGTH_SHORT).show();
}
});
}
private
void
uploadImageWithoutCompress() {
mLoadingBar =
new
ProgressDialog(MainActivity.
this
);
mLoadingBar.setTitle(
"Uploading Image without Compress"
);
mLoadingBar.setCanceledOnTouchOutside(
false
);
mLoadingBar.show();
final
String timestamp =
""
+ System.currentTimeMillis();
storageRef.child(timestamp).putFile(imageUri)
.addOnSuccessListener(
new
OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public
void
onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
mLoadingBar.dismiss();
Toast.makeText(MainActivity.
this
,
"Image uploaded successfully!"
,
Toast.LENGTH_SHORT).show();
}
}).addOnFailureListener(
new
OnFailureListener() {
@Override
public
void
onFailure(
@NonNull
Exception e) {
mLoadingBar.dismiss();
Toast.makeText(MainActivity.
this
,
"Image upload failed!"
,
Toast.LENGTH_SHORT).show();
}
});
}
@Override
protected
void
onActivityResult(
int
requestCode,
int
resultCode,
@Nullable
Intent data) {
super
.onActivityResult(requestCode, resultCode, data);
if
(requestCode==REQUEST_CODE && resultCode==RESULT_OK && data!=
null
){
imageUri = data.getData();
displayImage.setImageURI(imageUri);
}
}
}