Skip to content
Extraits de code Groupes Projets
Valider 3a665096 rédigé par Rémy Mathieu's avatar Rémy Mathieu
Parcourir les fichiers

Ajout partie de Romain pcq mauvais merge :-(

parent 9f78f09a
Aucune branche associée trouvée
Aucune étiquette associée trouvée
1 requête de fusion!39Remy
plugins {
id 'com.android.application'
id 'com.google.gms.google-services'
id 'com.google.firebase.crashlytics'
}
android {
......@@ -44,5 +45,8 @@ dependencies {
androidTestImplementation 'androidx.test.espresso:espresso-core:3.4.0'
implementation platform('com.google.firebase:firebase-bom:31.2.3')
implementation 'com.google.firebase:firebase-auth'
implementation 'com.google.code.gson:gson:2.8.8'
}
\ No newline at end of file
implementation 'com.google.firebase:firebase-crashlytics:18.2.9'
implementation 'com.google.firebase:firebase-analytics:20.1.2'
implementation 'com.google.code.gson:gson:2.8.9'
}
......@@ -15,6 +15,8 @@ import androidx.appcompat.app.AppCompatActivity;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
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;
......@@ -38,8 +40,11 @@ public class ProgramDetailActivity extends AppCompatActivity implements ProgramA
private final FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance();
private DatabaseReference db;
private FirebaseAuth mAuth;
private HashMap<String, ArrayList<Exercise>> programHash;
ImageButton return_btn;
TextView start_workout, delete_workout, show_workout;
TextView start_workout, delete_workout, show_workout, share_workout;
private boolean isLocalProgram = false;
private String[][] exercisesData = null;
......@@ -67,6 +72,9 @@ public class ProgramDetailActivity extends AppCompatActivity implements ProgramA
return_btn = findViewById(R.id.return_btn2);
return_btn.setOnClickListener(view -> finish());
share_workout = findViewById(R.id.share_workout);
share_workout.setOnClickListener(view -> {shareWorkout();});
start_workout = findViewById(R.id.start_workout);
start_workout.setOnClickListener(view -> {
Intent intent = new Intent(ProgramDetailActivity.this, WorkoutActivity.class);
......@@ -85,6 +93,78 @@ public class ProgramDetailActivity extends AppCompatActivity implements ProgramA
});
}
private void shareWorkout(){
mAuth = FirebaseAuth.getInstance();
FirebaseUser currentUser = mAuth.getCurrentUser();
if (currentUser != null) {
AlertDialog.Builder builder = new AlertDialog.Builder(ProgramDetailActivity.this);
LayoutInflater inflater = getLayoutInflater();
View dialogView = inflater.inflate(R.layout.share_friends_popup, null);
builder.setView(dialogView);
db = firebaseDb.getReference("Account_pseudo");
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())){
String userPseudo = pseudo;
db = firebaseDb.getReference("Friends");
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 recyclerView2 = dialogView.findViewById(R.id.share_friends_recycler);
recyclerView2.setLayoutManager(new LinearLayoutManager(ProgramDetailActivity.this));
SharingAdapter adapter = new SharingAdapter(friendsData, userPseudo, programHash);
adapter.setOnItemClickListener(new SharingAdapter.OnItemClickListener() {
@Override
public void onItemClick(String friend_pseudo) {
System.out.println(friend_pseudo);
}
});
recyclerView2.setAdapter(adapter);
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
// Failed to read value
}
});
return;
}
}
}
@Override
public void onCancelled(@NonNull DatabaseError error) {
Toast.makeText(ProgramDetailActivity.this, "Une erreur est survenue !", Toast.LENGTH_SHORT).show();
finish();
}
});
AlertDialog dialog = builder.create();
dialog.show();
ImageView closeShareButton = dialogView.findViewById(R.id.close_share_btn);
closeShareButton.setOnClickListener(v -> dialog.dismiss());
}
}
private void showWorkout() {
//todo
}
......@@ -165,6 +245,7 @@ public class ProgramDetailActivity extends AppCompatActivity implements ProgramA
// ici tu peux utiliser entry comme programme perso
HashMap<String, ArrayList<Exercise>> entry = exerciseEntry.getEntry();
programHash = entry;
for (Map.Entry<String, ArrayList<Exercise>> set : entry.entrySet()) {
String dayOfTheWeek = new SimpleDateFormat("EEEE", Locale.FRENCH).format(date.getTime());
......
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 com.google.firebase.database.DataSnapshot;
import com.google.firebase.database.DatabaseError;
import com.google.firebase.database.ValueEventListener;
import com.google.gson.Gson;
import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.google.gson.reflect.TypeToken;
import java.lang.reflect.Type;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
public class SharingAdapter extends RecyclerView.Adapter<SharingAdapter.MyViewHolder>{
private final String[][] friendData;
private final FirebaseDatabase firebaseDb = FirebaseDatabase.getInstance();
private DatabaseReference db;
private final String sender;
private final HashMap<String, ArrayList<Exercise>> programHash;
private OnItemClickListener mListener;
public SharingAdapter(String[][] data, String from, HashMap<String, ArrayList<Exercise>> progHash) {
friendData = data;
sender = from;
programHash = progHash;
}
@NonNull
@Override
public MyViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.sharing_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.share.setOnClickListener(view -> {
if (mListener != null) {
System.out.println(sender);
System.out.println(friend_data[0]);
System.out.println(programHash);
writeOnDatabase(sender,friend_data[0],programHash);
}
});
}
public void writeOnDatabase(String from, String to, HashMap<String, ArrayList<Exercise>> sharedProgram){
Gson gson = new Gson();
String json = gson.toJson(sharedProgram);
db = firebaseDb.getReference("Shared_program").child(to).child(from);
db.addListenerForSingleValueEvent(new ValueEventListener() {
@Override
public void onDataChange(DataSnapshot dataSnapshot) {
long count = dataSnapshot.getChildrenCount();
Map<String, Object> updates = new HashMap<>();
updates.put(String.valueOf(count), json);
db.updateChildren(updates);
System.out.println("done!");
}
@Override
public void onCancelled(DatabaseError databaseError) {
System.out.println("Database error: " + databaseError.getMessage());
}
});
Type type = new TypeToken<HashMap<String, ArrayList<Exercise>>>(){}.getType();
HashMap<String, ArrayList<Exercise>> testProgram = gson.fromJson(json, type);
System.out.println("Json: " + json);
System.out.println("HashMap<String, ArrayList<Exercise>>: " + testProgram);
System.out.println(testProgram);
}
@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 share;
public MyViewHolder(View itemView) {
super(itemView);
pseudo = itemView.findViewById(R.id.friend_share_pseudo);
share = itemView.findViewById(R.id.friend_share_btn);
}
}
}
......@@ -111,6 +111,21 @@
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/share_workout"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="80dp"
android:background="@color/orange"
android:backgroundTint="@color/orange"
android:text="@string/share_workout"
android:textColor="@color/black"
android:translationX="80dp"
app:iconTint="@color/orange"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/show_workout"
android:layout_width="wrap_content"
......
<?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=".ProgramDetailActivity">
<TextView
android:id="@+id/share_title"
android:layout_width="375dp"
android:layout_height="38dp"
android:layout_marginTop="80dp"
android:fontFamily="@font/poppins"
android:gravity="center"
android:text="Partage à un ami"
android:textSize="12sp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ScrollView
android:id="@+id/scrollView_program_view"
android:layout_width="377dp"
android:layout_height="400dp"
android:fillViewport="true"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/share_title">
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/share_friends_recycler"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="25dp"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager" />
</ScrollView>
<ImageView
android:id="@+id/close_share_btn"
android:layout_width="35dp"
android:layout_height="35dp"
android:layout_marginTop="10dp"
android:layout_marginEnd="10dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/close_btn" />
</androidx.constraintlayout.widget.ConstraintLayout>
<?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_share_layout"
android:layout_width="325dp"
android:layout_height="50dp"
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="10dp">
<TextView
android:id="@+id/friend_share_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_share_btn"
android:layout_width="40dp"
android:layout_height="wrap_content"
android:layout_alignParentEnd="true"
android:textColor="@color/white"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@android:drawable/ic_menu_send" />
</androidx.constraintlayout.widget.ConstraintLayout>
</androidx.constraintlayout.widget.ConstraintLayout>
......@@ -24,4 +24,5 @@
<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>
<string name="share_workout">Partager</string>
</resources>
......@@ -8,6 +8,7 @@ buildscript {
classpath "com.android.tools.build:gradle:7.0.0"
classpath 'com.google.gms:google-services:4.3.10'
classpath 'com.google.gms:google-services:4.3.15'
classpath 'com.google.firebase:firebase-crashlytics-gradle:2.8.1'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
......
0% Chargement en cours ou .
You are about to add 0 people to the discussion. Proceed with caution.
Terminez d'abord l'édition de ce message.
Veuillez vous inscrire ou vous pour commenter