Vous êtes sur la page 1sur 17

Développement

Mobile
TP3:
Annuaire professionnel

Khawla DAROUICH
GLSID2
SOMMAIRE

Table des matières


SOMMAIRE.................................................................................................................2
Application..................................................................................................................3
Page d’accueil...........................................................................................................3
Ajout d’un contact.....................................................................................................3
Modification d’un contact...........................................................................................4
Suppression d’un contact...........................................................................................4
Recherche d’un contact..............................................................................................5
Gestion des événements...............................................................................................6
Ajout.......................................................................................................................6
Modification..............................................................................................................6
Suppression.............................................................................................................7
Recherche................................................................................................................7
Code Source...............................................................................................................8
Main Activity............................................................................................................8
Contact..................................................................................................................10
Contact DAO...........................................................................................................11
Contacts Adapter....................................................................................................12
AddActivity.............................................................................................................14
EditActivity.............................................................................................................15
AppDataBase..........................................................................................................16
GLSID2

Application
Page d’accueil

Ajout d’un contact


Modification d’un contact

Suppression d’un contact


Recherche d’un contact
Gestion des événements

Ajout

Cette activité permit d’ajouter un contact à l’annuaire


Les boutons de cette activité ont les fonctionnalités
suivantes :

Pour enregistrer le nouveau contact

Pour nettoyer les champs saisis afin


d’enregistrer un nouveau contact.

Pour retourner à la page de l’annuaire.

Modification

Cette activité permit de modifier un contact à


l’annuaire
Les boutons de cette activité ont les fonctionnalités
suivantes :

Pour enregistrer les modifications


Pour retourner à la page de
l’annuaire.

P A G E 0 3 | 2020 - 2021
GESTION DES EVENEMENTS

Suppression

Un clic long sur un contact, permet d’afficher une


boite de dialogue
Les boutons de cette boite de dialogue ont les
fonctionnalités suivantes :

Annuler la suppression
Confirmer la suppression

Recherche

La barre de recherche permit de rechercher des


contacts en actualisant l’activité principale au fur et à
mesure des lettres tapées du nom.
Le bouton de cette activité permit de
Aller vers une nouvelle activité pour ajouter
un nouveau contact.

P A G E 0 4 | 2020 - 2021
CODE SOURCE

Code Source
Main Activity
package com.example.annuaireprofessionnel;

import android.content.Intent;
import android.os.Bundle;

import com.google.android.material.floatingactionbutton.FloatingActionButton;
import com.google.android.material.snackbar.Snackbar;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.SearchView;
import androidx.appcompat.widget.Toolbar;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;

import android.view.View;

import android.view.Menu;
import android.view.MenuItem;

import android.widget.Toast;

import java.util.ArrayList;
import java.util.List;

public class MainActivity extends AppCompatActivity implements ContactsAdapter.SelectedContact{


RecyclerView recyclerView;
AppDataBase db;
List<Contact> contacts;
LinearLayoutManager linearLayoutManager;
Contact c=new Contact("Khawla","DAROUICH","Software
Engineer","066177886154","K.darouich@gmail.com");
Contact c2=new Contact("Niama","CHAOUKI","Responsable
TELECOM","0600009881","N.chaouki@gmail.com");
@Override
protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toolbar toolbar = findViewById(R.id.toolbar);
setSupportActionBar(toolbar);

db = AppDataBase.getInstance(this);
for(int i=0;i<4;i++)
{
db.contactDAO().insert(c);

db.contactDAO().insert(c2);
}
contacts= db.contactDAO().getAll();
ContactsAdapter adapter = new ContactsAdapter(contacts,this,this,this);

recyclerView = (RecyclerView) findViewById(R.id.recyclerView);


linearLayoutManager=new LinearLayoutManager(this);
recyclerView.setLayoutManager(linearLayoutManager);
recyclerView.setAdapter(adapter);
contacts.clear();
contacts.addAll(db.contactDAO().getAll());
adapter.notifyDataSetChanged();
FloatingActionButton fab = findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent myIntent = new Intent(MainActivity.this, addActivity.class);


startActivity(myIntent);
}
});

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.menu_main, menu);
MenuItem searchItem = menu.findItem(R.id.search);

SearchView searchView = (SearchView) searchItem.getActionView();


searchView.setOnQueryTextListener(new SearchView.OnQueryTextListener() {
@Override
public boolean onQueryTextSubmit(String query) {
return false;
}

@Override
public boolean onQueryTextChange(String textQuery) {
RefreshListView((ArrayList<Contact>)
db.contactDAO().findByName("%"+textQuery+"%"));
return false;
}
});
return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();

//noinspection SimplifiableIfStatement

return super.onOptionsItemSelected(item);
}

