Java tutorial
/** * Copyright 2013 Clint Cheachwood * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package fr.jcf.pret.activities; import java.io.FileNotFoundException; import android.content.ContentResolver; import android.content.Context; import android.content.Intent; import android.graphics.Bitmap; import android.net.Uri; import android.os.Bundle; import android.provider.ContactsContract.Contacts; import android.provider.MediaStore; import android.support.v4.app.DialogFragment; import android.support.v4.app.FragmentActivity; import android.util.Log; import android.view.Menu; import android.view.MenuInflater; import android.view.MenuItem; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; import android.widget.ImageView; import fr.jcf.pret.R; import fr.jcf.pret.cameravideo.helpers.CameraVideoHelper; import fr.jcf.pret.contrats.PretEmpruntContrat; import fr.jcf.pret.database.adapters.ContactsDBAdapter; import fr.jcf.pret.fragments.DatePickerFragment; import fr.jcf.pret.listeners.AnnulerOnClickListener; import fr.jcf.pret.listeners.ContactButtonOnClickListener; import fr.jcf.pret.listeners.PretEmpruntEnregOnClickListener; import fr.jcf.pret.modeles.PretEmprunt; import fr.jcf.pret.utils.UtilPret; /** * Activity principale * * @author jflicit * */ public class PretEmpruntActivity extends FragmentActivity { private EditText contactNameEditText; private PretEmprunt pretEmprunt; private MenuItem enregButton; private ImageButton contactButton; private MenuItem annulerButton; private EditText dateEditText; private EditText objetEditText; private Bitmap bitmap; private ImageView imageView; private Uri fileUri; public PretEmpruntActivity() { super(); } @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.pret_emprunt_form); // Rcupration des composants du layout contactButton = (ImageButton) findViewById(R.id.choix_contact_Button); dateEditText = (EditText) findViewById(R.id.pret_date_EditText); contactNameEditText = (EditText) findViewById(R.id.pret_contact_EditText); imageView = (ImageView) findViewById(R.id.pret_image); objetEditText = (EditText) findViewById(R.id.pret_objet_EditText); // Gestion des listeners sur les diffrents boutons contactButton.setOnClickListener(new ContactButtonOnClickListener()); extractionData(); } /** * Lorsque l'Activity rcupre le focus, elle rcupre la donne renvoy par l'Intent crer dans l'Activity qui renvoie le rsultat. Dans ce cas * on interroge la table contact et on aliment le champ Nom du contact */ @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { switch (requestCode) { case UtilPret.PICK_CONTACT_REQUEST: pretEmprunt = ContactsDBAdapter.fetchContact(getApplicationContext(), requestCode, resultCode, data, contactNameEditText, pretEmprunt); data.putExtra("data", pretEmprunt); enregButton.setEnabled(true); break; case UtilPret.PICK_IMAGE_REQUEST: if (resultCode == RESULT_OK) { recuperationImage(data); } break; case UtilPret.PICK_CAMERA_REQUEST: if (resultCode == RESULT_OK) { sauvegardeImage(data, getApplicationContext(), fileUri, getContentResolver(), imageView); } break; default: break; } } /** * Permet de rcuprer l'image slectionne par l'utilisateur et de l'afficher l'cran * * @param data */ protected void recuperationImage(Intent data) { Uri selectedImage = null; // On rcupre l'image slectionne pour l'associer au composant // ImageView if (null != data && null != data.getData()) { selectedImage = data.getData(); try { bitmap = UtilPret.decodeUri(selectedImage, getContentResolver(), imageView); imageView.setTag(selectedImage.toString()); } catch (FileNotFoundException e) { Log.d(UtilPret.LOG_SOURCE, "Le fichier slectionn n'a pas t trouv."); Log.d(UtilPret.LOG_SOURCE, e.getMessage()); } imageView.setImageBitmap(bitmap); } else { // Si pas d'image slectionne on affiche l'image par dfaut imageView.setImageResource(R.raw.web_hi_res_512); } } /** * Mthode qui permet d'afficher la boite dialogue de date * * @param v */ public void showDatePickerDialog(View v) { // Instanciation de la boite de dialogue laquelle on passe le champ alimenter DialogFragment newFragment = new DatePickerFragment(dateEditText); // Affichage de la boite de dialogue newFragment.show(getSupportFragmentManager(), "datePicker"); } /** * Permet d'afficher la galerie pour choisir une image * * @param view */ public void showImageDialog(View view) { // Cration d'un intent d'affichage de la galerie Intent intentImage = new Intent(Intent.ACTION_PICK, android.provider.MediaStore.Images.Media.EXTERNAL_CONTENT_URI); startActivityForResult(intentImage, UtilPret.PICK_IMAGE_REQUEST); } /** * Permet de lancer l'appareil photo * * @param view */ public void showCamera(View view) { Intent intentCamera = new Intent(MediaStore.ACTION_IMAGE_CAPTURE); // On cre un objet File et on l'enregistre dans le systme de fichiers fileUri = CameraVideoHelper.getOutputMediaFileUri(CameraVideoHelper.MEDIA_TYPE_IMAGE); // On ajoute le fichier dans les donnes transmettre dans l'Intent intentCamera.putExtra(MediaStore.EXTRA_OUTPUT, fileUri); startActivityForResult(intentCamera, UtilPret.PICK_CAMERA_REQUEST); } /** * Permet de sauvegarder des photos prises avec l'appareil photo * * @param data * @param context * @param fileUri * @param contentResolver * @param imageView */ private void sauvegardeImage(Intent data, Context context, Uri fileUri, ContentResolver contentResolver, ImageView imageView) { Bitmap bitmap = null; if (data != null) { // L'image a t retourne (ne fonctionne pas sur certains priphriques!!!) Bundle extras = data.getExtras(); bitmap = (Bitmap) extras.get("data"); imageView.setImageBitmap(bitmap); } else { // On prpare l'image pour enregistrer son nom et son chemin en base Uri imageSelection = null; // On rcupre le nom du fichier String nomImage = fileUri.toString().substring(fileUri.toString().lastIndexOf("/") + 1, fileUri.toString().length()); // Ici on enlve la partie "file://" afin de ne rcuprer que le chemin du rpertoire String chemin = fileUri.toString().substring(7, fileUri.toString().length()); try { // On enregistre l'image en base pour la rcuprer plus tard imageSelection = Uri .parse(MediaStore.Images.Media.insertImage(contentResolver, chemin, nomImage, "")); bitmap = UtilPret.decodeUri(imageSelection, contentResolver, imageView); // On associe l'image pour affichage imageView.setTag(imageSelection); imageView.setImageBitmap(bitmap); } catch (FileNotFoundException e) { Log.d(UtilPret.LOG_SOURCE, "Le fichier slectionn n'a pas t trouv."); Log.d(UtilPret.LOG_SOURCE, e.getMessage()); } } } /** * Permet de grer les options (affichage, association d'vnements, ...) */ @Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.menu_principal, menu); // Par dfaut le bouton Enregistrer est dsactiv, et on l'associe un vnement d'enregistrement enregButton = menu.findItem(R.id.menu_enregistrer); if (this.pretEmprunt.id <= 0) { if (this.pretEmprunt.contactNom == null) { enregButton.setEnabled(false); } enregButton.setOnMenuItemClickListener( new PretEmpruntEnregOnClickListener(this.pretEmprunt.pretOuEmprunt, this.getCurrentFocus())); } else { enregButton.setOnMenuItemClickListener( new PretEmpruntEnregOnClickListener(this.pretEmprunt, this.getCurrentFocus())); } // On associe un vnement au bouton d'annulation annulerButton = menu.findItem(R.id.menu_annuler); annulerButton.setOnMenuItemClickListener(new AnnulerOnClickListener(this.getCurrentFocus())); return true; } /** * Cette mthode permet de grer les vnements lorsqu'un utilisateur slectionne une option de menu */ @Override public boolean onMenuItemSelected(int featureId, MenuItem item) { switch (item.getItemId()) { case R.id.menu_creer_contact: // On affiche l'activity qui permet de crer un contact Intent intent = new Intent(Intent.ACTION_INSERT, Contacts.CONTENT_URI); startActivity(intent); return true; default: return super.onOptionsItemSelected(item); } } @Override protected void onNewIntent(Intent intent) { super.onNewIntent(intent); extractionData(); } /** * */ protected void extractionData() { if (null != this.getIntent().getExtras()) { int pretOuEmprunt = (Integer) this.getIntent().getExtras().get("pretEmprunt"); if (pretOuEmprunt == PretEmpruntContrat.PRET) this.setTitle(R.string.prets_activity); if (pretOuEmprunt == PretEmpruntContrat.EMPRUNT) this.setTitle(R.string.emprunts_activity); if (null != this.getIntent().getExtras().get("data")) { this.pretEmprunt = (PretEmprunt) this.getIntent().getExtras().get("data"); Log.d("listener", String.valueOf(pretEmprunt.contactId)); this.pretEmprunt.pretOuEmprunt = pretOuEmprunt; if (this.pretEmprunt.contactNom != null) contactNameEditText.setText(this.pretEmprunt.contactNom); if (this.pretEmprunt.date != null) dateEditText.setText(this.pretEmprunt.date); if (this.pretEmprunt.objet != null) objetEditText.setText(this.pretEmprunt.objet); Bitmap bm = null; if (null != this.pretEmprunt.image) { if (this.pretEmprunt.image.lastIndexOf("/") >= 1) { // On rcupre l'identifiant de l'image int originalImageId = Integer.parseInt(this.pretEmprunt.image.substring( this.pretEmprunt.image.lastIndexOf("/") + 1, this.pretEmprunt.image.length())); try { // On rcupre le thumbnail de l'image partir de l'identifiant bm = MediaStore.Images.Thumbnails.getThumbnail(getContentResolver(), originalImageId, MediaStore.Images.Thumbnails.MICRO_KIND, null); imageView.setImageBitmap(bm); imageView.setTag(Uri.parse(this.pretEmprunt.image)); } catch (Exception ex) { ex.printStackTrace(); } } else { imageView.setImageResource(R.raw.web_hi_res_512); } } } else { this.pretEmprunt = new PretEmprunt(); this.pretEmprunt.pretOuEmprunt = pretOuEmprunt; } } else { this.pretEmprunt = new PretEmprunt(); } } }