I have this code below, in which I want to choose the profile picture for my app and I can only select an image from gallery, then upload it to firebase storage and fetch it.
But I would also like to know if there's a way to when selecting an image, crop it to the ratio 1:1, compress it, uploading it to firebase storage and then fetch it. I'm stuck with this problem for a while and I can't seem to move forward for a week or so
How can I do it?
public class PerfilActivity extends AppCompatActivity {
FirebaseUser user;
FirebaseAuth fAuth;
StorageReference storageReference;
FirebaseFirestore fStore;
String userId;
TextView pNomeC, pEmail,pCartao, pAltura, pPeso, pChange;
Button pRegressar, pAlterarpic;
ImageView profileImage;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_perfil);
/*-------------Hooks TextView------------*/
pNomeC = findViewById(R.id.info_nome);
pEmail = findViewById(R.id.info_email);
pCartao = findViewById(R.id.info_cartao);
pAltura = findViewById(R.id.altura_desc);
pPeso = findViewById(R.id.peso_desc);
pChange = findViewById(R.id.btn_change);
/*-------------Hooks da Imagem------------*/
profileImage = findViewById(R.id.user_image);
pAlterarpic= findViewById(R.id.change_pic);
/*-------------Hooks da Firebase------------*/
fAuth = FirebaseAuth.getInstance();
fStore = FirebaseFirestore.getInstance();
storageReference = FirebaseStorage.getInstance().getReference();
userId = fAuth.getCurrentUser().getUid();
user = fAuth.getCurrentUser();
final DocumentReference documentReference = fStore.collection("utilizadores").document(userId);
documentReference.addSnapshotListener(this, new EventListener<DocumentSnapshot>() {
@Override
public void onEvent(@Nullable DocumentSnapshot documentSnapshot, @Nullable FirebaseFirestoreException error) {
pNomeC.setText(documentSnapshot.getString("Name"));
pEmail.setText(documentSnapshot.getString("email"));
pCartao.setText(documentSnapshot.getString("cartao"));
pPeso.setText(documentSnapshot.getString("peso"));
pAltura.setText(documentSnapshot.getString("altura"));
}
});
//Insere o valores dentro do firebase storage antes de entrar
StorageReference profilerRef = storageReference.child("users/"+fAuth.getCurrentUser().getUid()+"/profile.jpg");
profilerRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).into(profileImage);
}
});
/*-------------Hooks do Butao------------*/
pRegressar = findViewById(R.id.regressar);
pRegressar.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openMainActivity();
}
});
pChange.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
openChangeActivity(); }
});
pAlterarpic.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
//abre a galeria
Intent openGalleryIntent = new Intent(Intent.ACTION_PICK, MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
startActivityForResult(openGalleryIntent,1000);
}
});
}
private void startCropActivity(){
CropImage.activity()
.setGuidelines(CropImageView.Guidelines.ON)
.start(this);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
if(requestCode == 1000){
if(resultCode == Activity.RESULT_OK){
Uri imageUri = data.getData();
profileImage.setImageURI(imageUri);
uploadImageToFirebase(imageUri);
}
}
}
private void uploadImageToFirebase(Uri imageUri) {
//upload imagem para Firebase Storage
final StorageReference fileRef = storageReference.child("users/"+fAuth.getCurrentUser().getUid()+"/profile.jpg");
fileRef.putFile(imageUri).addOnSuccessListener(new OnSuccessListener<UploadTask.TaskSnapshot>() {
@Override
public void onSuccess(UploadTask.TaskSnapshot taskSnapshot) {
fileRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() {
@Override
public void onSuccess(Uri uri) {
Picasso.get().load(uri).into(profileImage);
}
});
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Toast.makeText(PerfilActivity.this, "Erro", Toast.LENGTH_SHORT).show();
}
});
}
public void openMainActivity(){
Intent intent = new Intent(PerfilActivity.this,MainActivity.class);
startActivity(intent);
}
public void openChangeActivity(){
Intent intent = new Intent(PerfilActivity.this,SetPerfilActivity.class);
startActivity(intent);
}
}