@Override
public void selectedContact(Contact contact) {
Intent myIntent = new Intent(MainActivity.this, EditActivity.class);
myIntent.putExtra("ID",String.valueOf(contact.getID()));
startActivity(myIntent);
}
void RefreshListView(List<Contact> contacts){
ContactsAdapter adapter = new ContactsAdapter(contacts,this,this,this);
recyclerView.setAdapter(adapter);
}
}
CODE SOURCE

Contact
package com.example.annuaireprofessionnel;

import androidx.room.ColumnInfo;
import androidx.room.Entity;
import androidx.room.Ignore;
import androidx.room.PrimaryKey;

import java.io.Serializable;

@Entity
public class Contact implements Serializable {

@PrimaryKey(autoGenerate = true)
private int ID;
@ColumnInfo(name = "FirstName")
String firstName;
@ColumnInfo(name = "LastName")
String lastName;
@ColumnInfo(name = "Job")
String job;
@ColumnInfo(name = "Phone")
String phone;
@ColumnInfo(name = "Email")
String email;
@Ignore
public Contact() {
}

public Contact(Integer ID, String firstName, String lastName, String job, String phone,
String email) {
this.ID = ID;
this.firstName = firstName;
this.lastName = lastName;
this.job = job;
this.phone = phone;
this.email = email;
}
@Ignore
public Contact(String firstName, String lastName, String job, String phone, String email) {
this.firstName = firstName;
this.lastName = lastName;
this.job = job;
this.phone = phone;
this.email = email;
}

public int getID() {


return ID;
}

public void setID(int ID) {


this.ID = ID;
}

public String getFirstName() {


return firstName;
}

public void setFirstName(String firstName) {


this.firstName = firstName;
}
public String getLastName() {
return lastName;
}

public void setLastName(String lastName) { this.lastName = lastName;


}

public String getJob() { return job;


}

public void setJob(String job) { this.job = job;


}

public String getPhone() { return phone;


}

public void setPhone(String phone) { this.phone = phone;


}

public String getEmail() { return email;


}

public void setEmail(String email) { this.email = email;


}

Contact DAO
package com.example.annuaireprofessionnel;

import androidx.room.Dao;
import androidx.room.Insert;
import androidx.room.Query;
import androidx.room.Update;

import java.util.List;

@Dao
public interface ContactDAO {

@Query("SELECT * FROM Contact")


List<Contact> getAll();

@Insert
void insert(Contact contact);

@Query("SELECT * FROM Contact WHERE FirstName LIKE :FirstName")


List<Contact> findByName(String FirstName);

@Query("SELECT * FROM Contact WHERE ID= :ID")


Contact findByID(int ID);

@Query("DELETE FROM Contact WHERE ID= :ID")


void delete(int ID);

@Update
void update(Contact contact);

@Query("DELETE FROM Contact")


void clear();
}
CODE SOURCE

Contacts Adapter

package com.example.annuaireprofessionnel;

import android.app.Activity;
import android.app.AlertDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import androidx.room.RoomDatabase;

import java.util.List;

public class ContactsAdapter extends RecyclerView.Adapter<ContactsAdapter.ViewHolder> {

private List<Contact> contactsList;


private Context context;
private AppDataBase database;
private SelectedContact selectedContact;
private MainActivity mainActivity;
private Context ctx;

public ContactsAdapter(List<Contact> contactsList, Activity context,SelectedContact


selectedContact,MainActivity mainActivity) {
this.contactsList = contactsList;
this.mainActivity=mainActivity;
this.selectedContact=selectedContact;
this.context = context;
notifyDataSetChanged();
}

@NonNull
@Override
public ContactsAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType)
{

ctx=parent.getContext();
View view=
LayoutInflater.from(parent.getContext()).inflate(R.layout.list_recycler_view,parent,false);
return new ViewHolder(view,ctx);

@NonNull

@Override
public void onBindViewHolder(@NonNull ContactsAdapter.ViewHolder holder, int position) {
Contact contact=contactsList.get(position);

database=AppDataBase.getInstance(context);

holder.id.setText(String.valueOf(contact.getID()));
holder.email.setText(contact.getEmail());
holder.job.setText(contact.getJob());
holder.name.setText(contact.getFirstName()+" "+contact.getLastName());
holder.phone.setText(contact.getPhone());
}

@Override
public int getItemCount() {
return contactsList.size();
}

public class ViewHolder extends RecyclerView.ViewHolder implements View.OnLongClickListener {


TextView id, name, email,job,phone;
ImageButton btCall;
Context context;
public ViewHolder(@NonNull View itemView,Context context) {
super(itemView);
id=itemView.findViewById(R.id.ID);
name=itemView.findViewById(R.id.Name);
email=itemView.findViewById(R.id.Email);
job=itemView.findViewById(R.id.Job);
phone=itemView.findViewById(R.id.Tel);
btCall=itemView.findViewById(R.id.phone_btn);
this.context=context;
itemView.setOnLongClickListener(this::onLongClick);
itemView.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
selectedContact.selectedContact(contactsList.get(getAdapterPosition()));
}
});

}
@Override
public boolean onLongClick(View view) {

AlertDialog.Builder builder = new AlertDialog.Builder(ctx);


builder.setTitle("Select your answer")
.setMessage("Do you want to delete this contact?")
.setCancelable(false)
.setPositiveButton("Yes", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int idContact = Integer.parseInt(id.getText().toString());
Contact contactToDelete = new Contact();
int contactPos = getAdapterPosition();
contactToDelete.setID(idContact);
if(contactToDelete!=null){
contactsList.remove(contactToDelete);
database.contactDAO().delete(idContact);
mainActivity.RefreshListView(database.contactDAO().getAll());
}
}
})
.setNegativeButton("No", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
}
});
AlertDialog dialog = builder.create();
dialog.show();
return true;

}
}

