diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 4da48e270b843b5cbe5ecc03f3a8307b3a86f9ac..ac13cdcaa904917d9ef8b85d1d6cade59711a934 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -1,6 +1,8 @@ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" - package="be.lepl1509group13.workoutwarrior" > + package="be.lepl1509group13.workoutwarrior"> + + <uses-permission android:name="android.permission.VIBRATE" /> <application android:allowBackup="true" @@ -9,7 +11,10 @@ android:label="@string/app_name" android:roundIcon="@drawable/logo" android:supportsRtl="true" - android:theme="@style/Theme.WorkoutWarrior" > + android:theme="@style/Theme.WorkoutWarrior"> + <activity + android:name=".AddFriendActivity" + android:exported="false" /> <activity android:name=".AccountActivity" android:exported="false" /> @@ -20,7 +25,7 @@ <activity android:name=".ProgramCreationActivity" /> <activity android:name=".MainActivity" - android:exported="true" > + android:exported="true"> <intent-filter> <action android:name="android.intent.action.MAIN" /> @@ -32,6 +37,5 @@ android:name="preloaded_fonts" android:resource="@array/preloaded_fonts" /> </application> - <uses-permission android:name="android.permission.VIBRATE"/> </manifest> \ No newline at end of file diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/AccountActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/AccountActivity.java index dfabbafc4d4778ae07bb8b279f5d556481e93586..b7a65519a317aa23a9997b1fd90af3dbca849220 100644 --- a/app/src/main/java/be/lepl1509group13/workoutwarrior/AccountActivity.java +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/AccountActivity.java @@ -1,6 +1,9 @@ package be.lepl1509group13.workoutwarrior; +import androidx.annotation.NonNull; import androidx.appcompat.app.AppCompatActivity; +import androidx.recyclerview.widget.LinearLayoutManager; +import androidx.recyclerview.widget.RecyclerView; import android.annotation.SuppressLint; import android.content.Intent; @@ -15,6 +18,8 @@ import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.tasks.OnCompleteListener; +import com.google.android.gms.tasks.OnFailureListener; +import com.google.android.gms.tasks.OnSuccessListener; import com.google.android.gms.tasks.Task; import com.google.android.material.textfield.TextInputEditText; import com.google.firebase.auth.AuthResult; @@ -30,13 +35,13 @@ import java.util.HashMap; import java.util.Map; import java.util.Objects; -public class AccountActivity extends AppCompatActivity { +public class AccountActivity extends AppCompatActivity implements FriendsAdapter.OnItemClickListener{ private FirebaseAuth mAuth; private final FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance(); private DatabaseReference db; - private Button logout; private TextView title; + private String userPseudo; @SuppressLint("MissingInflatedId") @Override @@ -48,18 +53,27 @@ public class AccountActivity extends AppCompatActivity { FirebaseUser currentUser = mAuth.getCurrentUser(); if(currentUser != null){ + db = firebaseDb.getReference("Account_pseudo"); + //get which button is clicked in the navigation Intent intent = this.getIntent(); String item = intent.getStringExtra("item"); if(Objects.equals(item, "Mon compte")){ - //todo + setContentView(R.layout.activity_account); + getPseudo(currentUser); + + Button logout = findViewById(R.id.logout); + logout.setOnClickListener(view -> logout()); + } else if (Objects.equals(item, "Mes amis")) { - //todo - } - setContentView(R.layout.activity_account); + setContentView(R.layout.activity_account_friends); - db = firebaseDb.getReference("Account_pseudo"); - getPseudo(currentUser); + Button add_friend = findViewById(R.id.friends_add); + add_friend.setOnClickListener(view -> addFriend()); + + db = firebaseDb.getReference("Account_pseudo"); + getUserPseudo(currentUser); + } }else{ setContentView(R.layout.activity_account_login); @@ -77,9 +91,74 @@ public class AccountActivity extends AppCompatActivity { ImageButton return_btn = findViewById(R.id.return_from_account); return_btn.setOnClickListener(view -> finish()); + } + + private void getUserPseudo(FirebaseUser currentUser) { + db.addValueEventListener(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { + String userKey = childSnapshot.getKey(); + String pseudo = childSnapshot.getValue(String.class); + if(Objects.equals(userKey, currentUser.getUid())){ + userPseudo = pseudo; + + db = firebaseDb.getReference("Friends"); + getFriends(userPseudo); + return; + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + Toast.makeText(AccountActivity.this, "Une erreur est survenue !", Toast.LENGTH_SHORT).show(); + finish(); + } + }); + } + + private void addFriend() { + Intent intent = new Intent(AccountActivity.this, AddFriendActivity.class); + startActivity(intent); + } - logout = findViewById(R.id.logout); - logout.setOnClickListener(view -> logout()); + public void onItemClick(String friend_pseudo) { + //todo when a friend is clicked to be deleted + db = firebaseDb.getReference("Friends"); + db.child(userPseudo).child(friend_pseudo).removeValue() + .addOnSuccessListener(aVoid -> Toast.makeText(AccountActivity.this, friend_pseudo + " supprimé de vos amis !", Toast.LENGTH_SHORT).show()) + .addOnFailureListener(e -> Toast.makeText(AccountActivity.this, "Une erreur est survenue !", Toast.LENGTH_SHORT).show()); + } + + private void getFriends(String pseudo) { + db.addValueEventListener(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + DataSnapshot friendsList = dataSnapshot.child(pseudo); + + String[][] friendsData = new String[(int) friendsList.getChildrenCount()][]; + + int i = 0; + for (DataSnapshot childFriendList: friendsList.getChildren()) { + String friendPseudo = childFriendList.getKey(); + + friendsData[i] = new String[]{friendPseudo}; + i ++; + } + + RecyclerView recyclerView = findViewById(R.id.friends_view_recycler); + recyclerView.setLayoutManager(new LinearLayoutManager(AccountActivity.this)); + FriendsAdapter adapter = new FriendsAdapter(friendsData); + adapter.setOnItemClickListener(AccountActivity.this); + recyclerView.setAdapter(adapter); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + // Failed to read value + } + }); } private void getPseudo(FirebaseUser currentUser) { @@ -99,7 +178,7 @@ public class AccountActivity extends AppCompatActivity { String pseudo = data.getValue().toString(); - title.setText("Vous êtes connecté !\n" + currentUser.getEmail() + " & " + id_user + " & " + pseudo); + title.setText("Vous êtes connecté en tant que :\n" + pseudo + "\n avec l'adresse mail :\n" + currentUser.getEmail()); field_pseudo_layout.setVisibility(View.INVISIBLE); register.setVisibility(View.INVISIBLE); } catch (Exception e){ @@ -133,22 +212,6 @@ public class AccountActivity extends AppCompatActivity { isLoged(); } - /** - @Override - public void onStart() { - super.onStart(); - // Check if user is signed in (non-null) and update UI accordingly. - FirebaseUser currentUser = mAuth.getCurrentUser(); - if(currentUser != null){ - //reload(); - Log.d("LOGIN", "onStart: LOGED"); - isLoged(); - }else{ - logout.setVisibility(View.INVISIBLE); - } - } - */ - private void isLoged(){ //Refresh the layout when user is logged finish(); @@ -159,8 +222,8 @@ public class AccountActivity extends AppCompatActivity { private void login(Editable email, Editable password) { Log.d("listener", "login: click btn"); - String email_string = (String)email.toString(); - String password_string = (String)password.toString(); + String email_string = email.toString(); + String password_string = password.toString(); if(email_string.isEmpty() || password_string.isEmpty()){ return; } @@ -190,8 +253,8 @@ public class AccountActivity extends AppCompatActivity { } private void register(Editable email, Editable password) { - String email_string = (String)email.toString(); - String password_string = (String)password.toString(); + String email_string = email.toString(); + String password_string = password.toString(); if(email_string.isEmpty() || password_string.isEmpty()){ return; } @@ -199,7 +262,7 @@ public class AccountActivity extends AppCompatActivity { mAuth.createUserWithEmailAndPassword(email_string, password_string) .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override - public void onComplete(Task<AuthResult> task) { + public void onComplete(@NonNull Task<AuthResult> task) { if (task.isSuccessful()) { // Sign in success, update UI with the signed-in user's information //Log.d("TAG", "createUserWithEmail:success"); diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/AddFriendActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/AddFriendActivity.java new file mode 100644 index 0000000000000000000000000000000000000000..afeb6be4465ae8bbe35f903c20516256f88e1065 --- /dev/null +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/AddFriendActivity.java @@ -0,0 +1,159 @@ +package be.lepl1509group13.workoutwarrior; + +import androidx.annotation.NonNull; +import androidx.appcompat.app.AppCompatActivity; + +import android.os.Bundle; +import android.text.Editable; +import android.util.Log; +import android.widget.Button; +import android.widget.ImageButton; +import android.widget.Toast; + +import com.google.android.material.textfield.TextInputEditText; +import com.google.firebase.auth.FirebaseAuth; +import com.google.firebase.auth.FirebaseUser; +import com.google.firebase.database.DataSnapshot; +import com.google.firebase.database.DatabaseError; +import com.google.firebase.database.DatabaseReference; +import com.google.firebase.database.FirebaseDatabase; +import com.google.firebase.database.ValueEventListener; + +import java.util.HashMap; +import java.util.Map; +import java.util.Objects; + +public class AddFriendActivity extends AppCompatActivity { + + private FirebaseAuth mAuth; + private FirebaseUser currentUser; + private final FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance(); + private DatabaseReference db; + private String userPseudo; + private ValueEventListener checkPseudo; + private ValueEventListener checkIfFriends; + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + setContentView(R.layout.activity_add_friend); + getSupportActionBar().hide(); + + mAuth = FirebaseAuth.getInstance(); + currentUser = mAuth.getCurrentUser(); + + db = firebaseDb.getReference("Account_pseudo"); + getUserPseudo(); + + ImageButton back = findViewById(R.id.return_from_add_friend); + back.setOnClickListener(view -> finish()); + + Button add = findViewById(R.id.add_friend_activity_btn); + add.setOnClickListener(view -> addFriend()); + } + + private void getUserPseudo() { + db.addValueEventListener(new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { + String userKey = childSnapshot.getKey(); + String pseudo = childSnapshot.getValue(String.class); + if(Objects.equals(userKey, currentUser.getUid())){ + userPseudo = pseudo; + return; + } + } + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + Toast.makeText(AddFriendActivity.this, "Une erreur est survenue !", Toast.LENGTH_SHORT).show(); + finish(); + } + }); + } + + private void addFriend() { + TextInputEditText pseudo_input = findViewById(R.id.add_friend_pseudo); + Editable pseudo_string = pseudo_input.getText(); + Log.d("TRYING TO:", "addFriend: " + pseudo_string); + + db = firebaseDb.getReference("Account_pseudo"); + checkPseudo(pseudo_string.toString()); + } + + private void checkPseudo(String pseudo) { + checkPseudo = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + for (DataSnapshot childSnapshot: dataSnapshot.getChildren()) { + String pseudoInput = childSnapshot.getValue(String.class); + if(Objects.equals(pseudoInput, pseudo)){ + //the pseudo in the input exist in the database + db = firebaseDb.getReference("Friends"); + checkIfAlreadyFriends(pseudoInput, userPseudo); + return; + } + } + Toast.makeText(AddFriendActivity.this, "Ce pseudo n'existe pas !", Toast.LENGTH_SHORT).show(); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + Toast.makeText(AddFriendActivity.this, "Erreur !", Toast.LENGTH_SHORT).show(); + } + }; + db.addValueEventListener(checkPseudo); + } + + private void checkIfAlreadyFriends(String newFriendPseudo, String userPseudo) { + checkIfFriends = new ValueEventListener() { + @Override + public void onDataChange(@NonNull DataSnapshot dataSnapshot) { + DataSnapshot friendsList = dataSnapshot.child(userPseudo); + + for (DataSnapshot childFriendList: friendsList.getChildren()) { + String friendPseudo = childFriendList.getKey(); + + if(Objects.equals(friendPseudo, newFriendPseudo)){ + Toast.makeText(AddFriendActivity.this, "Vous avez déjà ajouter cet ami !", Toast.LENGTH_SHORT).show(); + return; + } + } + addFriendship(userPseudo, newFriendPseudo); + } + + @Override + public void onCancelled(@NonNull DatabaseError error) { + Toast.makeText(AddFriendActivity.this, "Erreur !", Toast.LENGTH_SHORT).show(); + } + }; + db.addValueEventListener(checkIfFriends); + //db.removeEventListener(checkIfFriends); + } + + private void addFriendship(String userPseudo, String newFriendPseudo) { + db = firebaseDb.getReference("Friends").child(userPseudo); + + Map<String, Object> updates = new HashMap<>(); + updates.put(newFriendPseudo, ""); + + try { + db.updateChildren(updates); + Toast.makeText(AddFriendActivity.this, "Ami ajouté !", Toast.LENGTH_SHORT).show(); + resetFirebaseQuery(); + finish(); + return; + } catch (Exception e){ + Log.d("error", "savePseudo: " + e); + } + } + + private void resetFirebaseQuery(){ + //stop each onDataChange query + db = firebaseDb.getReference("Friends"); + db.removeEventListener(checkPseudo); + db.removeEventListener(checkIfFriends); + } +} \ No newline at end of file diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/FriendsAdapter.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/FriendsAdapter.java new file mode 100644 index 0000000000000000000000000000000000000000..3b3f4788dcc43739f1f094d10583cbb137c9e953 --- /dev/null +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/FriendsAdapter.java @@ -0,0 +1,66 @@ +package be.lepl1509group13.workoutwarrior; + +import android.annotation.SuppressLint; +import android.view.LayoutInflater; +import android.view.View; +import android.view.ViewGroup; +import android.widget.ImageView; +import android.widget.TextView; + +import androidx.annotation.NonNull; +import androidx.recyclerview.widget.RecyclerView; + +public class FriendsAdapter extends RecyclerView.Adapter<FriendsAdapter.MyViewHolder>{ + + private final String[][] friendData; + private OnItemClickListener mListener; + public FriendsAdapter(String[][] data) {friendData = data;} + + @NonNull + @Override + public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { + View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.friends_item, parent, false); + return new MyViewHolder(view); + } + + @Override + public void onBindViewHolder(@NonNull MyViewHolder holder, @SuppressLint("RecyclerView") int position) { + // Parcourir la liste et afficher le contenu de chaque tableau + String[] friend_data = friendData[position]; + + holder.pseudo.setText(friend_data[0]); + + holder.delete.setOnClickListener(view -> { + if (mListener != null) { + mListener.onItemClick(friend_data[0]); + } + }); + + } + + @Override + public int getItemCount() { + return friendData.length; + } + + public void setOnItemClickListener(OnItemClickListener listener) { + mListener = listener; + } + + public interface OnItemClickListener { + void onItemClick(String friend_pseudo); + } + public static class MyViewHolder extends RecyclerView.ViewHolder { + + public TextView pseudo; + public ImageView delete; + + public MyViewHolder(View itemView) { + super(itemView); + pseudo = itemView.findViewById(R.id.friend_pseudo); + delete = itemView.findViewById(R.id.friend_delete); + } + } +} + + diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/ListExercicesAdapter.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/ListExercicesAdapter.java index 78804c5b4d3d23d1d7e5cad6689e1d85dba47b54..624d6a99e1e4be6379e1518949a19db3ab9ad62b 100644 --- a/app/src/main/java/be/lepl1509group13/workoutwarrior/ListExercicesAdapter.java +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/ListExercicesAdapter.java @@ -1,24 +1,51 @@ package be.lepl1509group13.workoutwarrior; +import be.lepl1509group13.workoutwarrior.ProgramCreationActivity; +import android.app.Dialog; import android.content.Context; import android.graphics.drawable.Drawable; +import android.text.InputType; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.ArrayAdapter; +import android.widget.Button; +import android.widget.CheckBox; +import android.widget.CompoundButton; +import android.widget.EditText; import android.widget.ImageView; import android.widget.TextView; import android.widget.Toast; +import androidx.constraintlayout.widget.ConstraintLayout; + import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; import java.util.Iterator; import java.util.Map; +import be.lepl1509group13.workoutwarrior.ProgramCreationActivity; + public class ListExercicesAdapter extends ArrayAdapter<String> { private final Context context; private ArrayList<String> values; + public Exercise actual_exo ; + public String img_actual_exo; + HashMap<Exercise, ArrayList<String>> program = new HashMap<>(); + + String name_exo; + String description_exo; + Long timer_exo; + Long break_exo; + ArrayList<String> days_exo = new ArrayList<String>(); + CheckBox cb_lundi, cb_mardi, cb_mercredi, cb_jeudi, cb_vendredi, cb_samedi, cb_dimanche; + private ArrayList<CheckBox> cb_list = new ArrayList<>(); + private ArrayList<String> current_days_checked = new ArrayList<>(); + Integer nbre_day = 0; + public ListExercicesAdapter(Context context, ArrayList<String> values) { super(context, R.layout.exercises_list_row, values); this.context = context; @@ -40,7 +67,6 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { ProgramCreationActivity activity = (ProgramCreationActivity) context; - System.out.println("values : " + values); String exercise = values.get(position); String training_days = ""; Drawable delete_cross = context.getResources().getDrawable(R.drawable.cross_mark); @@ -48,7 +74,6 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { // Get training days for this exercise for (Map.Entry<Exercise, ArrayList<String>> set : activity.program.entrySet()) { - System.out.println(set.getKey().name); if (set.getKey().name == exercise) { training_days = ""; for (String day : set.getValue()) { @@ -58,84 +83,168 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { } training_days = training_days.substring(0, training_days.length() - 2); - System.out.println("training days : " + training_days); - // Display texts and images in Views delete_button.setImageDrawable(delete_cross); edit_button.setImageDrawable(pen); exercise_name.setText(exercise); training_daysView.setText(training_days); - - // Ecouteur de clics pour chaque élément de la ListView edit_button.setOnClickListener(view -> { - /* - System.out.println("details : " + activity.program); - AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext()); - View dialogView = inflater.inflate(R.layout.edit_workout, null); - builder.setView(dialogView); - AlertDialog dialog = builder.create(); - dialog.show(); - - - TextView exerciseName = dialogView.findViewById(R.id.exercise_name); - exerciseName.setText(exercise); - - // Rechercher l'exercice dans la HashMap - ArrayList<Exercise> exercises = activity.exoDetailsForEachDay.get(activity.current_day_displayed); - String imageUrl; - String description; - for (Exercise exo : exercises) { - if (Objects.equals(exo.name, exercise)) { - - // Afficher les détails de l'exo - imageUrl = exo.image_url; - ImageView imageView = dialogView.findViewById(R.id.exercise_image); - int resourceId = context.getResources().getIdentifier(imageUrl, "drawable", context.getPackageName()); - imageView.setImageResource(resourceId); - - TextView descriptionTextView = dialogView.findViewById(R.id.description_edit); - descriptionTextView.setText(exo.description); - - - TextView break_time_TextView = dialogView.findViewById(R.id.pause_edit); - break_time_TextView.setText(String.valueOf(exo.breakVal/1000)); + days_exo = new ArrayList<>(); + for (Map.Entry<Exercise, ArrayList<String>> set : activity.program.entrySet()) { + if (set.getKey().name == exercise) { + for (String day : set.getValue()) { + if(!days_exo.contains(day)){ + days_exo.add(day); + } + } + name_exo = set.getKey().name; + description_exo = set.getKey().description; + timer_exo = Long.valueOf(set.getKey().timer); + break_exo = Long.valueOf(set.getKey().breakVal); + img_actual_exo = set.getKey().image_url; + } + } + Dialog dialog = new Dialog(this.context); + dialog.setContentView(R.layout.modify_exercice_popup); + + ImageView closeButton = dialog.findViewById(R.id.close_btn); + closeButton.setOnClickListener(w -> dialog.dismiss()); + cb_lundi = dialog.findViewById(R.id.checkbox_monday); + cb_mardi = dialog.findViewById(R.id.checkbox_tuesday); + cb_mercredi = dialog.findViewById(R.id.checkbox_wednesday); + cb_jeudi = dialog.findViewById(R.id.checkbox_thursday); + cb_vendredi = dialog.findViewById(R.id.checkbox_friday); + cb_samedi = dialog.findViewById(R.id.checkbox_saturday); + cb_dimanche = dialog.findViewById(R.id.checkbox_sunday); + + cb_list.add(cb_lundi); + cb_list.add(cb_mardi); + cb_list.add(cb_mercredi); + cb_list.add(cb_jeudi); + cb_list.add(cb_vendredi); + cb_list.add(cb_samedi); + cb_list.add(cb_dimanche); + + for(int i = 0; i < days_exo.size(); i++){ + if(days_exo.get(i).equals("lundi")){ + cb_lundi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("mardi")){ + cb_mardi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("mercredi")){ + cb_mercredi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("jeudi")){ + cb_jeudi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("vendredi")){ + cb_vendredi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("samedi")){ + cb_samedi.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; + } + if(days_exo.get(i).equals("dimanche")){ + cb_dimanche.setChecked(true); + current_days_checked.add(days_exo.get(i)); + nbre_day += 1; } } - // Enregistrer les modifications de l'exercice - Button save_btn = dialogView.findViewById(R.id.save_modif_button); - save_btn.setOnClickListener(v -> { - EditText description_edit = dialogView.findViewById(R.id.description_edit); - EditText break_time_edit = dialogView.findViewById(R.id.pause_edit); - - String new_description = description_edit.getText().toString(); - int new_break_time = Integer.parseInt(break_time_edit.getText().toString()); + for (CheckBox cb : cb_list) cb.setOnCheckedChangeListener(myCheckBoxListener); + ConstraintLayout form_layout = dialog.findViewById(R.id.constraintLayout2); - // Rechercher l'exercice dans la HashMap et modifier ces paramètres + EditText description_text = dialog.findViewById(R.id.exercise_description); + EditText timer_edit = dialog.findViewById(R.id.exercise_timer); + EditText break_edit = dialog.findViewById(R.id.exercice_break); + TextView timer_text = dialog.findViewById(R.id.timer_text); + if(description_exo != null){ + description_text.setText(description_exo); + } + if(timer_exo == 0){ + timer_edit.setVisibility(View.INVISIBLE); + timer_edit.setEnabled(false); + timer_text.setText(""); + }else{ + timer_edit.setText(timer_exo.toString()); + } + if(break_exo != null){ + break_edit.setText(break_exo.toString()); + } - for (Exercise exo : exercises) { - if (Objects.equals(exo.name, exercise)) { - exo.description = new_description; - exo.breakVal = new_break_time * 1000; + dialog.show(); + Button save_btn = dialog.findViewById(R.id.btn_save_modif); + save_btn.setOnClickListener(w -> { + if(nbre_day > 0){ + String description_str = description_text.getText().toString(); + String string_break = break_edit.getText().toString(); + Integer break_time = Integer.parseInt(string_break); + String string_timer = timer_edit.getText().toString(); + if(string_timer.equals("")){ + actual_exo = new Exercise(name_exo, description_str, break_time, "@drawable/developpe_couche_barre", 0); + }else{ + Integer timer_int = Integer.parseInt(string_timer); + actual_exo = new Exercise(name_exo, description_str, break_time, "@drawable/developpe_couche_barre", timer_int); + } + Iterator<Map.Entry<Exercise, ArrayList<String>>> iterator = activity.program.entrySet().iterator(); + while (iterator.hasNext()) { + Map.Entry<Exercise, ArrayList<String>> entry = iterator.next(); + Exercise key = entry.getKey(); + if (key.name.equals(exercise)) { + key.description = description_str; + key.breakVal = break_time; + key.timer = Math.toIntExact(timer_exo); + } } + dialog.dismiss(); + } + else{ + Toast.makeText(this.context, "Veuillez sélectionner au moins un jour !", + Toast.LENGTH_SHORT).show(); } - activity.exoDetailsForEachDay.put(activity.current_day_displayed, exercises); - System.out.println("details : " + activity.exoDetailsForEachDay); - Toast.makeText(context, "Modifications sauvegardées", Toast.LENGTH_SHORT).show(); - dialog.dismiss(); - - }); - ImageView closeButton = dialogView.findViewById(R.id.close_btn); - closeButton.setOnClickListener(v -> { - // Fermer la pop-up - dialog.dismiss(); + form_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (description_text.hasFocus()) { + description_text.clearFocus(); + } + } }); - */ + description_text.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus) { + description_text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + } else { + description_text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + } + } + }); + TextView name_exercice = dialog.findViewById(R.id.exercice_to_modify_name); + name_exercice.setText(name_exo); + + int resId = context.getResources().getIdentifier(img_actual_exo, "drawable", context.getPackageName()); + System.out.println(img_actual_exo); + System.out.println(resId); + ImageView image = dialog.findViewById(R.id.exercice_to_modify_image); + image.setImageResource(resId); }); // Ajouter un OnClickListener à l'image @@ -152,8 +261,6 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { } } - - ArrayList<String> updatedExercicesList = new ArrayList<>(); for (Map.Entry<Exercise, ArrayList<String>> set : activity.program.entrySet()) { updatedExercicesList.add(set.getKey().name); @@ -171,11 +278,6 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { this.values.clear(); this.values.addAll(exercices); notifyDataSetChanged(); - System.out.println("values : " + values); - } - - private void save_workout_details() { - } String getShortDayName(String day) { @@ -189,7 +291,70 @@ public class ListExercicesAdapter extends ArrayAdapter<String> { else throw new IllegalArgumentException(); } - + public CompoundButton.OnCheckedChangeListener myCheckBoxListener = + new CompoundButton.OnCheckedChangeListener() { + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + if (buttonView == cb_lundi) { + if(current_days_checked.contains("lundi")){ + current_days_checked.remove("lundi"); + nbre_day -= 1; + }else{ + current_days_checked.add("lundi"); + nbre_day += 1; + } + } else if (buttonView == cb_mardi) { + if(current_days_checked.contains("mardi")){ + current_days_checked.remove("mardi"); + nbre_day -= 1; + }else{ + current_days_checked.add("mardi"); + nbre_day += 1; + } + } else if (buttonView == cb_mercredi) { + if(current_days_checked.contains("mercredi")){ + current_days_checked.remove("mercredi"); + nbre_day -= 1; + }else{ + current_days_checked.add("mercredi"); + nbre_day += 1; + } + } else if (buttonView == cb_jeudi) { + if(current_days_checked.contains("jeudi")){ + current_days_checked.remove("jeudi"); + nbre_day -= 1; + }else{ + current_days_checked.add("jeudi"); + nbre_day += 1; + } + } else if (buttonView == cb_vendredi) { + if(current_days_checked.contains("vendredi")){ + current_days_checked.remove("vendredi"); + nbre_day -= 1; + }else{ + current_days_checked.add("vendredi"); + nbre_day += 1; + } + } else if (buttonView == cb_samedi) { + if(current_days_checked.contains("samedi")){ + current_days_checked.remove("samedi"); + nbre_day -= 1; + }else{ + current_days_checked.add("samedi"); + nbre_day += 1; + } + } else if (buttonView == cb_dimanche) { + if(current_days_checked.contains("dimanche")){ + current_days_checked.remove("dimanche"); + nbre_day -= 1; + }else{ + current_days_checked.add("dimanche"); + nbre_day += 1; + } + //for (CheckBox cb : cb_list) if (!Objects.equals(cb, cb_dimanche)) cb.setChecked(false); + } + } + }; } diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java index c1ee501e4ee30b16f5c9dd32adc808e3da514158..e84b222fb10c6efde701a83666010fd82fc65807 100644 --- a/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/MainActivity.java @@ -12,16 +12,12 @@ import androidx.recyclerview.widget.RecyclerView; import android.annotation.SuppressLint; import android.content.Intent; import android.os.Bundle; -import android.util.Log; -import android.view.LayoutInflater; import android.view.View; import android.widget.ImageButton; import android.widget.TextView; import android.widget.Toast; import com.google.android.material.navigation.NavigationView; -import com.google.firebase.auth.FirebaseAuth; -import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DataSnapshot; import com.google.firebase.database.DatabaseError; import com.google.firebase.database.DatabaseReference; @@ -68,19 +64,6 @@ public class MainActivity extends AppCompatActivity implements MainAdapter.OnIte //open the navigation open_nav.setOnClickListener(view -> { if (!drawerLayout.isDrawerOpen(GravityCompat.START)) { - FirebaseAuth mAuth = FirebaseAuth.getInstance(); - FirebaseUser currentUser = mAuth.getCurrentUser(); - - LayoutInflater inflater = getLayoutInflater(); - View menu_header = inflater.inflate(R.layout.menu_header, null); - TextView text_header_menu = menu_header.findViewById(R.id.menu_text); - - if(currentUser != null){ - //todo - text_header_menu.setText("Vous êtes connecté !"); - }else{ - text_header_menu.setText("Vous n'êtes pas connecté. Rendez-vous dans la section Mon compte pour vous connecter."); - } drawerLayout.openDrawer(GravityCompat.START); } }); diff --git a/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java b/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java index cac6ea9931410f9bc3cde055fe8ecb8704737aef..6a3668f5d000d989d574ae8e92b6abd04a95ee57 100644 --- a/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java +++ b/app/src/main/java/be/lepl1509group13/workoutwarrior/ProgramCreationActivity.java @@ -7,6 +7,7 @@ import android.graphics.Color; import android.graphics.Typeface; import android.os.Bundle; import android.provider.ContactsContract; +import android.text.InputType; import android.widget.AdapterView; import android.content.Context; import android.os.Bundle; @@ -30,6 +31,7 @@ import android.widget.AutoCompleteTextView; import androidx.annotation.NonNull; import androidx.appcompat.app.AlertDialog; import androidx.appcompat.app.AppCompatActivity; +import androidx.constraintlayout.widget.ConstraintLayout; import androidx.recyclerview.widget.LinearLayoutManager; import androidx.recyclerview.widget.RecyclerView; @@ -66,9 +68,11 @@ public class ProgramCreationActivity extends AppCompatActivity { // Déclaration variables AutoCompleteTextView input_exo; // Champ de texte pour rechercher les exercices + Integer nbre_day = 0; // Liste d'exos dynamique à remplir depuis la DB public Exercise actual_exo ; public String img_actual_exo; + private static ArrayList<String> EXOS = new ArrayList<>(); // Liste des exercices de la base de données CheckBox cb_lundi, cb_mardi, cb_mercredi, cb_jeudi, cb_vendredi, cb_samedi, cb_dimanche; private ArrayList<CheckBox> cb_list = new ArrayList<>(); @@ -83,7 +87,8 @@ public class ProgramCreationActivity extends AppCompatActivity { ListExercicesAdapter exercisesListAdapter; - + String descriptionText; + Long break_time; @Override protected void onCreate(Bundle savedInstanceState) { @@ -92,9 +97,6 @@ public class ProgramCreationActivity extends AppCompatActivity { getSupportActionBar().hide(); //init_days_TextView(); - - - db = firebaseDb.getReference("Workouts"); get_DB_Exercices(); @@ -130,12 +132,11 @@ public class ProgramCreationActivity extends AppCompatActivity { // Ajoute l'exo dans la HashMap (en mémoire) et dans la ListView (sur la page) quand l'utilisateur appuie sur le bouton "ajouter" addExerciceListener(); - // Sauvegarde du programme saveProgramListener(); } - private void helpButtonListener(){ + public void helpButtonListener(){ help_creation_program = findViewById(R.id.help_program_creation); help_creation_program.setOnClickListener(v -> { AlertDialog.Builder builder = new AlertDialog.Builder(ProgramCreationActivity.this); @@ -151,7 +152,7 @@ public class ProgramCreationActivity extends AppCompatActivity { }); } - private void saveProgramListener(){ + public void saveProgramListener(){ Button save_btn = findViewById((R.id.save_button)); save_btn.setOnClickListener(v -> { convertToProgramByDay(); @@ -182,10 +183,7 @@ public class ProgramCreationActivity extends AppCompatActivity { } - - - - private void addExerciceListener() { + public void addExerciceListener() { /** * Ajoute un exercice au jour courant dans la HashMap programByDay et dans la ListView exos_current_day */ @@ -230,7 +228,7 @@ public class ProgramCreationActivity extends AppCompatActivity { for (DataSnapshot snapshot : dataSnapshot.getChildren()) { Long timer = (snapshot.child("timer").getValue(Long.class))/1000; img_actual_exo = snapshot.child("image_url").getValue(String.class); - Long break_time = (snapshot.child("break").getValue(Long.class))/1000; + break_time = (snapshot.child("break").getValue(Long.class))/1000; String description = snapshot.child("description").getValue(String.class); EditText description_text = dialog.findViewById(R.id.exercise_description); @@ -238,6 +236,27 @@ public class ProgramCreationActivity extends AppCompatActivity { TextView timer_text = dialog.findViewById(R.id.timer_text); TextView break_text = dialog.findViewById(R.id.exercice_break); + ConstraintLayout form_layout = dialog.findViewById(R.id.constraintLayout2); + form_layout.setOnClickListener(new View.OnClickListener() { + @Override + public void onClick(View v) { + if (description_text.hasFocus()) { + description_text.clearFocus(); + } + } + }); + + description_text.setOnFocusChangeListener(new View.OnFocusChangeListener() { + @Override + public void onFocusChange(View v, boolean hasFocus) { + if (!hasFocus) { + description_text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + } else { + description_text.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_FLAG_MULTI_LINE | InputType.TYPE_TEXT_FLAG_CAP_SENTENCES); + } + } + }); + if(description != null){ description_text.setText(description); } @@ -260,93 +279,111 @@ public class ProgramCreationActivity extends AppCompatActivity { @Override public void onCancelled(@NonNull DatabaseError databaseError) { System.out.println(databaseError); - } - }); - - + } + }); - ImageView closeButton = dialog.findViewById(R.id.close_btn); - closeButton.setOnClickListener(w -> dialog.dismiss()); + ImageView closeButton = dialog.findViewById(R.id.close_btn); + closeButton.setOnClickListener(w -> dialog.dismiss()); - TextView name_exercice = dialog.findViewById(R.id.exercice_to_modify_name); - name_exercice.setText(exercise_searched); + TextView name_exercice = dialog.findViewById(R.id.exercice_to_modify_name); + name_exercice.setText(exercise_searched); - Button save_btn = dialog.findViewById(R.id.btn_save_modif); - save_btn.setOnClickListener(w -> { - EditText description_text = dialog.findViewById(R.id.exercise_description); - String description_str = description_text.getText().toString(); + Button save_btn = dialog.findViewById(R.id.btn_save_modif); + save_btn.setOnClickListener(w -> { + if(nbre_day > 0){ + EditText description_text = dialog.findViewById(R.id.exercise_description); + String description_str = description_text.getText().toString(); - EditText break_text = dialog.findViewById(R.id.exercice_break); - String string_break = break_text.getText().toString(); - Integer break_time = Integer.parseInt(string_break); + EditText break_text = dialog.findViewById(R.id.exercice_break); + String string_break = break_text.getText().toString(); + Integer break_time = Integer.parseInt(string_break); - EditText timer_edit = dialog.findViewById(R.id.exercise_timer); - String string_timer = timer_edit.getText().toString(); - if(string_timer.equals("")){ - actual_exo = new Exercise(exercise_searched, description_str, break_time, "@drawable/developpe_couche_barre", 0); - }else{ - Integer timer_int = Integer.parseInt(string_timer); - actual_exo = new Exercise(exercise_searched, description_str, break_time, "@drawable/developpe_couche_barre", timer_int); + EditText timer_edit = dialog.findViewById(R.id.exercise_timer); + String string_timer = timer_edit.getText().toString(); + String img = "@drawable/"+img_actual_exo; + if(string_timer.equals("")){ + actual_exo = new Exercise(exercise_searched, description_str, break_time, img, 0); + }else{ + Integer timer_int = Integer.parseInt(string_timer); + actual_exo = new Exercise(exercise_searched, description_str, break_time, img, timer_int); + actual_exo = new Exercise(exercise_searched, description_str, break_time, img, 0); + } + addToProgram(actual_exo, new ArrayList<>(current_days_checked)); + dialog.dismiss(); + // Effacer le champ de texte AutoCompleteTextView + input_exo.setText(""); + } + else{ + Toast.makeText(ProgramCreationActivity.this, "Veuillez sélectionner au moins un jour !", + Toast.LENGTH_SHORT).show(); } - addToProgram(actual_exo, new ArrayList<>(current_days_checked)); - dialog.dismiss(); }); - - // Effacer le champ de texte AutoCompleteTextView - input_exo.setText(""); } }); } - private CompoundButton.OnCheckedChangeListener myCheckBoxListener = + public CompoundButton.OnCheckedChangeListener myCheckBoxListener = new CompoundButton.OnCheckedChangeListener() { @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { if (buttonView == cb_lundi) { if(current_days_checked.contains("lundi")){ current_days_checked.remove("lundi"); + nbre_day -= 1; }else{ current_days_checked.add("lundi"); + nbre_day += 1; } } else if (buttonView == cb_mardi) { if(current_days_checked.contains("mardi")){ current_days_checked.remove("mardi"); + nbre_day -= 1; }else{ current_days_checked.add("mardi"); + nbre_day += 1; } } else if (buttonView == cb_mercredi) { if(current_days_checked.contains("mercredi")){ current_days_checked.remove("mercredi"); + nbre_day -= 1; }else{ current_days_checked.add("mercredi"); + nbre_day += 1; } } else if (buttonView == cb_jeudi) { if(current_days_checked.contains("jeudi")){ current_days_checked.remove("jeudi"); + nbre_day -= 1; }else{ current_days_checked.add("jeudi"); + nbre_day += 1; } } else if (buttonView == cb_vendredi) { if(current_days_checked.contains("vendredi")){ current_days_checked.remove("vendredi"); + nbre_day -= 1; }else{ current_days_checked.add("vendredi"); + nbre_day += 1; } } else if (buttonView == cb_samedi) { if(current_days_checked.contains("samedi")){ current_days_checked.remove("samedi"); + nbre_day -= 1; }else{ current_days_checked.add("samedi"); + nbre_day += 1; } } else if (buttonView == cb_dimanche) { if(current_days_checked.contains("dimanche")){ current_days_checked.remove("dimanche"); + nbre_day -= 1; }else{ current_days_checked.add("dimanche"); + nbre_day += 1; } //for (CheckBox cb : cb_list) if (!Objects.equals(cb, cb_dimanche)) cb.setChecked(false); } - System.out.println(current_days_checked); } }; @@ -375,7 +412,7 @@ public class ProgramCreationActivity extends AppCompatActivity { }); } - private void addToProgram(Exercise exercise, ArrayList<String> trainingDays) { + public void addToProgram(Exercise exercise, ArrayList<String> trainingDays) { /** * Add the new exercise to the program */ @@ -416,8 +453,6 @@ public class ProgramCreationActivity extends AppCompatActivity { } } - System.out.println("program : " + program); - System.out.println("programByDay : " + programByDay); } } diff --git a/app/src/main/res/drawable/delete.png b/app/src/main/res/drawable/delete.png new file mode 100644 index 0000000000000000000000000000000000000000..0d30fb0646efbb883db75db9d985fb06af304adb Binary files /dev/null and b/app/src/main/res/drawable/delete.png differ diff --git a/app/src/main/res/layout/activity_account.xml b/app/src/main/res/layout/activity_account.xml index 18b81bf3827654df43a9c44492349caf1040827d..0a0887b439e685bd93d779144df8cd7c622e0c42 100644 --- a/app/src/main/res/layout/activity_account.xml +++ b/app/src/main/res/layout/activity_account.xml @@ -100,7 +100,8 @@ android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Deconnexion" - android:backgroundTint="@color/orange" + android:background="#FFFFFF" + android:backgroundTint="#FFFFFF" app:layout_constraintBottom_toBottomOf="@+id/relativeLayout" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent" diff --git a/app/src/main/res/layout/activity_account_friends.xml b/app/src/main/res/layout/activity_account_friends.xml new file mode 100644 index 0000000000000000000000000000000000000000..8cc4d76707275caf8fbc74c6ca5b47cc91233e7e --- /dev/null +++ b/app/src/main/res/layout/activity_account_friends.xml @@ -0,0 +1,89 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".AccountActivity"> + + <TextView + android:id="@+id/account_friends_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:paddingHorizontal="20dp" + android:textAlignment="center" + android:textSize="20sp" + android:text="@string/friends_list" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/relativeLayout" /> + + <ScrollView + android:id="@+id/scrollView_friends" + android:layout_width="match_parent" + android:layout_height="500dp" + android:padding="10dp" + android:fillViewport="true" + app:layout_constraintBottom_toTopOf="@+id/button_layout" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/account_friends_title"> + + <androidx.recyclerview.widget.RecyclerView + android:id="@+id/friends_view_recycler" + android:layout_width="match_parent" + android:layout_height="wrap_content" + app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" /> + + </ScrollView> + + <LinearLayout + android:id="@+id/button_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:gravity="center" + android:layout_marginBottom="15dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent"> + + <Button + android:id="@+id/friends_add" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/friends_add" /> + + </LinearLayout> + + <RelativeLayout + android:id="@+id/relativeLayout" + android:layout_width="match_parent" + android:layout_height="80dp" + android:background="@color/orange" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <ImageButton + android:id="@+id/return_from_account" + android:layout_width="66dp" + android:layout_height="61dp" + android:layout_marginStart="10dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:background="@color/orange" + android:paddingLeft="10dp" + android:paddingTop="1dp" + android:paddingRight="10dp" + android:paddingBottom="4dp" + android:scaleType="fitCenter" + android:src="@drawable/return_button" + android:textAlignment="center" + android:textSize="16sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_account_login.xml b/app/src/main/res/layout/activity_account_login.xml index 8767900d6713c4f3ab20ab8e8c412c37462db7cb..fd3221fcec5d66ad3baee5a4f007f76869ac7899 100644 --- a/app/src/main/res/layout/activity_account_login.xml +++ b/app/src/main/res/layout/activity_account_login.xml @@ -14,11 +14,11 @@ android:paddingHorizontal="20dp" android:textAlignment="center" android:textSize="20sp" + android:text="@string/login_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintHorizontal_bias="0.0" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/relativeLayout" - tools:text="Hello" /> + app:layout_constraintTop_toBottomOf="@+id/relativeLayout" /> <RelativeLayout android:id="@+id/field_layout" @@ -115,17 +115,4 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> - - - <Button - android:id="@+id/logout" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Deconnexion" - android:backgroundTint="@color/orange" - app:layout_constraintBottom_toBottomOf="@+id/relativeLayout" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - android:layout_marginRight="10dp"/> - </androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_add_friend.xml b/app/src/main/res/layout/activity_add_friend.xml new file mode 100644 index 0000000000000000000000000000000000000000..51859383c3aed026039fe4b5d08b8921b7313aed --- /dev/null +++ b/app/src/main/res/layout/activity_add_friend.xml @@ -0,0 +1,95 @@ +<?xml version="1.0" encoding="utf-8"?> +<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + xmlns:tools="http://schemas.android.com/tools" + android:layout_width="match_parent" + android:layout_height="match_parent" + tools:context=".AddFriendActivity"> + + <TextView + android:id="@+id/account_friends_title" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_marginTop="20dp" + android:paddingHorizontal="20dp" + android:textAlignment="center" + android:textSize="20sp" + android:text="@string/add_friend_activity_title" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/relativeLayout" /> + + <RelativeLayout + android:id="@+id/add_friend_activity_field" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:padding="10dp" + android:layout_marginTop="35dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/account_friends_title"> + + <com.google.android.material.textfield.TextInputLayout + android:id="@+id/add_friend_pseudo_layout" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:layout_centerHorizontal="true"> + + <com.google.android.material.textfield.TextInputEditText + android:id="@+id/add_friend_pseudo" + android:layout_width="300dp" + android:layout_height="wrap_content" + android:hint="Pseudo" /> + + </com.google.android.material.textfield.TextInputLayout> + + </RelativeLayout> + + <LinearLayout + android:id="@+id/button_layout" + android:layout_width="match_parent" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:gravity="center" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toBottomOf="@+id/add_friend_activity_field"> + + <Button + android:id="@+id/add_friend_activity_btn" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:text="@string/add_friend_activity_btn_text" /> + + </LinearLayout> + + <RelativeLayout + android:id="@+id/relativeLayout" + android:layout_width="match_parent" + android:layout_height="80dp" + android:background="@color/orange" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <ImageButton + android:id="@+id/return_from_add_friend" + android:layout_width="66dp" + android:layout_height="61dp" + android:layout_marginStart="10dp" + android:layout_marginTop="10dp" + android:layout_marginEnd="10dp" + android:layout_marginBottom="10dp" + android:background="@color/orange" + android:paddingLeft="10dp" + android:paddingTop="1dp" + android:paddingRight="10dp" + android:paddingBottom="4dp" + android:scaleType="fitCenter" + android:src="@drawable/return_button" + android:textAlignment="center" + android:textSize="16sp" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/friends_item.xml b/app/src/main/res/layout/friends_item.xml new file mode 100644 index 0000000000000000000000000000000000000000..72512fa0f81eb0f6e29b76bc78254cc397091dbc --- /dev/null +++ b/app/src/main/res/layout/friends_item.xml @@ -0,0 +1,42 @@ +<?xml version="1.0" encoding="utf-8"?> + <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="wrap_content"> + + <androidx.constraintlayout.widget.ConstraintLayout + android:id="@+id/friend_layout" + android:layout_width="325dp" + android:layout_height="70dp" + android:layout_marginTop="25dp" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" + android:background="@drawable/border_orange" + android:padding="15dp"> + + <TextView + android:id="@+id/friend_pseudo" + android:layout_width="wrap_content" + android:layout_height="wrap_content" + android:fontFamily="@font/poppins" + android:text="Pseudo" + android:textSize="24sp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + <ImageView + android:id="@+id/friend_delete" + android:layout_width="40dp" + android:layout_height="wrap_content" + android:layout_alignParentEnd="true" + android:src="@drawable/delete" + android:textColor="@color/white" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintTop_toTopOf="parent" /> + + </androidx.constraintlayout.widget.ConstraintLayout> + +</androidx.constraintlayout.widget.ConstraintLayout> \ No newline at end of file diff --git a/app/src/main/res/layout/menu_header.xml b/app/src/main/res/layout/menu_header.xml index 7e283f7810342a6a81b47142d11837f0be34d935..845991e6ef0090aca184785c9f9050e238c4e029 100644 --- a/app/src/main/res/layout/menu_header.xml +++ b/app/src/main/res/layout/menu_header.xml @@ -32,16 +32,6 @@ app:layout_constraintStart_toEndOf="@+id/menu_image" app:layout_constraintTop_toTopOf="parent" /> - <TextView - android:id="@+id/menu_text" - android:layout_width="wrap_content" - android:layout_height="wrap_content" - android:text="Vous êtes connecté !" - app:layout_constraintBottom_toBottomOf="parent" - app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintStart_toStartOf="parent" - app:layout_constraintTop_toBottomOf="@+id/menu_title" /> - </androidx.constraintlayout.widget.ConstraintLayout> diff --git a/app/src/main/res/layout/modify_exercice_popup.xml b/app/src/main/res/layout/modify_exercice_popup.xml index fdb200a10dc5081bb8035d0c989560873f5c742c..9722d04f05a01a842c0f1de26c2d25ff4081f840 100644 --- a/app/src/main/res/layout/modify_exercice_popup.xml +++ b/app/src/main/res/layout/modify_exercice_popup.xml @@ -179,7 +179,8 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="Pause" - android:text=""/> + android:text="" + android:maxLines="5"/> <TextView android:id="@+id/timer_text" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 2624b16b5748a98d20d58629cc0d92c1930fc209..2442df26381513a76c96b329db7368438f546378 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -18,5 +18,10 @@ <string name="welcome">"Welcome !"</string> <string name="invalid_username">Not a valid username</string> <string name="invalid_password">Password must be >5 characters</string> - <string name="login_failed">"Login failed"</string> + <string name="login_failed">Login failed</string> + <string name="friends_list">Voici la liste de vos amis</string> + <string name="friends_add">Ajouter des amis</string> + <string name="add_friend_activity_title">Entrez le pseudo de l\'ami à ajouter</string> + <string name="add_friend_activity_btn_text">Ajouter</string> + <string name="login_title">Veuillez d\'abord vous connecter</string> </resources>