FormularioHelper
package work.germano.agenda.modelo;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.graphics.Matrix;
import android.media.ExifInterface;
import android.widget.EditText;
import android.widget.ImageView;
import java.io.IOException;
import work.germano.agenda.NovoContato;
import work.germano.agenda.R;
public class FormularioHelper {
private final EditText campoNome;
private final EditText campoEndereco;
private final EditText campoTelefone;
private final EditText campoEmail;
private final ImageView campoFoto;
private Contato contato;
public FormularioHelper(NovoContato activity) {
campoNome = (EditText) activity.findViewById(R.id.contato_nome);
campoEndereco = (EditText) activity.findViewById(R.id.contato_endereco);
campoTelefone = (EditText) activity.findViewById(R.id.contato_telefone);
campoEmail = (EditText) activity.findViewById(R.id.contato_email);
campoFoto = (ImageView) activity.findViewById(R.id.contato_foto_user);
contato = new Contato();
}
public Contato pegaContato(){
contato.setNome(campoNome.getText().toString());
contato.setEmail(campoEmail.getText().toString());
contato.setTelefone(campoTelefone.getText().toString());
contato.setEndereco(campoEndereco.getText().toString());
contato.setCaminhoFoto((String) campoFoto.getTag());
return contato;
}
public void preencherFormulario(Contato contato) {
campoNome.setText(contato.getNome());
campoEndereco.setText(contato.getEndereco());
campoTelefone.setText(contato.getTelefone());
campoEmail.setText(contato.getEmail());
carregaImagem(contato.getCaminhoFoto());
this.contato = contato;
}
public void carregaImagem(String caminhoFoto) {
if (caminhoFoto != null){
Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
Bitmap bitmapReduzido = Bitmap.createScaledBitmap(bitmap, 300, 300, true);
campoFoto.setScaleType(ImageView.ScaleType.FIT_XY);
try {
bitmap = carrega(caminhoFoto);
} catch (IOException e) {
e.printStackTrace();
}
campoFoto.setImageBitmap(bitmap);
campoFoto.setTag(caminhoFoto);
}
}
private static Bitmap abreFotoERotaciona(String caminhoFoto, int angulo) {
// Abre o bitmap a partir do caminho da foto
Bitmap bitmap = BitmapFactory.decodeFile(caminhoFoto);
// Prepara a operação de rotação com o ângulo escolhido
Matrix matrix = new Matrix();
matrix.postRotate(angulo);
// Cria um novo bitmap a partir do original já com a rotação aplicada
return Bitmap.createBitmap(bitmap, 0, 0,
bitmap.getWidth(), bitmap.getHeight(),
matrix, true);
}
private static Bitmap carrega(String caminhoFoto) throws IOException {
ExifInterface exif = new ExifInterface(caminhoFoto);
String orientacao = exif.getAttribute(ExifInterface.TAG_ORIENTATION);
int codigoOrientacao = Integer.parseInt(orientacao);
switch (codigoOrientacao) {
case ExifInterface.ORIENTATION_NORMAL:
return abreFotoERotaciona(caminhoFoto, 0);
case ExifInterface.ORIENTATION_ROTATE_90:
return abreFotoERotaciona(caminhoFoto, 90);
case ExifInterface.ORIENTATION_ROTATE_180:
return abreFotoERotaciona(caminhoFoto, 180);
case ExifInterface.ORIENTATION_ROTATE_270:
return abreFotoERotaciona(caminhoFoto, 270);
}
return null;
}
}