public interface SelectedContact{


void selectedContact(Contact contact);
}
}
CODE SOURCE

AddActivity

package com.example.annuaireprofessionnel;

import androidx.appcompat.app.AppCompatActivity;
import androidx.appcompat.widget.Toolbar;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class addActivity extends AppCompatActivity {

AppDataBase database;
EditText firstName;
EditText lastName;
EditText email;
EditText phone;
EditText job;

@Override
protected void onCreate(Bundle savedInstanceState) {
database=AppDataBase.getInstance(this);
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_add);
firstName = (EditText) findViewById(R.id.firstNameInput);
lastName = (EditText) findViewById(R.id.lastNameInput);
email = (EditText) findViewById(R.id.emailInput);
phone = (EditText) findViewById(R.id.phoneInput);
job = (EditText) findViewById(R.id.jobInput);
FloatingActionButton fab = findViewById(R.id.floatingActionButton);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent myIntent = new Intent(addActivity.this, MainActivity.class);


startActivity(myIntent);
}
});
}
public void save(View view){

database.contactDAO().insert(new
Contact(firstName.getText().toString(),lastName.getText().toString(),email.getText().toString(),j
ob.getText().toString(),phone.getText().toString()));
Toast.makeText(addActivity.this,"Added",Toast.LENGTH_SHORT).show();
Intent myIntent = new Intent(addActivity.this, MainActivity.class);
startActivity(myIntent);
}
public void clear(View view)
{
firstName.setText("");
lastName.setText("");
email.setText("");
job.setText("");
phone.setText("");
}

}
CODE SOURCE

EditActivity
package com.example.annuaireprofessionnel;

import androidx.appcompat.app.AppCompatActivity;

import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import com.google.android.material.floatingactionbutton.FloatingActionButton;

public class EditActivity extends AppCompatActivity {


AppDataBase database;
EditText firstName;
EditText lastName;
EditText email;
EditText phone;
EditText job;
String string;
TextView id;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

database=AppDataBase.getInstance(this);

setContentView(R.layout.activity_edit);

firstName = (EditText) findViewById(R.id.firstNameInput);


lastName = (EditText) findViewById(R.id.lastNameInput);
email = (EditText) findViewById(R.id.emailInput);
phone = (EditText) findViewById(R.id.phoneInput);
job = (EditText) findViewById(R.id.jobInput);

Intent i = getIntent();
if(i.hasExtra("ID")){
string = i.getStringExtra("ID");
}
Contact contact = database.contactDAO().findByID(Integer.parseInt(string));

firstName.setText(contact.getFirstName());
lastName.setText(contact.getLastName());
email.setText(contact.getEmail());
phone.setText(contact.getPhone());
job.setText(contact.getJob());
FloatingActionButton fab = findViewById(R.id.floatingActionButton);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {

Intent myIntent = new Intent(EditActivity.this, MainActivity.class);


startActivity(myIntent);
}
});

}
public void save(View view){

database.contactDAO().update(new Contact(Integer.parseInt(string),firstName.getText().toString(),lastName.getText().toString(),ema il.getText().toSt


Toast.makeText(EditActivity.this,"Updated",Toast.LENGTH_SHORT).show(); Intent myIntent = new Intent(EditActivity.this, MainActivity.class); start
}

AppDataBase

package com.example.annuaireprofessionnel;

import android.content.Context;

import androidx.room.Database;
import androidx.room.Room;
import androidx.room.RoomDatabase;

@Database(entities = {Contact.class}, version = 1,exportSchema = false)


public abstract class AppDataBase extends RoomDatabase {
// create database instance
private static AppDataBase database;

// Define database name


private static String DATABASE_NAME="database2";

public synchronized static AppDataBase getInstance(Context context)


{
// check condition
if(database==null)
{
// when database is null
// Initialize database
database= Room.databaseBuilder(context.getApplicationContext(),
AppDataBase.class,DATABASE_NAME)
.allowMainThreadQueries().fallbackToDestructiveMigration().build();
}
// Return database
return database;
}

//Create DAO
public abstract ContactDAO contactDAO();
}
2
0
2
0
/
2
0
2
1

Khawla DAROUICH
GLSID2

Vous aimerez peut-être aussi