fr.jcf.pret.activities.PretEmpruntActivity.java Source code

Java tutorial

Introduction

Here is the source code for fr.jcf.pret.activities.PretEmpruntActivity.java

Source

/**
 * 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();
        }
    }

}