diff --git a/.gitignore b/.gitignore
new file mode 100644
index 0000000..aa724b7
--- /dev/null
+++ b/.gitignore
@@ -0,0 +1,15 @@
+*.iml
+.gradle
+/local.properties
+/.idea/caches
+/.idea/libraries
+/.idea/modules.xml
+/.idea/workspace.xml
+/.idea/navEditor.xml
+/.idea/assetWizardSettings.xml
+.DS_Store
+/build
+/captures
+.externalNativeBuild
+.cxx
+local.properties
diff --git a/TeamProjects/.idea/.gitignore b/.idea/.gitignore
similarity index 100%
rename from TeamProjects/.idea/.gitignore
rename to .idea/.gitignore
diff --git a/.idea/.name b/.idea/.name
new file mode 100644
index 0000000..18430ac
--- /dev/null
+++ b/.idea/.name
@@ -0,0 +1 @@
+SsainFe_Real
\ No newline at end of file
diff --git a/.idea/compiler.xml b/.idea/compiler.xml
new file mode 100644
index 0000000..b589d56
--- /dev/null
+++ b/.idea/compiler.xml
@@ -0,0 +1,6 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
new file mode 100644
index 0000000..ae388c2
--- /dev/null
+++ b/.idea/gradle.xml
@@ -0,0 +1,20 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/misc.xml b/.idea/misc.xml
new file mode 100644
index 0000000..8978d23
--- /dev/null
+++ b/.idea/misc.xml
@@ -0,0 +1,9 @@
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/.idea/vcs.xml b/.idea/vcs.xml
similarity index 75%
rename from TeamProjects/.idea/vcs.xml
rename to .idea/vcs.xml
index 62bd7a0..35eb1dd 100644
--- a/TeamProjects/.idea/vcs.xml
+++ b/.idea/vcs.xml
@@ -2,6 +2,5 @@
-
\ No newline at end of file
diff --git a/README.md b/README.md
deleted file mode 100644
index c156e2b..0000000
--- a/README.md
+++ /dev/null
@@ -1 +0,0 @@
-# TeamProjects
\ No newline at end of file
diff --git a/TeamProjects/.idea/deploymentTargetDropDown.xml b/TeamProjects/.idea/deploymentTargetDropDown.xml
deleted file mode 100644
index 0c0c338..0000000
--- a/TeamProjects/.idea/deploymentTargetDropDown.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TeamProjects/.idea/gradle.xml b/TeamProjects/.idea/gradle.xml
index 0897082..9f47dfb 100644
--- a/TeamProjects/.idea/gradle.xml
+++ b/TeamProjects/.idea/gradle.xml
@@ -4,8 +4,9 @@
+
-
+
diff --git a/TeamProjects/.idea/migrations.xml b/TeamProjects/.idea/migrations.xml
deleted file mode 100644
index f8051a6..0000000
--- a/TeamProjects/.idea/migrations.xml
+++ /dev/null
@@ -1,10 +0,0 @@
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TeamProjects/.idea/render.experimental.xml b/TeamProjects/.idea/render.experimental.xml
deleted file mode 100644
index 8ec256a..0000000
--- a/TeamProjects/.idea/render.experimental.xml
+++ /dev/null
@@ -1,6 +0,0 @@
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TeamProjects/app/build.gradle.kts b/TeamProjects/app/build.gradle.kts
index f95f819..dad6a84 100644
--- a/TeamProjects/app/build.gradle.kts
+++ b/TeamProjects/app/build.gradle.kts
@@ -66,4 +66,24 @@ dependencies {
// Add the dependencies for any other desired Firebase products
// https://firebase.google.com/docs/android/setup#available-libraries
+ // Add the dependency for the Firebase Authentication library
+ // When using the BoM, you don't specify versions in Firebase library dependencies
+ implementation("com.google.firebase:firebase-auth")
+
+ // Declare the dependency for the Cloud Firestore library
+ // When using the BoM, you don't specify versions in Firebase library dependencies
+ implementation("com.google.firebase:firebase-firestore")
+
+ // FirebaseUI for Cloud Firestore
+ implementation ("com.firebaseui:firebase-ui-firestore:8.0.0")
+ implementation ("androidx.paging:paging-runtime:3.2.1")
+
+ // 네이버 지도 SDK
+ implementation("com.naver.maps:map-sdk:3.17.0")
+ //위치받아오기 구글서비스
+ implementation("com.google.android.gms:play-services-location:21.0.1")
+//gson - geocoding 사용에 필요
+ implementation("com.squareup.retrofit2:retrofit:2.9.0")
+ implementation ("com.squareup.retrofit2:converter-gson:2.9.0")
+
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/AndroidManifest.xml b/TeamProjects/app/src/main/AndroidManifest.xml
index 444136e..38565cc 100644
--- a/TeamProjects/app/src/main/AndroidManifest.xml
+++ b/TeamProjects/app/src/main/AndroidManifest.xml
@@ -1,6 +1,10 @@
+ xmlns:tools="http://schemas.android.com/tools">
+
+
+
+
+ tools:targetApi="31">
+
+
+ android:exported="true">
@@ -31,13 +41,35 @@
android:exported="false" />
+ android:exported="true">
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Adding_friend_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Adding_friend_adapter.java
index 595556f..8252efe 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Adding_friend_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Adding_friend_adapter.java
@@ -1,6 +1,8 @@
package com.example.myapplication.adapter;
import android.content.Context;
+import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,16 +13,25 @@
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
+import com.example.myapplication.databinding.FragmentClickMakePromiseBinding;
import com.example.myapplication.databinding.ItemFriendAddBinding;
import com.example.myapplication.databinding.ItemFriendBinding;
import com.example.myapplication.databinding.ItemFriendRequestBinding;
+import com.example.myapplication.initial_screen.MainActivity;
+import com.example.myapplication.make_prom.added_friend;
+import com.example.myapplication.make_prom.click_make_promise;
import com.example.myapplication.make_prom.received_promise_info;
import java.util.ArrayList;
import java.util.List;
+
+
+// 내 페이지 코드로 바꿈
public class Adding_friend_adapter extends RecyclerView.Adapter {
private List userList;
+ private ArrayList uidList = new ArrayList<>();
+ private ItemFriendAddBinding binding;
public Adding_friend_adapter(List userList) {
this.userList = userList;
@@ -28,10 +39,10 @@ public Adding_friend_adapter(List userList) {
@Override
public AddingFriendViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ItemFriendBinding binding = ItemFriendBinding.inflate(LayoutInflater.from(
+ binding = ItemFriendAddBinding.inflate(LayoutInflater.from(
parent.getContext()),
- parent,
- false);
+ parent,
+ false);
return new AddingFriendViewHolder(binding);
}
@@ -40,6 +51,41 @@ public AddingFriendViewHolder onCreateViewHolder(ViewGroup parent, int viewType)
public void onBindViewHolder(AddingFriendViewHolder holder, int position) {
User name = userList.get(position);
holder.bind(name);
+
+ binding.friendAddBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ // 띄워진 리싸이클러뷰 item이다.
+ // 클릭을 통해서, added_friend 즉, 함꼐할 친구 목록에 넣어준다.
+ // 만약, 이미 담긴 파티원이라면, 토스트문구와 함께 담기지 않게 된다.
+
+ if (!isAlreadyAdded(name.getUid())) {
+ uidList.add(name.getUid());
+ Bundle bundle = new Bundle();
+
+ bundle.putStringArrayList("uidList", uidList);
+
+ added_friend fragment = new added_friend();
+ fragment.setArguments(bundle);
+
+ ((MainActivity) view.getContext()).getSupportFragmentManager().beginTransaction()
+ .replace(R.id.added_friend_list, fragment)
+ .commit();
+
+ Log.d("LJM", "친구추가됨");
+ Toast.makeText(view.getContext(), "추가", Toast.LENGTH_LONG).show();
+
+ } else {
+ Log.d("LJM", "이미 추가됨");
+ Toast.makeText(view.getContext(), "이미 추가된 친구입니다.", Toast.LENGTH_SHORT).show();
+ }
+ }
+ });
+
+ }
+
+ private boolean isAlreadyAdded(String userId) {
+ return uidList.contains(userId);
}
@Override
@@ -47,29 +93,101 @@ public int getItemCount() {
return userList.size();
}
- public void filterList(ArrayList filteredList){
+ public void filterList(ArrayList filteredList) {
userList = filteredList;
notifyDataSetChanged();
}
+
public class AddingFriendViewHolder extends RecyclerView.ViewHolder {
- private ItemFriendBinding binding;
+ private ItemFriendAddBinding binding;
- private AddingFriendViewHolder(ItemFriendBinding binding){
+ private AddingFriendViewHolder(ItemFriendAddBinding binding) {
super(binding.getRoot());
this.binding = binding;
- binding.userInfo.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- // 띄워진 리싸이클러뷰 item이다.
- // 클릭을 통해서, added_friend 즉, 함꼐할 친구 목록에 넣어준다.
- // 만약, 이미 담긴 파티원이라면, 토스트문구와 함께 담기지 않게 된다.
- Toast.makeText(view.getContext(), "추가", Toast.LENGTH_LONG).show();
- }
- });
}
- private void bind(User text){
+
+ private void bind(User text) {
binding.userName.setText(text.name);
- binding.userId.setText(text.id);}
+ binding.userId.setText(text.id);
+ }
}
-}
\ No newline at end of file
+}
+
+// 이종민 합병 이전 코드
+
+//package com.example.myapplication.adapter;
+//
+//import android.content.Context;
+//import android.view.LayoutInflater;
+//import android.view.View;
+//import android.view.ViewGroup;
+//import android.widget.Toast;
+//
+//import androidx.appcompat.app.AppCompatActivity;
+//import androidx.fragment.app.FragmentManager;
+//import androidx.recyclerview.widget.RecyclerView;
+//
+//import com.example.myapplication.R;
+//import com.example.myapplication.databinding.ItemFriendAddBinding;
+//import com.example.myapplication.databinding.ItemFriendBinding;
+//import com.example.myapplication.databinding.ItemFriendRequestBinding;
+//import com.example.myapplication.make_prom.received_promise_info;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//public class Adding_friend_adapter extends RecyclerView.Adapter {
+//
+// private List userList;
+//
+// public Adding_friend_adapter(List userList) {
+// this.userList = userList;
+// }
+//
+// @Override
+// public AddingFriendViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+// ItemFriendBinding binding = ItemFriendBinding.inflate(LayoutInflater.from(
+// parent.getContext()),
+// parent,
+// false);
+// return new AddingFriendViewHolder(binding);
+// }
+//
+//
+// @Override
+// public void onBindViewHolder(AddingFriendViewHolder holder, int position) {
+// User name = userList.get(position);
+// holder.bind(name);
+// }
+//
+// @Override
+// public int getItemCount() {
+// return userList.size();
+// }
+//
+// public void filterList(ArrayList filteredList){
+// userList = filteredList;
+// notifyDataSetChanged();
+// }
+// public class AddingFriendViewHolder extends RecyclerView.ViewHolder {
+// private ItemFriendBinding binding;
+//
+// private AddingFriendViewHolder(ItemFriendBinding binding){
+// super(binding.getRoot());
+// this.binding = binding;
+//
+// binding.userInfo.setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View view) {
+// // 띄워진 리싸이클러뷰 item이다.
+// // 클릭을 통해서, added_friend 즉, 함꼐할 친구 목록에 넣어준다.
+// // 만약, 이미 담긴 파티원이라면, 토스트문구와 함께 담기지 않게 된다.
+// Toast.makeText(view.getContext(), "추가", Toast.LENGTH_LONG).show();
+// }
+// });
+// }
+// private void bind(User text){
+// binding.userName.setText(text.name);
+// binding.userId.setText(text.id);}
+// }
+//}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/FriendRequest.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/FriendRequest.java
new file mode 100644
index 0000000..011184b
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/FriendRequest.java
@@ -0,0 +1,40 @@
+package com.example.myapplication.adapter;
+
+public class FriendRequest {
+ private String senderUid;
+ private String receiverUid;
+ private String status;
+
+ public FriendRequest() {
+ }
+
+ public FriendRequest(String senderUid, String receiverUid, String status) {
+ this.senderUid = senderUid;
+ this.receiverUid = receiverUid;
+ this.status = status;
+ }
+
+ public String getSenderUid() {
+ return senderUid;
+ }
+
+ public void setSenderUid(String senderUid) {
+ this.senderUid = senderUid;
+ }
+
+ public String getReceiverUid() {
+ return receiverUid;
+ }
+
+ public void setReceiverUid(String receiverUid) {
+ this.receiverUid = receiverUid;
+ }
+
+ public String getStatus() {
+ return status;
+ }
+
+ public void setStatus(String status) {
+ this.status = status;
+ }
+}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Friend_received_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Friend_received_adapter.java
index c1e8b2a..18bb150 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Friend_received_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Friend_received_adapter.java
@@ -1,26 +1,46 @@
package com.example.myapplication.adapter;
+import android.annotation.SuppressLint;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
+import android.widget.Toast;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.databinding.ItemFriendAddBinding;
import com.example.myapplication.databinding.ItemFriendBinding;
import com.example.myapplication.databinding.ItemFriendRequestBinding;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
import java.util.List;
+
public class Friend_received_adapter extends RecyclerView.Adapter {
private List userList;
+ private List friendRequestList;
+ private String currentUserUid;
+ private FirebaseFirestore db;
+ ItemFriendRequestBinding binding;
+
public Friend_received_adapter(List userList) {
this.userList = userList;
+ this.db = FirebaseFirestore.getInstance();
+ this.currentUserUid = FirebaseAuth.getInstance().getUid();
}
+
@Override
public friendReceiveViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ItemFriendRequestBinding binding = ItemFriendRequestBinding.inflate(LayoutInflater.from(
+
+
+ binding = ItemFriendRequestBinding.inflate(LayoutInflater.from(
parent.getContext()),
parent,
false);
@@ -29,9 +49,24 @@ public friendReceiveViewHolder onCreateViewHolder(ViewGroup parent, int viewType
@Override
- public void onBindViewHolder(friendReceiveViewHolder holder, int position) {
+ public void onBindViewHolder(friendReceiveViewHolder holder, @SuppressLint("RecyclerView") int position) {
User name = userList.get(position);
holder.bind(name);
+
+ binding.requestAcceptBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ acceptFriendRequest(position);
+ }
+ });
+
+ binding.requestRejectBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String senderUid = userList.get(position).getUid();
+ rejectFriendRequest(senderUid, position);
+ }
+ });
}
@Override
@@ -42,12 +77,154 @@ public int getItemCount() {
public class friendReceiveViewHolder extends RecyclerView.ViewHolder {
private ItemFriendRequestBinding binding;
- private friendReceiveViewHolder(ItemFriendRequestBinding binding){
+ private friendReceiveViewHolder(ItemFriendRequestBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
- private void bind(User text){
- binding.userName.setText(text.name);
- binding.userId.setText(text.id);}
+
+ private void bind(User text) {
+ binding.userNameRequest.setText(text.name);
+ binding.userIdRequest.setText(text.id);
+ }
+ }
+
+ private void acceptFriendRequest(int position) {
+ String senderUid = userList.get(position).getUid();
+
+ db.collection("friendRequests")
+ .whereEqualTo("senderUid", senderUid)
+ .whereEqualTo("receiverUid", currentUserUid)
+ .whereEqualTo("status", "pending")
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ DocumentReference requestRef = document.getReference();
+ requestRef.update("status", "accepted")
+ .addOnSuccessListener(aVoid -> {
+ Log.d("FriendRequest", "status=accepted로 업데이트 완료");
+ addSenderToMyFriendsCollection(senderUid, position);
+ })
+ .addOnFailureListener(e -> {
+ Log.e("FriendRequest", "Error accepting friend request", e);
+ });
+ }
+ } else {
+ Log.e("FriendRequest", "Error getting friend request document", task.getException());
+ }
+ });
+ }
+
+ private void addSenderToMyFriendsCollection(String senderUid, int position) {
+ db.collection("users")
+ .document(senderUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot userDoc = task.getResult();
+ if (userDoc.exists()) {
+ String senderName = userDoc.getString("name");
+ String senderId = userDoc.getString("id");
+ double senderReliabilitydouble = userDoc.getDouble("reliability");
+ float senderReliability = (float)senderReliabilitydouble;
+
+ Log.d("sender", senderName); // 문관록 잘 들어옴
+
+ User userFriend = new User(senderName, senderId, senderUid);
+
+ db.collection("users")
+ .document(currentUserUid)
+ .collection("friends")
+ .document(senderUid)
+ .set(userFriend)
+ .addOnSuccessListener(aVoid -> {
+ Log.d("FriendRequest", "내 friends 컬렉션에 상대방 정보 추가 성공");
+ addMyInfoToSenderFriendsCollection(senderUid, position);
+ })
+ .addOnFailureListener(e -> {
+ Log.d("FriendRequest", "friends 컬렉션에 정보 추가 실패");
+ });
+ }
+ }
+ });
}
+
+ private void addMyInfoToSenderFriendsCollection(String senderUId, int position) {
+ db.collection("users")
+ .document(currentUserUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot userDoc = task.getResult();
+ if (userDoc.exists()) {
+ String currentUserName = userDoc.getString("name");
+ String currentUserId = userDoc.getString("id");
+ double currentUserReliabilitydouble = userDoc.getDouble("reliability");
+ float currentUserReliability = (float)currentUserReliabilitydouble;
+
+ User userFriend = new User(currentUserName, currentUserId, currentUserUid);
+
+ db.collection("users")
+ .document(senderUId)
+ .collection("friends")
+ .document(currentUserUid)
+ .set(userFriend)
+ .addOnSuccessListener(aVoid -> {
+ Log.d("FriendRequest", "상대방 friends 컬렉션에 내 정보 추가 성공");
+ Toast.makeText(binding.getRoot().getContext(), "친구 요청을 수락했습니다." ,Toast.LENGTH_SHORT).show();
+ deleteFriendRequest(senderUId, position);
+ })
+ .addOnFailureListener(e -> {
+ Log.d("FriendRequest", "friends 컬렉션에 정보 추가 실패");
+ });
+ }
+ }
+ });
+ }
+
+ private void deleteFriendRequest(String senderUid, int position) {
+ db.collection("friendRequests")
+ .whereEqualTo("senderUid", senderUid)
+ .whereEqualTo("receiverUid", currentUserUid)
+ .whereEqualTo("status", "accepted")
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ document.getReference().delete()
+ .addOnSuccessListener(aVoid -> {
+ userList.remove(position);
+ notifyItemRemoved(position);
+ })
+ .addOnFailureListener(e -> Log.e("FriendRequest", "Error deleting friend request", e));
+ }
+ } else {
+ Log.e("FriendRequest", "Error getting friend request document", task.getException());
+ }
+ });
+ }
+
+ private void rejectFriendRequest(String senderUid, int position) {
+ db.collection("friendRequests")
+ .whereEqualTo("senderUid", senderUid)
+ .whereEqualTo("receiverUid", currentUserUid)
+ .whereEqualTo("status", "pending")
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ document.getReference().delete()
+ .addOnSuccessListener(aVoid -> {
+ Toast.makeText(binding.getRoot().getContext(), "요청을 거절했습니다.", Toast.LENGTH_SHORT).show();
+ userList.remove(position);
+ notifyItemRemoved(position);
+ })
+ .addOnFailureListener(e -> Log.e("FriendRequest", "Error deleting friend request", e));
+ }
+ } else {
+ Log.e("FriendRequest", "Error getting friend request document", task.getException());
+ }
+ });
+ }
+
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_list_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_list_adapter.java
index 1ccba3d..9e02ac7 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_list_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_list_adapter.java
@@ -1,5 +1,6 @@
package com.example.myapplication.adapter;
+import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -11,6 +12,7 @@
import com.example.myapplication.R;
import com.example.myapplication.databinding.ItemActivePromBinding;
import com.example.myapplication.databinding.ItemLateListBinding;
+import com.example.myapplication.databinding.ItemLateMemberBinding;
import com.example.myapplication.late_memory.late_list_click;
import com.example.myapplication.make_prom.received_promise_info;
@@ -27,9 +29,7 @@ public Late_list_adapter(List promiseList) {
@Override
public Late_list_adapter.LateListViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
ItemLateListBinding binding = ItemLateListBinding.inflate(LayoutInflater.from(
- parent.getContext()),
- parent,
- false);
+ parent.getContext()), parent, false);
return new Late_list_adapter.LateListViewHolder(binding);
}
@@ -46,25 +46,36 @@ public int getItemCount() {
public class LateListViewHolder extends RecyclerView.ViewHolder {
private ItemLateListBinding binding;
-
+ private ItemLateMemberBinding memberBinding;
private LateListViewHolder(ItemLateListBinding binding){
super(binding.getRoot());
this.binding = binding;
binding.lateProm.setOnClickListener(view -> {
int position = getAdapterPosition();
- //이 position으로 id 파악해서 자료 뽑을거임
Promise promise = promiseList.get(position);
- //처리해야하는 클릭이벤트.
+
+ String promiseDocumentUid = promise.getPromiseUid();
+
+ Bundle bundle = new Bundle();
+ bundle.putString("promiseUid", promiseDocumentUid);
+
FragmentManager fragmentManager = ((AppCompatActivity) view.getContext()).getSupportFragmentManager();
late_list_click late_list_click = new late_list_click();
+ late_list_click.setArguments(bundle); // 데이터 전달
+
fragmentManager.beginTransaction()
.add(R.id.frame_layout, late_list_click)
.addToBackStack(null)
.commit();
});
}
- private void bind(Promise text){binding.lateProm.setText(text.name);}
+ private void bind(Promise text){
+ binding.lateProm.setText(text.getPromiseName());
+// memberBinding.booleanLate.setText("t");
+// memberBinding.userLateTime.setText("시간");
+// memberBinding.userLateMinute.setText("분");
+ }
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_member_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_member_adapter.java
index a5f2939..9da486c 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_member_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Late_member_adapter.java
@@ -1,8 +1,10 @@
package com.example.myapplication.adapter;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
@@ -14,15 +16,82 @@
import com.example.myapplication.databinding.ItemLateMemberBinding;
import com.example.myapplication.late_memory.late_list_click;
import com.example.myapplication.make_prom.received_promise_info;
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import java.text.SimpleDateFormat;
+import java.util.ArrayList;
+import java.util.Date;
+import java.util.HashMap;
import java.util.List;
+import java.util.Locale;
+import java.util.Map;
public class Late_member_adapter extends RecyclerView.Adapter{
private List userList;
+ private Map userLateTimeMap;
+ private Map userBoolArriveMap;
- public Late_member_adapter(List userList) {
+ private Date promiseDate;
+ private String promiseUid;
+
+
+ public Late_member_adapter(List userList, String promiseUid) {
+ loadPromiseDate(promiseUid);
this.userList = userList;
+ this.promiseUid =promiseUid;
+ userLateTimeMap = new HashMap<>();
+ userBoolArriveMap = new HashMap<>();
+ loadUserArrivalStatus(promiseUid);
+
+ }
+
+ private void loadUserArrivalStatus(String promiseUid) {
+ FirebaseFirestore.getInstance()
+ .collection("promisesPractice")
+ .document(promiseUid)
+ .collection("friends")
+ .get()
+ .addOnSuccessListener(collectionSnapshot -> {
+ for (DocumentSnapshot document : collectionSnapshot.getDocuments()) {
+ String friendId = document.getString("friendId");
+ Boolean friendArrive = document.getBoolean("friendArrive");
+ Timestamp promiseTimestamp = document.getTimestamp("friendArriveTime");
+ Date date = promiseTimestamp.toDate();
+ Boolean checkBool = document.getBoolean("friendArrive");
+ userLateTimeMap.put(friendId, date);
+ userBoolArriveMap.put(friendId,checkBool );
+
+ }
+ notifyDataSetChanged();
+ })
+ .addOnFailureListener(e -> {
+ });
+ }
+
+ private void loadPromiseDate(String promiseUid) {
+ FirebaseFirestore.getInstance()
+ .collection("promisesPractice")
+ .document(promiseUid)
+ .get()
+ .addOnSuccessListener(documentSnapshot -> {
+ if (documentSnapshot.exists()) {
+ Log.d("latePromise","docuemet exist");
+ Timestamp promiseTimestamp = documentSnapshot.getTimestamp("promiseDate");
+ Log.d("latePromise",""+promiseTimestamp);
+ if (promiseTimestamp != null) {
+ this.promiseDate = promiseTimestamp.toDate();
+ Log.d("latePromise22",""+promiseDate);
+
+ } else {
+ }
+ } else {
+ }
+ })
+ .addOnFailureListener(e -> {
+ });
}
@Override
@@ -52,7 +121,44 @@ private LateMemberViewHolder(ItemLateMemberBinding binding){
super(binding.getRoot());
this.binding = binding;
}
- private void bind(User text){binding.userName.setText(text.name);}
+ private void bind(User text){
+ binding.userName.setText(text.name);
+ String userId = text.getId();
+ Date lateTime = userLateTimeMap.get(userId);
+ Boolean boolArrive = userBoolArriveMap.get(userId);
+ if (lateTime != null) {
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
+// binding.userLateTime.setText(dateFormat.format(lateTime));
+ Log.d("latePromise", lateTime+" "+promiseDate);
+ if (lateTime.after(promiseDate) && boolArrive) {
+ binding.booleanLate.setText("지각");
+ long diff = lateTime.getTime() - promiseDate.getTime();
+ long diffMinutes = diff / (60 * 1000);
+
+ binding.userLateMinute.setText(diffMinutes + "분 늦게 도착");
+ } else if(lateTime.after(promiseDate) && !boolArrive){
+ binding.booleanLate.setText("지각");
+ binding.userLateMinute.setText("30분 이상 지각!");
+
+ }
+ else {
+ binding.booleanLate.setText("제 시간에 도착");
+ binding.userLateMinute.setText( "제 시간에 도착");
+
+ }
+
+
+
+
+ }
+
+
+
+
+
+
+
+ }
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_activied_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_activied_adapter.java
index 75bbf58..6014004 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_activied_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_activied_adapter.java
@@ -1,22 +1,31 @@
package com.example.myapplication.adapter;
+import static android.app.PendingIntent.getActivity;
+
+import android.content.Context;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
import androidx.fragment.app.FragmentManager;
-import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
+import com.example.myapplication.chat.ChatActivity;
import com.example.myapplication.databinding.ItemActivePromBinding;
import com.example.myapplication.list_prom.active_and_time_in_promise_info;
-import com.example.myapplication.list_prom.active_promise_info;
+import com.example.myapplication.map.NaverMapRealNew;
import java.util.List;
public class Prom_activied_adapter extends RecyclerView.Adapter {
private List promiseList;
+ private ItemActivePromBinding binding;
+ private Context context;
public Prom_activied_adapter(List promiseList) {
this.promiseList = promiseList;
@@ -24,8 +33,8 @@ public Prom_activied_adapter(List promiseList) {
@Override
public PromiseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ItemActivePromBinding binding = ItemActivePromBinding.inflate(LayoutInflater.from(
- parent.getContext()),
+ binding = ItemActivePromBinding.inflate(LayoutInflater.from(
+ parent.getContext()),
parent,
false);
return new PromiseViewHolder(binding);
@@ -35,6 +44,39 @@ public PromiseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public void onBindViewHolder(PromiseViewHolder holder, int position) {
Promise name = promiseList.get(position);
holder.bind(name);
+
+ binding.activePromChatBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int position = holder.getBindingAdapterPosition();
+ if (position != RecyclerView.NO_POSITION) {
+ Intent intent = new Intent(v.getContext(), ChatActivity.class);
+
+ String chatRoomName = promiseList.get(position).getPromiseName();
+ intent.putExtra("chatRoomName", chatRoomName);
+
+ v.getContext().startActivity(intent);
+
+ }
+ }
+ });
+
+ binding.friendLocationBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int position = holder.getBindingAdapterPosition();
+ if (position != RecyclerView.NO_POSITION) {
+ Intent intent = new Intent(v.getContext(), NaverMapRealNew.class);
+
+ String promiseUid = promiseList.get(position).getPromiseUid();
+ intent.putExtra("promiseUid", promiseUid);
+
+ v.getContext().startActivity(intent);
+
+ }
+ }
+ });
+
}
@Override
@@ -50,12 +92,15 @@ private PromiseViewHolder(ItemActivePromBinding binding){
this.binding = binding;
binding.activeEditPromise.setOnClickListener(view -> {
- // 얘는 분기점을 통해서, active_and_time_in_promise_info 자료 중 하나가 떠오를 것.
int position = getAdapterPosition();
//이 position으로 id 파악해서 자료 뽑을거임
- Promise promise = promiseList.get(position);
- //종료할 수 있는 약속
+ String promiseUid = promiseList.get(position).getPromiseUid();
+ Log.d("promiceaccept", promiseUid);
+ Bundle bundle = new Bundle();
+ bundle.putString("promiseUid", promiseUid);//종료할 수 있는 약속
FragmentManager fragmentManager = ((AppCompatActivity) view.getContext()).getSupportFragmentManager();
+
+ fragmentManager.setFragmentResult("promiseUidBundle", bundle);
active_and_time_in_promise_info active_and_time_in_promise_info = new active_and_time_in_promise_info();
fragmentManager.beginTransaction()
.add(R.id.frame_layout, active_and_time_in_promise_info)
@@ -70,6 +115,6 @@ private PromiseViewHolder(ItemActivePromBinding binding){
// .commit();
});
}
- private void bind(Promise text){binding.promiseName.setText(text.name);}
+ private void bind(Promise text){binding.promiseName.setText(text.getPromiseName());}
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_completed_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_completed_adapter.java
index d1523df..cbe9572 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_completed_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_completed_adapter.java
@@ -1,6 +1,10 @@
package com.example.myapplication.adapter;
+import android.content.Intent;
+import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
@@ -8,8 +12,8 @@
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.R;
+import com.example.myapplication.chat.ChatActivity;
import com.example.myapplication.databinding.ItemCompletePromBinding;
-import com.example.myapplication.list_prom.active_promise_info;
import com.example.myapplication.list_prom.complete_promise_info;
import java.util.List;
@@ -34,6 +38,27 @@ public PromiseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
public void onBindViewHolder(PromiseViewHolder holder, int position) {
Promise name = promiseList.get(position);
holder.bind(name);
+
+ holder.binding.completePromChatBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int position = holder.getBindingAdapterPosition();
+ if (position != RecyclerView.NO_POSITION) {
+ // 현재 위치(position)를 사용할 수 있음
+ Intent intent = new Intent(v.getContext(), ChatActivity.class);
+
+ String chatRoomName = promiseList.get(position).getPromiseName();
+ intent.putExtra("chatRoomName", chatRoomName);
+
+ v.getContext().startActivity(intent);
+
+ }
+
+ }
+ });
+
+
+
}
@Override
@@ -51,16 +76,22 @@ private PromiseViewHolder(ItemCompletePromBinding binding){
binding.completeEditPromise.setOnClickListener(view -> {
int position = getAdapterPosition();
//이 position으로 id 파악해서 자료 뽑을거임
- Promise promise = promiseList.get(position);
- //처리해야하는 클릭이벤트.
+ String promiseUid = promiseList.get(position).getPromiseUid();
+ Log.d("promiceaccept", promiseUid);
+ Bundle bundle = new Bundle();
+ bundle.putString("promiseUid", promiseUid);//종료할 수 있는 약속
FragmentManager fragmentManager = ((AppCompatActivity) view.getContext()).getSupportFragmentManager();
+
+ //처리해야하는 클릭이벤트.
complete_promise_info complete_promise_info = new complete_promise_info();
+ complete_promise_info.setArguments(bundle);
fragmentManager.beginTransaction()
.add(R.id.frame_layout, complete_promise_info)
.addToBackStack(null)
.commit();
});
+
}
- private void bind(Promise text){binding.promiseName.setText(text.name);}
+ private void bind(Promise text){binding.promiseName.setText(text.getPromiseName());}
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_make_added_friend.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_make_added_friend.java
index fd34462..28d81b9 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_make_added_friend.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_make_added_friend.java
@@ -3,50 +3,70 @@
import android.view.LayoutInflater;
import android.view.ViewGroup;
+import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.example.myapplication.databinding.ItemFriendAddBinding;
import com.example.myapplication.databinding.ItemFriendBinding;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
import java.util.List;
public class Prom_make_added_friend extends RecyclerView.Adapter {
- private List userList;
+ private List uidList;
+ private FirebaseFirestore db;
- public Prom_make_added_friend(List userList) {
- this.userList = userList;
+ public Prom_make_added_friend(List uidList) {
+ this.uidList = uidList;
+ this.db = FirebaseFirestore.getInstance();
}
+
+ @NonNull
@Override
- public addedFriendViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ItemFriendBinding binding = ItemFriendBinding.inflate(LayoutInflater.from(
- parent.getContext()),
- parent,
- false);
+ public addedFriendViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
+ ItemFriendBinding binding = ItemFriendBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false);
return new addedFriendViewHolder(binding);
}
-
@Override
- public void onBindViewHolder(addedFriendViewHolder holder, int position) {
- User name = userList.get(position);
- holder.bind(name);
+ public void onBindViewHolder(@NonNull addedFriendViewHolder holder, int position) {
+ String uid = uidList.get(position);
+ getUserDetails(uid, holder);
}
@Override
public int getItemCount() {
- return userList.size();
+ return uidList.size();
}
- public class addedFriendViewHolder extends RecyclerView.ViewHolder {
- private ItemFriendBinding binding;
+ public static class addedFriendViewHolder extends RecyclerView.ViewHolder {
+ private final ItemFriendBinding binding;
- private addedFriendViewHolder(ItemFriendBinding binding){
+ public addedFriendViewHolder(ItemFriendBinding binding) {
super(binding.getRoot());
this.binding = binding;
}
- private void bind(User text){
- binding.userName.setText(text.name);
- binding.userId.setText(text.id);}
+
+ public void bind(String name, String id) {
+ binding.userName.setText(name);
+ binding.userId.setText(id);
+ }
+ }
+
+ private void getUserDetails(String uid, addedFriendViewHolder holder) {
+ db.collection("users").document(uid).get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ String name = document.getString("name");
+ String id = document.getString("id");
+
+ holder.bind(name, id);
+ }
+ }
+ });
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_received_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_received_adapter.java
index 2e8641f..37c3de4 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_received_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_received_adapter.java
@@ -64,7 +64,7 @@ private ReceivedPromViewHolder(ItemPromiseRequestBinding binding){
.commit();
});
}
- private void bind(Promise text){binding.promiseName.setText(text.name);}
+ private void bind(Promise text){binding.promiseName.setText(text.getPromiseName());}
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_waiting_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_waiting_adapter.java
index 67d020d..5d1b47d 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_waiting_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Prom_waiting_adapter.java
@@ -1,6 +1,9 @@
package com.example.myapplication.adapter;
+import android.os.Bundle;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.View;
import android.view.ViewGroup;
import androidx.appcompat.app.AppCompatActivity;
@@ -12,14 +15,32 @@
import com.example.myapplication.databinding.ItemWaitingPromBinding;
import com.example.myapplication.list_prom.complete_promise_info;
import com.example.myapplication.list_prom.waiting_promise_info;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import java.util.Collection;
import java.util.List;
+import java.util.Objects;
+
public class Prom_waiting_adapter extends RecyclerView.Adapter {
private List promiseList;
+ FirebaseFirestore db;
+ String myUid;
public Prom_waiting_adapter(List promiseList) {
this.promiseList = promiseList;
+
+ db = FirebaseFirestore.getInstance();
+ FirebaseAuth mAuth = FirebaseAuth.getInstance();
+ FirebaseUser currentUser = mAuth.getCurrentUser();
+ myUid = currentUser.getUid();
+
}
@Override
@@ -34,7 +55,31 @@ public PromiseViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
@Override
public void onBindViewHolder(PromiseViewHolder holder, int position) {
Promise name = promiseList.get(position);
+ String promiseUid = promiseList.get(position).getPromiseUid();
holder.bind(name);
+
+
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ CollectionReference docRef = db.collection("promisesPractice").document(promiseUid).collection("friends");
+ docRef.whereEqualTo("friendUid", myUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ boolean friendAccept = document.getBoolean("friendAccept");
+ // friendAccept 필드가 true인 경우
+ if (friendAccept) {
+ holder.binding.acceptWaitingButton.setEnabled(false);
+ holder.binding.acceptWaitingButton.setText("수락완료");
+ }
+ else{
+
+ }
+ }
+ } else {
+ Log.e("Firestore", "Error getting friend documents", task.getException());
+ }
+ });
}
@Override
@@ -49,19 +94,85 @@ private PromiseViewHolder(ItemWaitingPromBinding binding){
super(binding.getRoot());
this.binding = binding;
+ binding.acceptWaitingButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ int position = getAdapterPosition();
+ //이 position으로 id 파악해서 자료 뽑을거임
+ String promiseUid = promiseList.get(position).getPromiseUid();
+ DocumentReference docRef = db.collection("promisesPractice").document(promiseUid);
+ CollectionReference friendsCollectionRef = docRef.collection("friends");
+
+
+ friendsCollectionRef.whereEqualTo("friendUid", myUid).get().addOnCompleteListener(task2 -> {
+ if (task2.isSuccessful()) {
+ for (QueryDocumentSnapshot friendDocument : task2.getResult()) {
+ friendsCollectionRef.document(friendDocument.getId()).update("friendAccept", true)
+ .addOnSuccessListener(aVoid -> {
+ Log.d("Firestore", "Friend accept updated successfully");
+ })
+ .addOnFailureListener(e -> {
+ Log.e("Firestore", "Error updating friend accept", e);
+ });
+ }
+ } else {
+ Log.e("Firestore", "Error getting friend documents", task2.getException());
+ }
+ });
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ int currentAcceptCount = document.getLong("promiseAcceptPeople") != null ?
+ Objects.requireNonNull(document.getLong("promiseAcceptPeople")).intValue() : 0;
+
+ int updatedAcceptCount = currentAcceptCount + 1;
+
+ docRef.update("promiseAcceptPeople", updatedAcceptCount)
+ .addOnSuccessListener(aVoid -> {
+ Log.d("Firestore", "Document updated successfully");
+
+ binding.acceptWaitingButton.setEnabled(false);
+ binding.acceptWaitingButton.setText("수락완료");
+ })
+ .addOnFailureListener(e -> {
+ Log.e("Firestore", "Error updating document", e);
+ });
+ } else {
+ Log.d("Firestore", "Document does not exist");
+ }
+ } else {
+ Log.e("Firestore", "Error getting document", task.getException());
+ }
+ });
+
+
+ }
+ });
+
+
+
binding.waitingEditPromise.setOnClickListener(view -> {
int position = getAdapterPosition();
//이 position으로 id 파악해서 자료 뽑을거임
- Promise promise = promiseList.get(position);
- //처리해야하는 클릭이벤트.
+ String promiseUid = promiseList.get(position).getPromiseUid();
+ Log.d("promiceaccept", promiseUid);
+ Bundle bundle = new Bundle();
+ bundle.putString("promiseUid", promiseUid);
FragmentManager fragmentManager = ((AppCompatActivity) view.getContext()).getSupportFragmentManager();
+
+
waiting_promise_info waiting_promise_info = new waiting_promise_info();
+ waiting_promise_info.setArguments(bundle);
+
+
fragmentManager.beginTransaction()
.add(R.id.frame_layout, waiting_promise_info)
.addToBackStack(null)
.commit();
});
}
- private void bind(Promise text){binding.promiseName.setText(text.name);}
+ private void bind(Promise text){binding.promiseName.setText(text.getPromiseName());}
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Promise.java
index 4961a23..bd2b1d4 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/Promise.java
@@ -1,16 +1,78 @@
package com.example.myapplication.adapter;
import java.sql.Time;
+import java.sql.Timestamp;
+import java.util.Date;
import java.util.List;
public class Promise {
- String name;
- Time time;
- List list;
- public Promise(String name){
- this.name = name;
+ private Date promiseDate;
+ private double promiseLatitude;
+ private double promiseLongitude;
+ private String promiseName;
+ private String promiseUid;
+
+ public Promise(String promiseName, String promiseUid){
+ this.promiseUid = promiseUid;
+ this.promiseName = promiseName;
+ }
+
+ public Promise(Date promiseDate, double promiseLatitude, double promiseLongitude, String promiseName, String promiseUid) {
+ this.promiseDate = promiseDate;
+ this.promiseLatitude = promiseLatitude;
+ this.promiseLongitude = promiseLongitude;
+ this.promiseName = promiseName;
+ this.promiseUid = promiseUid;
+ }
+
+ public Date getPromiseDate() {
+ return promiseDate;
+ }
+
+ public void setPromiseDate(Date promiseDate) {
+ this.promiseDate = promiseDate;
+ }
+
+ public double getPromiseLatitude() {
+ return promiseLatitude;
}
+ public void setPromiseLatitude(double promiseLatitude) {
+ this.promiseLatitude = promiseLatitude;
+ }
+
+ public double getPromiseLongitude() {
+ return promiseLongitude;
+ }
+
+ public void setPromiseLongitude(double promiseLongitude) {
+ this.promiseLongitude = promiseLongitude;
+ }
+
+ public String getPromiseName() {
+ return promiseName;
+ }
+
+ public void setPromiseName(String promiseName) {
+ this.promiseName = promiseName;
+ }
+ public String getPromiseUid() {
+ return promiseUid;
+ }
+
+ public void setPromiseUid(String promiseUid) {
+ this.promiseUid = promiseUid;
+ }
+
+ @Override
+ public String toString() {
+ return "Promise{" +
+ "promiseDate=" + promiseDate +
+ ", promiseLatitude=" + promiseLatitude +
+ ", promiseLongitude=" + promiseLongitude +
+ ", promiseName='" + promiseName + '\'' +
+ '}';
+ }
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/User.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/User.java
index 7a0e501..8a1e6b8 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/User.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/User.java
@@ -5,15 +5,17 @@
public class User {
String name;
String id;
+ String uid;
List friends;
List promises;
float reliability;
- public User(String name, String id, float reliability){
+ public User(String name, String id, float reliability, String uid){
this.name = name;
this.id = id;
this.reliability = reliability;
+ this.uid = uid;
}
public User(String name, String id, float reliability, List friends, List promises){
this.name = name;
@@ -22,11 +24,13 @@ public User(String name, String id, float reliability, List friends, List<
this.friends = friends;
this.promises = promises;
}
- public User(String name, String id){
+ public User(String name, String id, String uid){
this.name = name;
this.id = id;
+ this.uid = uid;
}
+
public String getName() {
return name;
}
@@ -35,6 +39,10 @@ public String getId() {
return id;
}
+ public String getUid() {
+ return uid;
+ }
+
public float getReliability(){ return reliability; }
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/friend_request_adapter.java b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/friend_request_adapter.java
index 701f532..af3c7ff 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/adapter/friend_request_adapter.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/adapter/friend_request_adapter.java
@@ -1,6 +1,8 @@
package com.example.myapplication.adapter;
+import android.annotation.SuppressLint;
import android.content.Context;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -15,20 +17,29 @@
import com.example.myapplication.databinding.ItemFriendBinding;
import com.example.myapplication.databinding.ItemFriendRequestBinding;
import com.example.myapplication.make_prom.received_promise_info;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
import java.util.ArrayList;
import java.util.List;
+
public class friend_request_adapter extends RecyclerView.Adapter {
private List userList;
+ private ItemFriendBinding binding;
+
public friend_request_adapter(List userList) {
this.userList = userList;
}
+ FirebaseFirestore db;
+
@Override
public friendRequestViewHolder onCreateViewHolder(ViewGroup parent, int viewType) {
- ItemFriendBinding binding = ItemFriendBinding.inflate(LayoutInflater.from(
+ binding = ItemFriendBinding.inflate(LayoutInflater.from(
parent.getContext()),
parent,
false);
@@ -37,39 +48,120 @@ public friendRequestViewHolder onCreateViewHolder(ViewGroup parent, int viewType
@Override
- public void onBindViewHolder(friendRequestViewHolder holder, int position) {
+ public void onBindViewHolder(friendRequestViewHolder holder, @SuppressLint("RecyclerView") int position) {
User name = userList.get(position);
holder.bind(name);
+
+ binding.userInfo.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ db = FirebaseFirestore.getInstance();
+ FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
+ if (currentUser != null) {
+ String senderUid = currentUser.getUid();
+ String receiverUid = userList.get(position).getUid();
+ checkIfFriendsEachOther(senderUid, receiverUid, position);
+ }
+ }
+ });
+
+ }
+
+ // 상대방에게서 이미 요청이 와있는 상태인지 확인
+ private void checkIfFriendRequestAlreadyArrived(String senderUid, String receiverUid, int position) {
+ db.collection("friendRequests")
+ .whereEqualTo("senderUid", receiverUid)
+ .whereEqualTo("receiverUid", senderUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ if (!task.getResult().isEmpty()) {
+ Toast.makeText(binding.getRoot().getContext(), userList.get(position).getName() + "님에게 친구 요청이 와있습니다.", Toast.LENGTH_LONG).show();
+ Log.d("FriendRequest", "이미 친구 요청을 받음");
+ } else {
+ checkIfFriendRequestExists(senderUid, receiverUid, position);
+ }
+ } else {
+ Toast.makeText(binding.getRoot().getContext(), "친구 요청을 확인하는 도중 오류가 발생했습니다.", Toast.LENGTH_SHORT).show();
+ }
+ });
+ }
+ // 친구 요청을 보내는 메서드
+ private void sendFriendRequest(String senderUid, String receiverUid, int position) {
+ FriendRequest friendRequest = new FriendRequest(senderUid, receiverUid, "pending");
+ db.collection("friendRequests")
+ .add(friendRequest)
+ .addOnSuccessListener(documentReference -> {
+ Toast.makeText(binding.getRoot().getContext(), userList.get(position).getName() + "님에게 친구 요청을 보냈습니다.", Toast.LENGTH_LONG).show();
+ })
+ .addOnFailureListener(e -> {
+ Toast.makeText(binding.getRoot().getContext(), "친구 요청 보내기를 실패했습니다.", Toast.LENGTH_SHORT).show();
+ });
+ }
+ // 내가 이미 보낸 요청인지 확인하는 코드
+ private void checkIfFriendRequestExists(String senderUid, String receiverUid, int position) {
+ db.collection("friendRequests")
+ .whereEqualTo("senderUid", senderUid)
+ .whereEqualTo("receiverUid", receiverUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ if (!task.getResult().isEmpty()) {
+ Toast.makeText(binding.getRoot().getContext(), "이미 친구 요청을 보냈습니다.", Toast.LENGTH_LONG).show();
+ Log.d("FriendRequest", "이미 친구 요청을 보냄");
+ } else {
+ sendFriendRequest(senderUid, receiverUid, position);
+ }
+ } else {
+ Toast.makeText(binding.getRoot().getContext(), "친구 요청을 확인하는 도중 오류가 발생했습니다.", Toast.LENGTH_SHORT).show();
+ }
+ });
}
+
+ // senderUid가 나, receiverUid가 상대방
+ private void checkIfFriendsEachOther(String senderUid, String receiverUid, int position) {
+ Log.d("CheckFriends", senderUid);
+ db.collection("users")
+ .document(senderUid)
+ .collection("friends")
+ .whereEqualTo("uid", receiverUid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful() && !task.getResult().isEmpty()) {
+ Log.d("FriendRequest", "이미 친구입니다.");
+ Toast.makeText(binding.getRoot().getContext(), "이미 친구입니다.", Toast.LENGTH_LONG).show();
+ } else {
+ Log.d("FriendRequest", "친구가 아닙니다.");
+ checkIfFriendRequestAlreadyArrived(senderUid, receiverUid, position);
+ }
+ });
+
+ }
+
+
@Override
public int getItemCount() {
return userList.size();
}
- public void filterList(ArrayList filteredList){
+ public void filterList(ArrayList filteredList) {
userList = filteredList;
notifyDataSetChanged();
}
+
public class friendRequestViewHolder extends RecyclerView.ViewHolder {
private ItemFriendBinding binding;
- private friendRequestViewHolder(ItemFriendBinding binding){
+ private friendRequestViewHolder(ItemFriendBinding binding) {
super(binding.getRoot());
this.binding = binding;
- binding.userInfo.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View view) {
- // 띄워진 리싸이클러뷰 item이다.
- // 클릭을 통해서, added_friend 즉, 함꼐할 친구 목록에 넣어준다.
- // 만약, 이미 담긴 파티원이라면, 토스트문구와 함께 담기지 않게 된다.
- Toast.makeText(view.getContext(), "추가", Toast.LENGTH_LONG).show();
- }
- });
}
- private void bind(User text){
+
+ private void bind(User text) {
binding.userName.setText(text.name);
- binding.userId.setText(text.id);}
+ binding.userId.setText(text.id);
+ }
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/chat/Chat.java b/TeamProjects/app/src/main/java/com/example/myapplication/chat/Chat.java
new file mode 100644
index 0000000..930ddfd
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/chat/Chat.java
@@ -0,0 +1,54 @@
+package com.example.myapplication.chat;
+
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.ServerTimestamp;
+
+public class Chat {
+ private String senderName;
+ private String sendMessage;
+ private String userId;
+
+ @ServerTimestamp
+ private Timestamp timestamp;
+
+ public Chat() { }
+
+ public Chat(String name, String message, String uid) {
+ senderName = name;
+ sendMessage = message;
+ userId = uid;
+ }
+
+ public String getSenderName() {
+ return senderName;
+ }
+
+ public void setSenderName(String senderName) {
+ this.senderName = senderName;
+ }
+
+ public String getSendMessage() {
+ return sendMessage;
+ }
+
+ public void setSendMessage(String sendMessage) {
+ this.sendMessage = sendMessage;
+ }
+
+ public String getUserId() {
+ return userId;
+ }
+
+ public void setUserId(String userId) {
+ this.userId = userId;
+ }
+
+ @ServerTimestamp
+ public Timestamp getTimestamp() {
+ return timestamp;
+ }
+
+ public void setTimestamp(Timestamp timestamp) {
+ this.timestamp = timestamp;
+ }
+}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatActivity.java b/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatActivity.java
new file mode 100644
index 0000000..924f15a
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatActivity.java
@@ -0,0 +1,181 @@
+package com.example.myapplication.chat;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.AppCompatButton;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
+
+import android.os.Bundle;
+import android.util.Log;
+import android.view.LayoutInflater;
+import android.view.View;
+import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+import android.widget.TextView;
+
+import com.example.myapplication.R;
+import com.firebase.ui.firestore.FirestoreRecyclerAdapter;
+import com.firebase.ui.firestore.FirestoreRecyclerOptions;
+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.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.Query;
+
+import java.util.HashMap;
+import java.util.Map;
+
+public class ChatActivity extends AppCompatActivity {
+
+ private FirestoreRecyclerAdapter adapter;
+ TextView chatRoomNameTextView;
+ String chatRoomName;
+ ImageButton backBtn;
+
+ // 뷰 타입에 따라서 내 화면일 때 0, 다른 사람일 때 1
+ private static final int VIEW_TYPE_MY_MESSAGE = 0;
+ private static final int VIEW_TYPE_OTHER_MESSAGE = 1;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_chat);
+
+ chatRoomNameTextView = findViewById(R.id.chatRoomName);
+ chatRoomName = getIntent().getStringExtra("chatRoomName");
+ setChatRoomName(chatRoomName);
+
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ Query query = FirebaseFirestore.getInstance()
+ .collection("ChatRooms")
+ .document(chatRoomName)
+ .collection("Message")
+ .orderBy("timestamp")
+ .limit(50);
+
+ FirestoreRecyclerOptions options = new FirestoreRecyclerOptions.Builder()
+ .setQuery(query, Chat.class)
+ .build();
+
+ adapter = new FirestoreRecyclerAdapter(options) {
+
+ @Override
+ protected void onBindViewHolder(ChatHolder holder, int position, Chat model) {
+ holder.bind(model);
+ }
+
+ @Override
+ public ChatHolder onCreateViewHolder(ViewGroup parent, int viewType) {
+ if (viewType == VIEW_TYPE_OTHER_MESSAGE) {
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.other_message, parent, false);
+ return new ChatHolder(view);
+ }
+ View view = LayoutInflater.from(parent.getContext())
+ .inflate(R.layout.my_message, parent, false);
+ return new ChatHolder(view);
+ }
+
+ @Override
+ public int getItemViewType(int position) {
+ Chat chat = getItem(position);
+ String currentUserUid = FirebaseAuth.getInstance().getCurrentUser().getUid();
+ String messageUid = chat.getUserId();
+ if (currentUserUid.equals(messageUid)) {
+ return VIEW_TYPE_MY_MESSAGE;
+ } else {
+ return VIEW_TYPE_OTHER_MESSAGE;
+ }
+ }
+ };
+
+ RecyclerView recyclerView = findViewById(R.id.recycler_view);
+ recyclerView.setLayoutManager(new LinearLayoutManager(ChatActivity.this));
+ recyclerView.setAdapter(adapter);
+ EditText messageText = findViewById(R.id.editMessage);
+ Button sendBtn = findViewById(R.id.sendBtn);
+
+ sendBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ String message = messageText.getText().toString();
+ FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
+
+ if (!message.isEmpty()) {
+ if (currentUser != null) {
+ String senderUid = currentUser.getUid();
+ db.collection("users")
+ .document(senderUid)
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ DocumentSnapshot documentSnapshot = task.getResult();
+ if (documentSnapshot != null) {
+ String senderName = documentSnapshot.getString("name");
+
+ Chat chatItem = new Chat(senderName, message, senderUid);
+
+ db.collection("ChatRooms").document(chatRoomName).collection("Message")
+ .document("MSG_" + System.currentTimeMillis())
+ .set(chatItem)
+ .addOnSuccessListener(documentReference -> {
+ Log.d("LJM", "DocumentSnapshot added");
+ })
+ .addOnFailureListener(e -> {
+ Log.w("LJM", "Error adding document", e);
+ });
+
+ messageText.setText(""); // 채팅 보내고 내서 EditText 초기화
+ }
+ } else {
+ Log.d("LJM", "No such document");
+ }
+ }
+ });
+ }
+ }
+ }
+ });
+
+
+ backBtn = findViewById(R.id.chat_back_btn);
+ backBtn.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ goBack();
+ }
+ });
+ }
+
+ private void goBack() {
+ getSupportFragmentManager().popBackStack();
+ finish();
+ }
+
+ private void setChatRoomName(String newName) {
+ if (newName != null) {
+ chatRoomNameTextView.setText(newName);
+ }
+ }
+
+ @Override
+ protected void onStart() {
+ super.onStart();
+ adapter.startListening();
+ }
+
+ @Override
+ protected void onStop() {
+ super.onStop();
+ adapter.stopListening();
+ }
+}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatHolder.java b/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatHolder.java
new file mode 100644
index 0000000..b466fba
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/chat/ChatHolder.java
@@ -0,0 +1,53 @@
+package com.example.myapplication.chat;
+
+import android.view.View;
+import android.widget.TextView;
+
+import androidx.annotation.NonNull;
+import androidx.annotation.Nullable;
+import androidx.recyclerview.widget.RecyclerView;
+
+import com.example.myapplication.R;
+import com.google.firebase.Timestamp;
+
+import java.text.SimpleDateFormat;
+import java.util.Date;
+import java.util.Locale;
+import java.util.TimeZone;
+
+public class ChatHolder extends RecyclerView.ViewHolder {
+
+ private final TextView mNameField;
+ private final TextView mTextField;
+ private final TextView mTimeField;
+
+ public ChatHolder(@NonNull View itemView) {
+ super(itemView);
+ mNameField = itemView.findViewById(R.id.chatName);
+ mTextField = itemView.findViewById(R.id.content);
+ mTimeField = itemView.findViewById(R.id.chatTime);
+ }
+
+ public void bind(@NonNull Chat chat) {
+ setName(chat.getSenderName());
+ setMessage(chat.getSendMessage());
+ setTime(chat.getTimestamp());
+ }
+
+ private void setName(@Nullable String name) { mNameField.setText(name); }
+
+ private void setMessage(@Nullable String text) { mTextField.setText(text); }
+
+ private void setTime(@Nullable Timestamp time) {
+ if (time != null) {
+ Date date = time.toDate();
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("HH:mm", Locale.getDefault());
+ dateFormat.setTimeZone(TimeZone.getTimeZone("Asia/Seoul"));
+
+ String formattedTime = dateFormat.format(date);
+
+ mTimeField.setText(formattedTime);
+ }
+ }
+}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_list_click_fragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_list_click_fragment.java
index 0d560eb..96036ae 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_list_click_fragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_list_click_fragment.java
@@ -8,6 +8,7 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -15,11 +16,20 @@
import com.example.myapplication.R;
import com.example.myapplication.adapter.Friend_list_adapter;
import com.example.myapplication.adapter.User;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
public class friend_list_click_fragment extends Fragment {
+ private FirebaseFirestore db;
+ private String currentUserId;
+ private Friend_list_adapter adapter;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_friend_list_click, container, false);
@@ -29,31 +39,57 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+
+ db = FirebaseFirestore.getInstance();
+ currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
+
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_friend_list);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Friend_list_adapter adapter = new Friend_list_adapter(dataList);
+ List dataList = generateData();
+ adapter = new Friend_list_adapter(dataList);
recyclerView.setAdapter(adapter);
}
+
private List generateData() {
List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- // ...
+ getFriendInfo(dataList);
+
return dataList;
}
+
+ private void getFriendInfo(List dataList) {
+ db.collection("users")
+ .document(currentUserId)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document: task.getResult()) {
+ String friendName = document.getString("name");
+ String friendId = document.getString("id");
+ String friendUid = document.getString("uid");
+
+ User user = new User(friendName, friendId, friendUid);
+
+ Log.d("FriendList", "친구 정보 추가");
+ dataList.add(user);
+ adapter.notifyDataSetChanged();
+
+ }
+ } else {
+ Log.d("FriendList", "친구 정보를 불러오기에 실패했습니다.");
+ }
+ }
+ });
+ }
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_received_fragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_received_fragment.java
index 1933c05..f62d21a 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_received_fragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_received_fragment.java
@@ -8,6 +8,7 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,12 +17,21 @@
import com.example.myapplication.adapter.Friend_received_adapter;
import com.example.myapplication.adapter.Prom_make_added_friend;
import com.example.myapplication.adapter.User;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
import java.util.ArrayList;
import java.util.List;
+import java.util.Objects;
public class friend_received_fragment extends Fragment {
+ private FirebaseFirestore db;
+ private FirebaseAuth mAuth;
+ private Friend_received_adapter adapter;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_friend_received_fragment, container, false);
@@ -31,33 +41,77 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 프래그먼트 2의 종료 이벤트 처리
+ db = FirebaseFirestore.getInstance();
+ mAuth = FirebaseAuth.getInstance();
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_received_friend);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Friend_received_adapter adapter = new Friend_received_adapter(dataList);
+ List dataList = generateData();
+
+ adapter = new Friend_received_adapter(dataList);
+
recyclerView.setAdapter(adapter);
+
}
private List generateData() {
List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- // ...
+ getSenderUid(dataList);
return dataList;
}
+ private void getSenderUid(List dataList) {
+ db.collection("friendRequests")
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ String senderUid = document.getString("senderUid");
+ String receiverUid = document.getString("receiverUid");
+ String pending = document.getString("status");
+
+ db.collection("users")
+ .document(senderUid)
+ .get()
+ .addOnCompleteListener(task2 -> {
+ if (task2.isSuccessful()) {
+ DocumentSnapshot document2 = task2.getResult();
+ if (document2.exists()) {
+ if (Objects.equals(receiverUid, mAuth.getUid())) {
+
+
+ String userName = document2.getString("name");
+ String userId = document2.getString("id");
+ String userUid = document2.getString("uid");
+
+ User user = new User(
+ userName,
+ userId,
+ userUid
+ );
+
+ Log.d("MGR", userName + userId);
+ dataList.add(user);
+ adapter.notifyDataSetChanged();
+ ;
+ }
+
+ } else {
+ Log.d("LJM", "문서가 존재하지 않음");
+ }
+ } else {
+ Log.d("LJM", "작업 실패");
+ }
+ });
+
+ }
+ }
+ });
+ }
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_requested_fragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_requested_fragment.java
index 3746e2e..b9ad3e2 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_requested_fragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/friend_list/friend_requested_fragment.java
@@ -10,16 +10,27 @@
import android.text.Editable;
import android.text.TextWatcher;
+import android.util.Log;
import android.view.LayoutInflater;
+import android.view.MotionEvent;
import android.view.View;
import android.view.ViewGroup;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Adding_friend_adapter;
+import com.example.myapplication.adapter.Friend_received_adapter;
import com.example.myapplication.adapter.User;
import com.example.myapplication.adapter.friend_request_adapter;
import com.example.myapplication.databinding.FragmentAddingFriendBinding;
import com.example.myapplication.databinding.FragmentFriendRequestedFragmentBinding;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
@@ -27,8 +38,10 @@
public class friend_requested_fragment extends Fragment {
private FragmentFriendRequestedFragmentBinding binding;
- private List dataList;
+ private List userList;
private friend_request_adapter adapter;
+ private float initY;
+ private Friend_received_adapter friendReceivedAdapter = null;
@Override
@@ -42,44 +55,102 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recyclerView_adding_friend);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- dataList = generateData(); // 데이터 생성
- adapter = new friend_request_adapter(dataList);
- recyclerView.setAdapter(adapter);
+// dataList = generateData(); // 데이터 생성
+ userList = new ArrayList<>();
+ fetchAllUsers();
+ adapter = new friend_request_adapter(userList);
+ recyclerView.setAdapter(adapter);
+ binding.recyclerViewAddingFriend.addOnItemTouchListener(new RecyclerView.OnItemTouchListener() {
+ @Override
+ public boolean onInterceptTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {
+ if (e.getAction() == MotionEvent.ACTION_DOWN) {
+ initY = e.getRawY();
+ } else if (e.getAction() == MotionEvent.ACTION_UP) {
+ float diff = initY - e.getRawY();
+ if (diff <= 5 && diff >= -5) {
+ View selectView = rv.findChildViewUnder(e.getX(), e.getY());
+ int viewPosition = rv.getChildLayoutPosition(selectView);
+// userList.get(viewPosition) -> 클릭한 놈의 정보
+
+ }
+ }
+ return false;
+ }
+ @Override
+ public void onTouchEvent(@NonNull RecyclerView rv, @NonNull MotionEvent e) {}
+ @Override
+ public void onRequestDisallowInterceptTouchEvent(boolean disallowIntercept) {}
+ });
wordInput();
-
- // 프래그먼트 2의 종료 이벤트 처리
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
}
- private List generateData() {
- dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("문관록","gr1004"));
- dataList.add(new User("이종민","ljm0000"));
- dataList.add(new User("김김김","0107"));
- dataList.add(new User("육육육","0531"));
- dataList.add(new User("민민민","0202"));
- // ...
- return dataList;
+// private List generateData() {
+// dataList = new ArrayList<>();
+// dataList.add(new User("이우혁", "7dngur7"));
+// dataList.add(new User("문관록","gr1004"));
+// dataList.add(new User("이종민","ljm0000"));
+// dataList.add(new User("김김김","0107"));
+// dataList.add(new User("육육육","0531"));
+// dataList.add(new User("민민민","0202"));
+// // ...
+// return dataList;
+// }
+
+
+ // 나 빼고 친구 목록 모두 나타내야함
+
+ private void fetchAllUsers() {
+ FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
+ if (currentUser != null) {
+ String currentUserId = currentUser.getUid();
+ FirebaseFirestore.getInstance().collection("users")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+
+ userList.clear();
+
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ String name = document.getString("name");
+ String id = document.getString("id");
+ String uid = document.getString("uid");
+
+ // User 객체 생성
+ if (!uid.equals(currentUserId)) {
+ // User object creation
+ User user = new User(name, id, uid);
+ userList.add(user);
+ }
+
+ Log.d("FirestoreDebug", "User ID: " + id);
+ }
+ adapter.notifyDataSetChanged();
+ }
+ }
+ });
+ }
+ }
+
+ public void setFriendReceivedAdapter(Friend_received_adapter friendReceivedAdapter) {
+ this.friendReceivedAdapter = friendReceivedAdapter;
}
- private void wordInput(){
+ private void wordInput() {
binding.edtInput.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
@@ -97,11 +168,12 @@ public void afterTextChanged(Editable editable) {
}
});
}
- private void filter(String text){
+
+ private void filter(String text) {
List filteredList = new ArrayList<>();
- for(User item : dataList){
- if(item.getId().toLowerCase().contains(text.toLowerCase())){
+ for (User item : userList) {
+ if (item.getName().toLowerCase().contains(text.toLowerCase())) {
filteredList.add(item);
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FirstFragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FirstFragment.java
index 2faace7..f3bbb2d 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FirstFragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FirstFragment.java
@@ -54,7 +54,6 @@ public void onComplete(@NonNull Task task) {
binding.userIdFirst.setText(userId);
binding.userNameFirst.setText(userName);
} else {
- // 작업 실패
}
}
});
@@ -70,10 +69,8 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
public void onClick(View view) {
Log.d("MGR", "log out");
FirebaseAuth.getInstance().signOut();
- // 액티비티 간에 이동을 위한 Intent 생성
Intent intent = new Intent(requireContext(), log_in.class);
- // 백스택에 쌓인 다른 액티비티들을 모두 제거하고 로그인 액티비티를 시작
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK);
startActivity(intent);
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FriendListFragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FriendListFragment.java
index 66fb53b..e16de78 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FriendListFragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/FriendListFragment.java
@@ -66,7 +66,6 @@ public void onClick(View v) {
});
- // 받은 요청 목록 버튼
AppCompatButton received_list_button = view.findViewById(R.id.received_list);
received_list_button.setOnClickListener(new View.OnClickListener() {
@Override
@@ -81,7 +80,6 @@ public void onClick(View v) {
}
});
- // 받은 요청 목록 버튼
AppCompatButton request_list_button = view.findViewById(R.id.request_list);
request_list_button.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/LateMemoryFragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/LateMemoryFragment.java
index d168fc7..3e43b79 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/LateMemoryFragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/LateMemoryFragment.java
@@ -18,12 +18,28 @@
import com.example.myapplication.adapter.Late_list_adapter;
import com.example.myapplication.adapter.Prom_activied_adapter;
import com.example.myapplication.adapter.Promise;
+import com.example.myapplication.list_prom.activied_promise;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
public class LateMemoryFragment extends Fragment {
+ private FirebaseFirestore db;
+ private String myUid;
+ private AtomicInteger activePromisesCount = new AtomicInteger(0);
+ private int promisesCount = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_late_memory, container, false);
@@ -34,8 +50,56 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+ db = FirebaseFirestore.getInstance();
+ RecyclerView recyclerView = view.findViewById(R.id.recycler_view_late_list);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
+ myUid = user.getUid();
+
+ db.collection("users")
+ .document(myUid)
+ .collection("promises")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ promisesCount = task.getResult().size();
+ List dataList = new ArrayList<>();
+
+ for (QueryDocumentSnapshot document : task.getResult()) {
+
+ String promiseDocumentUid = document.getString("promiseDocument");
+ String promiseName = document.getString("promiseName");
+
+ checkLate(promiseDocumentUid, new activied_promise.CompletionCallback() {
+ @Override
+ public void onComplete(boolean result) {
+ if (result) {
+ dataList.add(new Promise(promiseName, promiseDocumentUid));
+ }
+
+ int count = activePromisesCount.incrementAndGet();
+ // 모든 비동기 호출이 완료되면 어댑터 설정
+ if (count == promisesCount) {
+ Late_list_adapter adapter = new Late_list_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ }
+ }
+ });
+ }
+
+ // 어댑터와 데이터 연결
+ Late_list_adapter adapter = new Late_list_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ } else {
+ // 에러 처리
+ }
+ }
+ });
ImageButton cancel_button = view.findViewById(R.id.cancelButton);
+
cancel_button.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
@@ -50,26 +114,69 @@ public void onClick(View v) {
}
});
- // 리사이클러뷰 설정
- RecyclerView recyclerView = view.findViewById(R.id.recycler_view_late_list);
- recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Late_list_adapter adapter = new Late_list_adapter(dataList);
- recyclerView.setAdapter(adapter);
}
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new Promise("문관록 1"));
- dataList.add(new Promise("문관록 2"));
- dataList.add(new Promise("문관록 3"));
- dataList.add(new Promise("문관록 4"));
- dataList.add(new Promise("문관록 5"));
- dataList.add(new Promise("문관록 6"));
- // ...
- return dataList;
+
+
+ private void checkLate(String promiseDocumentUid, activied_promise.CompletionCallback callback) {
+ DocumentReference docRef = db.collection("promisesPractice").document(promiseDocumentUid);
+ docRef.get().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+ if (promiseTimestamp != null) {
+ long currentTime = System.currentTimeMillis();
+ long promiseTime = promiseTimestamp.toDate().getTime();
+ long differenceInMinutes = (currentTime - promiseTime) / (1000 * 60);
+ long differenceInDays = (currentTime - promiseTime) / (1000 * 60 * 60 * 24);
+
+ if (differenceInDays <= 30) {
+ if (differenceInMinutes >= 30) {
+ long promiseAcceptPeople = document.getLong("promiseAcceptPeople");
+
+ db.collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ int friendsCount = task.getResult().size();
+
+ if (promiseAcceptPeople == friendsCount) {
+ callback.onComplete(true);
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
+ }else {
+ callback.onComplete(false);
+ }
+ }
+ else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
}
+
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/MainActivity.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/MainActivity.java
index 5670d70..523b724 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/MainActivity.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/MainActivity.java
@@ -31,15 +31,12 @@ protected void onCreate(Bundle savedInstanceState) {
binding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(binding.getRoot());
- // 프래그먼트 생성 및 데이터 전달
FirstFragment fragment = new FirstFragment();
getSupportFragmentManager().beginTransaction()
.replace(R.id.frame_layout, fragment)
.commit();
- binding.bottomNavigationView.getMenu().getItem(0).setChecked(false);
- binding.bottomNavigationView.setBackground(null);
binding.bottomNavigationView.setOnItemSelectedListener(item -> {
int itemId = item.getItemId();
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromListFragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromListFragment.java
index 6802e88..25a7a15 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromListFragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromListFragment.java
@@ -39,7 +39,6 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
fragmentTransaction.replace(R.id.prom_list, none_click_promise_list);
fragmentTransaction.commit();
- // 활성화된 약속클릭
AppCompatButton active_prom_button_click = view.findViewById(R.id.active_prom);
active_prom_button_click.setOnClickListener(new View.OnClickListener() {
@Override
@@ -53,7 +52,6 @@ public void onClick(View v) {
}
});
- // 확정된 약속클릭
AppCompatButton completed_prom_button_click = view.findViewById(R.id.complete_prom);
completed_prom_button_click.setOnClickListener(new View.OnClickListener() {
@Override
@@ -67,7 +65,6 @@ public void onClick(View v) {
}
});
- // 대기중인 약속클릭
AppCompatButton waiting_prom_button_click = view.findViewById(R.id.waiting_prom);
waiting_prom_button_click.setOnClickListener(new View.OnClickListener() {
@Override
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromMakeFragment.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromMakeFragment.java
index d67d485..acb3105 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromMakeFragment.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/PromMakeFragment.java
@@ -64,19 +64,20 @@ public void onClick(View v) {
}
});
- AppCompatButton received_promise = view.findViewById(R.id.received_promise);
- received_promise.setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- click_received_promise click_received_promise = new click_received_promise();
- FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
-
- fragmentTransaction.add(R.id.frame_layout, click_received_promise);
- fragmentTransaction.addToBackStack(null);
- fragmentTransaction.commit();
-
- }
- });
+ // 이거와 연결되는 프래그먼트도 없애줘야 함.
+// AppCompatButton received_promise = view.findViewById(R.id.received_promise);
+// received_promise.setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// click_received_promise click_received_promise = new click_received_promise();
+// FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
+//
+// fragmentTransaction.add(R.id.frame_layout, click_received_promise);
+// fragmentTransaction.addToBackStack(null);
+// fragmentTransaction.commit();
+//
+// }
+// });
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/log_in.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/log_in.java
index be812b0..df0fa30 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/log_in.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/log_in.java
@@ -57,14 +57,12 @@ public void onClick(View v) {
}
private void initFirebaseAuth() {
- // Initialize Firebase Auth
mAuth = FirebaseAuth.getInstance();
}
@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) {
finish();
@@ -86,16 +84,13 @@ private void log_in(String id, String password) {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
- // 로그인 성공
Toast.makeText(log_in.this, "로그인 성공", Toast.LENGTH_SHORT).show();
finish();
- // 사용자 정보를 메인 엑티비티로 전달
sendUserDataToMainActivity(mAuth.getCurrentUser());
} else {
- // 로그인 실패
Toast.makeText(log_in.this, "로그인 실패: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/sign_in.java b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/sign_in.java
index df6208c..2e77630 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/sign_in.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/initial_screen/sign_in.java
@@ -67,13 +67,11 @@ public void onClick(View v) {
private void signIn(String name, String id, String password, String pass_check) {
- // 입력 유효성 검사
if (TextUtils.isEmpty(id) || TextUtils.isEmpty(name) || TextUtils.isEmpty(password) || TextUtils.isEmpty(pass_check)) {
Toast.makeText(sign_in.this, "모든 항목을 입력하세요.", Toast.LENGTH_SHORT).show();
return;
}
- // 비밀번호 일치 여부 체크
if (!password.equals(pass_check)) {
Toast.makeText(sign_in.this, "비밀번호가 일치하지 않습니다.", Toast.LENGTH_SHORT).show();
return;
@@ -90,14 +88,11 @@ public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
DocumentSnapshot document = task.getResult();
if (document.exists()) {
- // 중복된 ID가 이미 존재함
Toast.makeText(sign_in.this, "이미 사용 중인 ID입니다.", Toast.LENGTH_SHORT).show();
} else {
- // 중복된 ID가 없음, 회원가입 진행
signUpWithFirebase(id, name, password);
}
} else {
- // Firebase 데이터베이스 조회 실패
Toast.makeText(sign_in.this, "중복 확인 중 오류가 발생했습니다.", Toast.LENGTH_SHORT).show();
}
}
@@ -109,36 +104,27 @@ private void signUpWithFirebase(String id, String name, String password) {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
- // 회원가입 성공
Toast.makeText(sign_in.this, "회원가입 성공", Toast.LENGTH_SHORT).show();
- // 여기에서 추가로 필요한 사용자 정보를 Firebase 데이터베이스에 저장할 수 있음
- // 예를 들어, 이름(name)을 users 컬렉션에 저장할 수 있습니다.
saveUserDataToFirestore(id, name);
} else {
- // 회원가입 실패
Toast.makeText(sign_in.this, "회원가입 실패: " + task.getException().getMessage(), Toast.LENGTH_SHORT).show();
}
}
});
}
private void saveUserDataToFirestore(String id, String name) {
- // 사용자 정보를 Firebase Firestore에 저장
- User user = new User(name, id, 50);
+ User user = new User(name, id, mAuth.getUid());
db.collection("users").document(mAuth.getUid()).set(user).addOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
- // 사용자 정보를 메인 엑티비티로 전달
sendUserDataToMainActivity(mAuth.getCurrentUser());
finish();
- // 성공적으로 사용자 추가
- // 사용자의 친구 정보를 추가하는 코드 호출
// addFriendsToFirestore(id, null);
} else {
- // 사용자 추가 실패
}
}
});;
@@ -151,9 +137,7 @@ private void sendUserDataToMainActivity(FirebaseUser user) {
startActivity(intent);
}
- // 친구 정보를 Firestore에 추가하는 메서드
private void addFriendsToFirestore(String userId, List friends) {
- // "users/{userId}/friends" 컬렉션에 친구 정보를 저장합니다.
CollectionReference friendsRef = db.collection("users").document().collection("friends");
for (User friend : friends) {
@@ -163,9 +147,7 @@ private void addFriendsToFirestore(String userId, List friends) {
@Override
public void onComplete(@NonNull Task task) {
if (task.isSuccessful()) {
- // 성공적으로 친구 추가
} else {
- // 친구 추가 실패
}
}
});
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/late_memory/late_list_click.java b/TeamProjects/app/src/main/java/com/example/myapplication/late_memory/late_list_click.java
index 43ef42b..6ac72fc 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/late_memory/late_list_click.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/late_memory/late_list_click.java
@@ -11,6 +11,7 @@
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Late_list_adapter;
@@ -20,12 +21,18 @@
import com.example.myapplication.databinding.FragmentAddingFriendBinding;
import com.example.myapplication.databinding.FragmentLateListClickBinding;
import com.example.myapplication.databinding.ItemLateListBinding;
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Locale;
public class late_list_click extends Fragment {
-
+ FirebaseFirestore db;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -36,6 +43,73 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+ db = FirebaseFirestore.getInstance();
+ Bundle bundle = getArguments();
+
+ RecyclerView recyclerView = view.findViewById(R.id.recycler_view_late_member);
+ recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+
+ if (bundle != null) {
+ String promiseDocumentUid = bundle.getString("promiseUid");
+ db
+ .collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .get()
+ .addOnSuccessListener(documentSnapshot -> {
+ if (documentSnapshot.exists()) {
+ String promiseName = documentSnapshot.getString("promiseName");
+
+ TextView promiseNameTextView = view.findViewById(R.id.promise_name);
+ promiseNameTextView.setText(promiseName);
+
+ Timestamp promiseTimestamp = documentSnapshot.getTimestamp("promiseDate");
+ if (promiseTimestamp != null) {
+ Date date = promiseTimestamp.toDate();
+
+ SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
+
+ TextView promiseDateTimeTextView = view.findViewById(R.id.promise_date_time);
+ promiseDateTimeTextView.setText(dateFormat.format(date));
+ }
+
+ long peopleNum = documentSnapshot.getLong("promiseAcceptPeople");
+ TextView promisePeopleNumTextView = view.findViewById(R.id.promise_people_number);
+ promisePeopleNumTextView.setText(peopleNum + "");
+
+
+ } else {
+ }
+ });
+
+ db
+ .collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .collection("friends")
+ .get()
+ .addOnSuccessListener(collectionSnapshot -> {
+ List dataList = new ArrayList<>();
+
+ for (DocumentSnapshot document : collectionSnapshot.getDocuments()) {
+ String friendName = document.getString("friendName");
+
+ String friendId = document.getString("friendId");
+
+ String friendUid = document.getString("friendUid");
+
+
+ User user = new User(friendName, friendId, friendUid);
+
+ dataList.add(user);
+
+ }
+
+ Late_member_adapter adapter = new Late_member_adapter(dataList, promiseDocumentUid);
+ recyclerView.setAdapter(adapter);
+
+ });
+
+
+ }
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
@@ -43,26 +117,7 @@ public void onClick(View view) {
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- // 리사이클러뷰 설정
- RecyclerView recyclerView = view.findViewById(R.id.recycler_view_late_member);
- recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Late_member_adapter adapter = new Late_member_adapter(dataList);
- recyclerView.setAdapter(adapter);
}
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("문관록","gr1004"));
- dataList.add(new User("이종민","ljm0000"));
- dataList.add(new User("김김김","0107"));
- dataList.add(new User("육육육","0531"));
- dataList.add(new User("민민민","0202"));
- // ...
- return dataList;
- }
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_and_time_in_promise_info.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_and_time_in_promise_info.java
index d3ce565..a6972e5 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_and_time_in_promise_info.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_and_time_in_promise_info.java
@@ -5,20 +5,45 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.fragment.app.FragmentTransaction;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.EditText;
+import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.make_prom.added_friend;
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
+import java.util.List;
public class active_and_time_in_promise_info extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_activie_and_time_in_promise_info, container, false);
+
+ getParentFragmentManager().setFragmentResultListener("promiseUidBundle", this, new FragmentResultListener() {
+ @Override
+ public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
+ String documentUid;
+
+ documentUid = result.getString("promiseUid");
+ Log.d("promiceacceptInfo", documentUid);
+ getPromiseNameFromFirestore(documentUid);
+
+ }
+ });
return view;
}
@@ -29,20 +54,91 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- //얘를 누르면, 약속이 종료된 상태로 넘어간다.
- view.findViewById(R.id.finish_prom_button).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
- requireActivity().getSupportFragmentManager().popBackStack();
- }
- });
+ }
+
+ private void getPromiseNameFromFirestore(String documentUid) {
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ String promiseName = document.getString("promiseName");
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+ if (promiseName != null) {
+ TextView textView = getView().findViewById(R.id.promise_name);
+ textView.setText(promiseName);
+ }
+
+ if (promiseTimestamp != null) {
+ Date promiseDate = promiseTimestamp.toDate();
+ Date currentTime = Calendar.getInstance().getTime();
+ long timeDifference = promiseDate.getTime() - currentTime.getTime();
+
+ if (timeDifference >= 0) {
+ TextView textView = getView().findViewById(R.id.time_exceed);
+ textView.setText("분 남았습니다.");
+ }
+
+ TextView timeTextView = getView().findViewById(R.id.delay_time);
+ timeTextView.setText(Math.abs(timeDifference) / 60000 + "");
+ }
+
+//
+ docRef.collection("friends")
+ .get()
+ .addOnCompleteListener(task2 -> {
+ if (task2.isSuccessful()) {
+ int friendsCount = task2.getResult().size();
+ TextView textView = getView().findViewById(R.id.all_of_members);
+ textView.setText("" + friendsCount);
+ } else {
+ }
+ });
+
+ docRef.collection("friends")
+ .whereEqualTo("friendArrive", false)
+ .get()
+ .addOnCompleteListener(task2 -> {
+ if (task2.isSuccessful()) {
+ int friendsCount = task2.getResult().size();
+ TextView textView = getView().findViewById(R.id.late_members);
+ textView.setText("" + friendsCount);
+
+ if(friendsCount>0){
+ List friendNames = new ArrayList<>();
+
+ for (DocumentSnapshot friendSnapshot : task2.getResult()) {
+ String friendName = friendSnapshot.getString("friendName");
+ if (friendName != null) {
+ friendNames.add(friendName);
+ }
+ }
+
+ StringBuilder namesBuilder = new StringBuilder();
+ for (String name : friendNames) {
+ namesBuilder.append(name).append("\n");
+ }
+
+ TextView friendsNameTextView = getView().findViewById(R.id.late_member_name);
+ friendsNameTextView.setText(namesBuilder.toString());
+ }
+
+
+ } else {
+ }
+ });
+
+
+ }
+ }
+ });
}
-}
\ No newline at end of file
+}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_promise_info.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_promise_info.java
deleted file mode 100644
index 3cf2c5e..0000000
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/active_promise_info.java
+++ /dev/null
@@ -1,51 +0,0 @@
-package com.example.myapplication.list_prom;
-
-import android.os.Bundle;
-
-import androidx.annotation.NonNull;
-import androidx.annotation.Nullable;
-import androidx.fragment.app.Fragment;
-import androidx.fragment.app.FragmentTransaction;
-import androidx.recyclerview.widget.LinearLayoutManager;
-import androidx.recyclerview.widget.RecyclerView;
-
-import android.view.LayoutInflater;
-import android.view.View;
-import android.view.ViewGroup;
-
-import com.example.myapplication.R;
-import com.example.myapplication.adapter.Friend_list_adapter;
-import com.example.myapplication.adapter.User;
-import com.example.myapplication.databinding.ItemActivePromBinding;
-import com.example.myapplication.make_prom.added_friend;
-
-import java.util.ArrayList;
-import java.util.List;
-
-public class active_promise_info extends Fragment {
-
- @Override
- public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_active_promise_info, container, false);
- return view;
- }
-
- @Override
- public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
- super.onViewCreated(view, savedInstanceState);
-
- added_friend added_friend = new added_friend();
- FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
- fragmentTransaction.replace(R.id.added_friend_list, added_friend);
- fragmentTransaction.commit();
- view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
- @Override
- public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
- requireActivity().getSupportFragmentManager().popBackStack();
- }
- });
-
-
- }
-}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/activied_promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/activied_promise.java
index be6ff4d..f6c3a31 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/activied_promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/activied_promise.java
@@ -8,22 +8,43 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Prom_activied_adapter;
+import com.example.myapplication.adapter.Prom_completed_adapter;
import com.example.myapplication.adapter.Promise;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
public class activied_promise extends Fragment {
+ private FirebaseFirestore db;
+ private String myUid;
+ private AtomicInteger activePromisesCount = new AtomicInteger(0);
+ private int promisesCount = 0;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_activied_promise, container, false);
+ db = FirebaseFirestore.getInstance();
return view;
}
@@ -32,26 +53,111 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_active_prom);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
+ myUid = user.getUid();
+
+ db.collection("users")
+ .document(myUid)
+ .collection("promises")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ promisesCount = task.getResult().size();
+ List dataList = new ArrayList<>();
+
+ for (QueryDocumentSnapshot document : task.getResult()) {
+
+ String promiseDocumentUid = document.getString("promiseDocument");
+ String promiseName = document.getString("promiseName");
+
+ checkActived(promiseDocumentUid, new CompletionCallback() {
+ @Override
+ public void onComplete(boolean result) {
+ if (result) {
+ dataList.add(new Promise(promiseName, promiseDocumentUid));
+ }
+
+ int count = activePromisesCount.incrementAndGet();
+ if (count == promisesCount) {
+ Prom_activied_adapter adapter = new Prom_activied_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ }
+ }
+ });
+ }
+
+ Prom_activied_adapter adapter = new Prom_activied_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ } else {
+ }
+ }
+ });
+ }
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Prom_activied_adapter adapter = new Prom_activied_adapter(dataList);
- recyclerView.setAdapter(adapter);
+ public interface CompletionCallback {
+ void onComplete(boolean result);
}
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new Promise("문관록 1"));
- dataList.add(new Promise("문관록 2"));
- dataList.add(new Promise("문관록 3"));
- dataList.add(new Promise("문관록 4"));
- dataList.add(new Promise("문관록 5"));
- dataList.add(new Promise("문관록 6"));
- // ...
- return dataList;
+ private void checkActived(String promiseDocumentUid, CompletionCallback callback) {
+ Date currentTime = Calendar.getInstance().getTime();
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.MINUTE, -30);
+ Date thirtyMinutesAgo = calendar.getTime();
+
+ DocumentReference docRef = db.collection("promisesPractice").document(promiseDocumentUid);
+ docRef.get().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+ if (promiseTimestamp != null) {
+ Date promiseDate = promiseTimestamp.toDate();
+
+ long timeDifference = promiseDate.getTime() - currentTime.getTime();
+ boolean isActive = Math.abs(timeDifference) <= 30 * 60 * 1000;
+ Date currentTime = Calendar.getInstance().getTime();
+ long timeDifference2 = promiseDate.getTime() - currentTime.getTime();
+ boolean isPastPromiseTime = timeDifference2 > 0;
+
+ if (isActive&&isPastPromiseTime) {
+ long promiseAcceptPeople = document.getLong("promiseAcceptPeople");
+
+ db.collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ int friendsCount = task.getResult().size();
+ callback.onComplete(isActive && (promiseAcceptPeople == friendsCount));
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/complete_promise_info.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/complete_promise_info.java
index e2ed6a2..2574533 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/complete_promise_info.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/complete_promise_info.java
@@ -1,32 +1,54 @@
package com.example.myapplication.list_prom;
+import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Friend_list_adapter;
import com.example.myapplication.adapter.User;
import com.example.myapplication.databinding.ItemActivePromBinding;
import com.example.myapplication.make_prom.added_friend;
+import com.example.myapplication.make_prom.added_friend2;
+import com.example.myapplication.make_prom.added_friend3;
+import com.example.myapplication.map.NaverMapShowPromisePlace;
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Locale;
public class complete_promise_info extends Fragment {
+ String documentUid;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_complete_promise_info, container, false);
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ documentUid = bundle.getString("promiseUid");
+ if (documentUid != null && !documentUid.isEmpty()) {
+ getPromiseNameFromFirestore(documentUid);
+ }
+ }
return view;
}
@@ -34,27 +56,86 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- added_friend added_friend = new added_friend();
+ Bundle bundle = new Bundle();
+ bundle.putString("documentUid", documentUid);
+ Log.d("completeBundle", bundle + " "+documentUid);
+
+
+ added_friend3 addedFriend3 = new added_friend3();
+ addedFriend3.setArguments(bundle);
FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
- fragmentTransaction.replace(R.id.added_friend_list, added_friend);
- fragmentTransaction.commit();
+ fragmentTransaction.replace(R.id.add_friend_complete, addedFriend3).commit();
+
+
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- //얘를 클릭하면, 약속정보가 수정됨과 동시에, 파티원들에게 noti 가 날아가야함.
- view.findViewById(R.id.edit_promise).setOnClickListener(new View.OnClickListener() {
+ view.findViewById(R.id.promise_location).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
- requireActivity().getSupportFragmentManager().popBackStack();
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ Double promiseLatitude = document.getDouble("promiseLatitude");
+ Double promiseLongitude = document.getDouble("promiseLongitude");
+
+ Intent intent = new Intent(getActivity(), NaverMapShowPromisePlace.class);
+ intent.putExtra("latitude", promiseLatitude);
+ intent.putExtra("longitude", promiseLongitude);
+ startActivity(intent);
+ } else {
+ Log.d("Firestore", "Document does not exist");
+ }
+ } else {
+ Log.e("Firestore", "Error getting document", task.getException());
+ }
+ });
}
});
+
+
+ }
+ private void getPromiseNameFromFirestore(String documentUid) {
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ String promiseName = document.getString("promiseName");
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+ if (promiseName != null) {
+ TextView textView = getView().findViewById(R.id.promise_name);
+ textView.setText(promiseName);
+ }
+
+ if (promiseTimestamp != null) {
+ Date promiseDate = promiseTimestamp.toDate();
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
+ String formattedDate = formatter.format(promiseDate);
+
+ TextView promiseDayTextView = getView().findViewById(R.id.promise_day);
+ promiseDayTextView.setText(formattedDate);
+ }
+
+ }
+ } else {
+ }
+ });
+
+
+
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/completed_promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/completed_promise.java
index 08d8ff0..10aabb2 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/completed_promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/completed_promise.java
@@ -8,6 +8,7 @@
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -16,14 +17,32 @@
import com.example.myapplication.adapter.Prom_activied_adapter;
import com.example.myapplication.adapter.Prom_completed_adapter;
import com.example.myapplication.adapter.Promise;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
public class completed_promise extends Fragment {
+ private FirebaseFirestore db;
+ private String myUid;
+ private AtomicInteger activePromisesCount = new AtomicInteger(0);
+ private int promisesCount = 0;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_completed_promise, container, false);
+ db = FirebaseFirestore.getInstance();
return view;
}
@@ -32,27 +51,108 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_complete_prom);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
+ myUid = user.getUid();
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Prom_completed_adapter adapter = new Prom_completed_adapter(dataList);
- recyclerView.setAdapter(adapter);
+ db.collection("users")
+ .document(myUid)
+ .collection("promises")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ promisesCount = task.getResult().size();
+ List dataList = new ArrayList<>();
+ for (QueryDocumentSnapshot document : task.getResult()) {
+
+ String promiseDocumentUid = document.getString("promiseDocument");
+ String promiseName = document.getString("promiseName");
+
+ checkCompleted(promiseDocumentUid, new CompletionCallback() {
+ @Override
+ public void onComplete(boolean result) {
+ if (result) {
+ dataList.add(new Promise(promiseName, promiseDocumentUid));
+ }
+
+ int count = activePromisesCount.incrementAndGet();
+ if (count == promisesCount) {
+ Prom_completed_adapter adapter = new Prom_completed_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ }
+ }
+ });
+ }
+
+ Prom_completed_adapter adapter = new Prom_completed_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ } else {
+ }
+ }
+ });
+
+ }
+ public interface CompletionCallback {
+ void onComplete(boolean result);
}
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new Promise("이우혁 1"));
- dataList.add(new Promise("이우혁 2"));
- dataList.add(new Promise("이우혁 3"));
- dataList.add(new Promise("이우혁 4"));
- dataList.add(new Promise("이우혁 5"));
- dataList.add(new Promise("이우혁 6"));
- // ...
- return dataList;
+ private void checkCompleted(String promiseDocumentUid, CompletionCallback callback) {
+ Date currentTime = Calendar.getInstance().getTime();
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.add(Calendar.MINUTE, -30);
+ Date thirtyMinutesAgo = calendar.getTime();
+ DocumentReference docRef = db.collection("promisesPractice").document(promiseDocumentUid);
+ docRef.get().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+ if (promiseTimestamp != null) {
+ Date promiseDate = promiseTimestamp.toDate();
+
+ long timeDifference = promiseDate.getTime() - currentTime.getTime();
+ boolean isComplete = Math.abs(timeDifference) >= 30 * 60 * 1000;
+ boolean isPastPromiseTime = timeDifference > 0;
+
+ if (isComplete&&isPastPromiseTime) {
+ long promiseAcceptPeople = document.getLong("promiseAcceptPeople");
+
+ db.collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ int friendsCount = task.getResult().size();
+ callback.onComplete(isComplete && (promiseAcceptPeople == friendsCount));
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/none_click_promise_list.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/none_click_promise_list.java
index 439d648..e49799c 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/none_click_promise_list.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/none_click_promise_list.java
@@ -12,7 +12,6 @@
public class none_click_promise_list extends Fragment {
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- // Inflate the layout for this fragment
return inflater.inflate(R.layout.none_click_prom_list, container, false);
}
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise.java
index c6e003a..824907f 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise.java
@@ -13,18 +13,37 @@
import android.view.ViewGroup;
import com.example.myapplication.R;
+import com.example.myapplication.adapter.Prom_activied_adapter;
import com.example.myapplication.adapter.Prom_completed_adapter;
import com.example.myapplication.adapter.Prom_waiting_adapter;
import com.example.myapplication.adapter.Promise;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.Date;
import java.util.List;
+import java.util.concurrent.atomic.AtomicInteger;
public class waiting_promise extends Fragment {
+ private FirebaseFirestore db;
+ private String myUid;
+ private AtomicInteger activePromisesCount = new AtomicInteger(0);
+ private int promisesCount = 0;
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_waiting_promise, container, false);
+ db = FirebaseFirestore.getInstance();
return view;
@@ -34,31 +53,98 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_wait_prom);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+ FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
+ myUid = user.getUid();
+
+ db.collection("users")
+ .document(myUid)
+ .collection("promises")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ promisesCount = task.getResult().size();
+ List dataList = new ArrayList<>();
+
+ for (QueryDocumentSnapshot document : task.getResult()) {
+
+ String promiseDocumentUid = document.getString("promiseDocument");
+ String promiseName = document.getString("promiseName");
+
+ checkWaiting(promiseDocumentUid, new activied_promise.CompletionCallback() {
+ @Override
+ public void onComplete(boolean result) {
+ if (result) {
+ dataList.add(new Promise(promiseName, promiseDocumentUid));
+ }
+
+ int count = activePromisesCount.incrementAndGet();
+ if (count == promisesCount) {
+ Prom_waiting_adapter adapter = new Prom_waiting_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ }
+ }
+ });
+ }
+
+ Prom_waiting_adapter adapter = new Prom_waiting_adapter(dataList);
+ recyclerView.setAdapter(adapter);
+ } else {
+ }
+ }
+ });
+
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Prom_waiting_adapter adapter = new Prom_waiting_adapter(dataList);
- recyclerView.setAdapter(adapter);
}
- //다른 약속도 똑같이 정리하긴 할텐데, 리스트에 담는 과정을 정리하면 된다.
- //사실 추가되더라고 크게 바뀔 것은 없다.
- //특정 조건들을 통해서 도큐먼트들을 얻어와서, promise 에 넣어준다.
- //promise class 의 생성자는 바꿔줘야겠지.
- //그리고 게터 세터만 바꿔주면 될듯.
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new Promise("이종민 1"));
- dataList.add(new Promise("이종민 2"));
- dataList.add(new Promise("이종민 3"));
- dataList.add(new Promise("이종민 4"));
- dataList.add(new Promise("이종민 5"));
- dataList.add(new Promise("이종민 6"));
- // ...
- return dataList;
+ private void checkWaiting(String promiseDocumentUid, activied_promise.CompletionCallback callback) {
+ DocumentReference docRef = db.collection("promisesPractice").document(promiseDocumentUid);
+ docRef.get().addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ long promiseAcceptPeople = document.getLong("promiseAcceptPeople");
+
+ db.collection("promisesPractice")
+ .document(promiseDocumentUid)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ int friendsCount = task.getResult().size();
+
+
+
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+ Date currentTime = Calendar.getInstance().getTime();
+ Date promiseDate = promiseTimestamp.toDate();
+ long timeDifference = promiseDate.getTime() - currentTime.getTime();
+ boolean isPastPromiseTime = timeDifference > 0;
+
+ if (promiseAcceptPeople != friendsCount&&isPastPromiseTime) {
+ callback.onComplete(true);
+ } else {
+ callback.onComplete(false);
+ } } else {
+ callback.onComplete(false);
+ }
+ }
+ });
+ } else {
+ callback.onComplete(false);
+ }
+ } else {
+ callback.onComplete(false);
+ }
+ }
+ });
}
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise_info.java b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise_info.java
index 81d20cb..87dfb82 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise_info.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/list_prom/waiting_promise_info.java
@@ -1,32 +1,53 @@
package com.example.myapplication.list_prom;
+import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Friend_list_adapter;
import com.example.myapplication.adapter.User;
-import com.example.myapplication.databinding.ItemActivePromBinding;
+//import com.example.myapplication.databinding.ItemActivePromBinding;
import com.example.myapplication.make_prom.added_friend;
+import com.example.myapplication.make_prom.added_friend2;
+import com.example.myapplication.map.NaverMapShowPromisePlace;
+import com.google.firebase.Timestamp;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import java.text.SimpleDateFormat;
import java.util.ArrayList;
+import java.util.Date;
import java.util.List;
+import java.util.Locale;
public class waiting_promise_info extends Fragment {
-
+ String documentUid;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_waiting_promise_info, container, false);
+
+ Bundle bundle = getArguments();
+ if (bundle != null) {
+ documentUid = bundle.getString("promiseUid");
+ if (documentUid != null && !documentUid.isEmpty()) {
+ getPromiseNameFromFirestore(documentUid);
+ }
+ }
return view;
}
@@ -34,18 +55,90 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- added_friend added_friend = new added_friend();
+ Bundle bundle = new Bundle();
+ bundle.putString("documentUid", documentUid);
+ added_friend2 added_friend2 = new added_friend2();
+ added_friend2.setArguments(bundle);
FragmentTransaction fragmentTransaction = requireActivity().getSupportFragmentManager().beginTransaction();
- fragmentTransaction.replace(R.id.added_friend_list, added_friend);
+ fragmentTransaction.add(R.id.added_friend_list, added_friend2);
fragmentTransaction.commit();
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
+ view.findViewById(R.id.promise_location).setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ Double promiseLatitude = document.getDouble("promiseLatitude");
+ Double promiseLongitude = document.getDouble("promiseLongitude");
+
+ Intent intent = new Intent(getActivity(), NaverMapShowPromisePlace.class);
+ intent.putExtra("latitude", promiseLatitude);
+ intent.putExtra("longitude", promiseLongitude);
+ startActivity(intent);
+ } else {
+ Log.d("Firestore", "Document does not exist");
+ }
+ } else {
+ Log.e("Firestore", "Error getting document", task.getException());
+ }
+ });
+ }
+ });
+
}
-}
\ No newline at end of file
+
+ private void getPromiseNameFromFirestore(String documentUid) {
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ Log.d("docId", documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ String promiseName = document.getString("promiseName");
+ Timestamp promiseTimestamp = document.getTimestamp("promiseDate");
+
+
+ if (promiseName != null) {
+ TextView textView = getView().findViewById(R.id.promise_name);
+ textView.setText(promiseName);
+ }
+
+ if (promiseTimestamp != null) {
+ Date promiseDate = promiseTimestamp.toDate();
+ SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm", Locale.getDefault());
+ String formattedDate = formatter.format(promiseDate);
+
+ TextView promiseDayTextView = getView().findViewById(R.id.promise_day);
+ promiseDayTextView.setText(formattedDate);
+ }
+
+
+ } else {
+ Log.d("Firestore", "Document does not exist");
+ }
+ } else {
+ Log.e("Firestore", "Error getting document", task.getException());
+ }
+ });
+ }
+
+
+
+
+ }
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/added_friend.java b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/added_friend.java
index d2e79b7..a2b957d 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/added_friend.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/added_friend.java
@@ -5,24 +5,38 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Toast;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Prom_completed_adapter;
import com.example.myapplication.adapter.Prom_make_added_friend;
import com.example.myapplication.adapter.Promise;
import com.example.myapplication.adapter.User;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
public class added_friend extends Fragment {
+ private Prom_make_added_friend adapter; // 이종민 병합 코드
+
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_added_friend, container, false);
@@ -34,25 +48,125 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+ // 우혁이 코드
+// String documentUid = getArguments().getString("documentUid");
+// // 리사이클러뷰 설정
+// RecyclerView recyclerView = view.findViewById(R.id.recycler_view_added_friend);
+// recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+// Log.d("woohyuk", "여기까진 ok22222");
+//
+// // 어댑터와 데이터 연결
+// List dataList = new ArrayList<>();
+// CollectionReference friendsCollectionRef = db.collection("promisesPractice")
+// .document(documentUid)
+// .collection("friends");
+//
+// friendsCollectionRef.get()
+// .addOnCompleteListener(task -> {
+// if (task.isSuccessful()) {
+// for (QueryDocumentSnapshot document : task.getResult()) {
+// String friendUid = document.getString("friendUid");
+// if (friendUid != null) {
+// dataList.add(friendUid);
+// }
+// }
+// // 어댑터와 데이터 연결
+// Prom_make_added_friend adapter = new Prom_make_added_friend(dataList);
+// recyclerView.setAdapter(adapter);
+// } else {
+// Log.e("Firestore", "Error getting documents: ", task.getException());
+// }
+// });
+
- // 리사이클러뷰 설정
+ // 이종민 병합 코드
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_added_friend);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
- Prom_make_added_friend adapter = new Prom_make_added_friend(dataList);
+ Bundle bundle = getArguments();
+ List dataList = generateData(bundle);
+ adapter = new Prom_make_added_friend(dataList);
recyclerView.setAdapter(adapter);
+
}
- private List generateData() {
- List dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("이우혁", "7dngur7"));
- // ...
+ // 우혁이 generateData()
+// private void generateData() {
+// getParentFragmentManager().setFragmentResultListener("bundle", this, new FragmentResultListener() {
+// @Override
+// public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
+// String documentUid= result.getString("documentUid");
+// Log.d("documentID", documentUid);
+//
+// FirebaseFirestore.getInstance()
+// .collection("promisesPractice")
+// .document(documentUid)
+// .collection("friends")
+// .get()
+// .addOnCompleteListener(task -> {
+// if (task.isSuccessful()) {
+// List dataList = new ArrayList<>();
+// for (DocumentSnapshot friendSnapshot : task.getResult()) {
+// String friendName = friendSnapshot.getString("friendUid");
+// if (friendName != null) {
+// dataList.add(friendName);
+// }
+// }
+//
+// Prom_make_added_friend adapter = new Prom_make_added_friend(dataList);
+// RecyclerView recyclerView = getView().findViewById(R.id.recycler_view_added_friend);
+// recyclerView.setAdapter(adapter);
+// } else {
+// }
+// });
+// }
+// });
+// }
+
+ private List generateData(Bundle bundle) {
+ List dataList = new ArrayList<>();
+ Log.d("bundle", "added_friend 리사이클러뷰의 bundle" + bundle);
+ if (bundle != null) {
+ ArrayList uidList = bundle.getStringArrayList("uidList");
+ Bundle bundle1 = new Bundle();
+ bundle1.putStringArrayList("uidList", uidList);
+ getParentFragmentManager().setFragmentResult("uidListBundle", bundle1);
+
+ if (uidList != null) {
+ Log.d("bundle", "친구 데이터 가져옴");
+ for (String uid : uidList) {
+ db.collection("users")
+ .whereEqualTo("uid", uid)
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+
+ String addedFriendName = document.getString("name");
+ String addedFriendId = document.getString("id");
+ Log.d("bundle", "친구 데이터 넣기 성공:" + addedFriendName + ", " + addedFriendId);
+ dataList.add(uid);
+
+ adapter.notifyDataSetChanged();
+ }
+ } else {
+ Log.d("bundle", "친구 데이터 넣기 실패");
+ }
+ }
+ });
+
+ }
+
+
+ } else {
+ Toast.makeText(added_friend.this.getContext(), "추가된 친구가 없습니다.", Toast.LENGTH_SHORT).show();
+ }
+ } else {
+ Log.d("MakePromise", "Bundle Null");
+ }
return dataList;
}
+
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/adding_friend.java b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/adding_friend.java
index fc295a2..74032b5 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/adding_friend.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/adding_friend.java
@@ -11,6 +11,7 @@
import android.text.Editable;
import android.text.TextWatcher;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
@@ -24,6 +25,12 @@
import com.example.myapplication.adapter.User;
import com.example.myapplication.databinding.FragmentAddingFriendBinding;
import com.example.myapplication.initial_screen.FirstFragment;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
import java.util.ArrayList;
import java.util.List;
@@ -33,6 +40,8 @@ public class adding_friend extends Fragment {
private FragmentAddingFriendBinding binding;
private List dataList;
private Adding_friend_adapter adapter;
+ private FirebaseFirestore db;
+ private String currentUserId;
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -46,17 +55,16 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
+ db = FirebaseFirestore.getInstance();
+ currentUserId = FirebaseAuth.getInstance().getCurrentUser().getUid();
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recyclerView_adding_friend);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- dataList = generateData(); // 데이터 생성
+ dataList = generateData();
adapter = new Adding_friend_adapter(dataList);
recyclerView.setAdapter(adapter);
-
wordInput();
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@@ -70,17 +78,42 @@ public void onClick(View v) {
private List generateData() {
dataList = new ArrayList<>();
- // 데이터를 원하는대로 추가
- dataList.add(new User("이우혁", "7dngur7"));
- dataList.add(new User("문관록","gr1004"));
- dataList.add(new User("이종민","ljm0000"));
- dataList.add(new User("김김김","0107"));
- dataList.add(new User("육육육","0531"));
- dataList.add(new User("민민민","0202"));
+// dataList.add(new User("이우혁", "7dngur7", "qwdhkb"));
// ...
+ getFriendsToBeWith(dataList);
return dataList;
}
+ private void getFriendsToBeWith(List dataList) {
+ db.collection("users")
+ .document(currentUserId)
+ .collection("friends")
+ .get()
+ .addOnCompleteListener(new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document: task.getResult()) {
+ String friendName = document.getString("name");
+ String friendId = document.getString("id");
+ String friendUid = document.getString("uid");
+ double friendReliabilitydouble = document.getDouble("reliability");
+ float friendReliability = (float)friendReliabilitydouble;
+
+ User user = new User(friendName, friendId, friendReliability, friendUid);
+
+ Log.d("FriendList", "친구 정보 추가");
+ dataList.add(user);
+
+ adapter.notifyDataSetChanged();
+ }
+ } else {
+ Log.d("FriendList", "친구 정보를 불러오기에 실패했습니다.");
+ }
+ }
+ });
+ }
+
private void wordInput(){
binding.edtInput.addTextChangedListener(new TextWatcher() {
@@ -111,4 +144,123 @@ private void filter(String text){
adapter.filterList((ArrayList) filteredList);
}
-}
\ No newline at end of file
+
+}
+
+//package com.example.myapplication.make_prom;
+//
+//import android.os.Bundle;
+//
+//import androidx.annotation.NonNull;
+//import androidx.annotation.Nullable;
+//import androidx.fragment.app.DialogFragment;
+//import androidx.fragment.app.Fragment;
+//import androidx.fragment.app.FragmentTransaction;
+//import androidx.recyclerview.widget.LinearLayoutManager;
+//import androidx.recyclerview.widget.RecyclerView;
+//
+//import android.text.Editable;
+//import android.text.TextWatcher;
+//import android.view.LayoutInflater;
+//import android.view.View;
+//import android.view.ViewGroup;
+//import android.widget.SearchView;
+//import android.widget.Toast;
+//
+//import com.example.myapplication.R;
+//import com.example.myapplication.adapter.Adding_friend_adapter;
+//import com.example.myapplication.adapter.Prom_completed_adapter;
+//import com.example.myapplication.adapter.Promise;
+//import com.example.myapplication.adapter.User;
+//import com.example.myapplication.databinding.FragmentAddingFriendBinding;
+//import com.example.myapplication.initial_screen.FirstFragment;
+//
+//import java.util.ArrayList;
+//import java.util.List;
+//import java.util.Objects;
+//
+//public class adding_friend extends DialogFragment {
+//
+// private FragmentAddingFriendBinding binding;
+// private List dataList;
+// private Adding_friend_adapter adapter;
+//
+// @Override
+// public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
+//
+// binding = FragmentAddingFriendBinding.inflate(inflater, container, false);
+// View view = binding.getRoot();
+//
+// return view;
+// }
+//
+// @Override
+// public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
+// super.onViewCreated(view, savedInstanceState);
+//
+//
+// // 리사이클러뷰 설정
+// RecyclerView recyclerView = view.findViewById(R.id.recyclerView_adding_friend);
+// recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
+//
+// // 어댑터와 데이터 연결
+// dataList = generateData(); // 데이터 생성
+// adapter = new Adding_friend_adapter(dataList);
+// recyclerView.setAdapter(adapter);
+//
+//
+// wordInput();
+//
+// view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
+// @Override
+// public void onClick(View v) {
+// requireActivity().getSupportFragmentManager().popBackStack();
+// }
+// });
+//
+// }
+//
+// private List generateData() {
+// dataList = new ArrayList<>();
+// // 데이터를 원하는대로 추가
+//// dataList.add(new User("이우혁", "7dngur7"));
+//// dataList.add(new User("문관록","gr1004"));
+//// dataList.add(new User("이종민","ljm0000"));
+//// dataList.add(new User("김김김","0107"));
+//// dataList.add(new User("육육육","0531"));
+//// dataList.add(new User("민민민","0202"));
+// // ...
+// return dataList;
+// }
+//
+//
+// private void wordInput(){
+// binding.edtInput.addTextChangedListener(new TextWatcher() {
+// @Override
+// public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+//
+// }
+//
+// @Override
+// public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) {
+//
+// }
+//
+// @Override
+// public void afterTextChanged(Editable editable) {
+// filter(editable.toString());
+// }
+// });
+// }
+// private void filter(String text){
+// List filteredList = new ArrayList<>();
+//
+// for(User item : dataList){
+// if(item.getName().toLowerCase().contains(text.toLowerCase())){
+// filteredList.add(item);
+// }
+// }
+// adapter.filterList((ArrayList) filteredList);
+// }
+//
+//}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_make_promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_make_promise.java
index dbe7e42..77f65d2 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_make_promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_make_promise.java
@@ -1,27 +1,86 @@
package com.example.myapplication.make_prom;
+import static android.content.ContentValues.TAG;
+
+import android.app.Activity;
+import android.app.DatePickerDialog;
+import android.app.TimePickerDialog;
+import android.content.Intent;
import android.os.Bundle;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
+import androidx.appcompat.widget.AppCompatButton;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.fragment.app.FragmentTransaction;
+import androidx.recyclerview.widget.LinearLayoutManager;
+import androidx.recyclerview.widget.RecyclerView;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.Button;
+import android.widget.DatePicker;
+import android.widget.EditText;
+import android.widget.FrameLayout;
+import android.widget.ImageButton;
+import android.widget.TimePicker;
+import android.widget.Toast;
import com.example.myapplication.R;
+import com.example.myapplication.adapter.Prom_make_added_friend;
+import com.example.myapplication.adapter.User;
+import com.example.myapplication.databinding.FragmentClickMakePromiseBinding;
+import com.example.myapplication.map.NaverMapGeoCodingTest;
+import com.google.android.gms.tasks.OnFailureListener;
+import com.google.android.gms.tasks.OnSuccessListener;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+
+import java.util.ArrayList;
+import java.util.Calendar;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
public class click_make_promise extends Fragment {
+ FirebaseFirestore firestore = FirebaseFirestore.getInstance();
+ CollectionReference promisesCollectionRef = firestore.collection("promisesPractice");
+ FragmentClickMakePromiseBinding binding;
+ private int selectedYear, selectedMonth, selectedDay, selectedHour, selectedMinute;
+ private double selectLatitude = -100000, selectLongitude=-100000;
+ private static final int REQUEST_CODE = 1000;
+ String myUid;
+
+ boolean checkError = false;
+
+ ArrayList uidList;
+
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
- View view = inflater.inflate(R.layout.fragment_click_make_promise, container, false);
+ binding = FragmentClickMakePromiseBinding.inflate(inflater, container, false);
+ View view = binding.getRoot();
+
+ getParentFragmentManager().setFragmentResultListener("uidListBundle", this, new FragmentResultListener() {
+ @Override
+ public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
+ uidList = result.getStringArrayList("uidList");
+ Log.d("uidListListener", "" + uidList);
+ }
+ });
return view;
}
+
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
@@ -31,12 +90,30 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
fragmentTransaction.replace(R.id.added_friend_list, added_friend);
fragmentTransaction.commit();
+ FirebaseAuth mAuth = FirebaseAuth.getInstance();
+ FirebaseUser currentUser = mAuth.getCurrentUser();
+ myUid = currentUser.getUid();
+
+ AppCompatButton dateButton = binding.promiseDay;
+ dateButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showDatePickerDialog();
+ }
+ });
+
+ AppCompatButton timeButton = binding.promiseTime;
+ timeButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ showTimePickerDialog();
+ }
+ });
+
- // 프래그먼트 2의 종료 이벤트 처리
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
@@ -54,16 +131,304 @@ public void onClick(View v) {
fragmentTransaction.add(R.id.frame_layout, adding_friend);
fragmentTransaction.addToBackStack(null);
fragmentTransaction.commit();
+
+ }
+ });
+
+ binding.promisePlaceAddress.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ Intent intent = new Intent(getActivity(), NaverMapGeoCodingTest.class);
+ startActivityForResult(intent, REQUEST_CODE);
}
});
- //얘가 클릭되면, db에 약속이 만들어진다.
+
view.findViewById(R.id.make_new_promise).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
- requireActivity().getSupportFragmentManager().popBackStack();
+ Log.d("BeforeAdd", "" + uidList);
+ addToFirestore(uidList, new OnFirestoreCompleteListener() {
+ @Override
+ public void onComplete(boolean isSuccess) {
+ if(!checkError){
+ Log.d("checkErrorhere", "kadjflfsjklflajks");
+ Toast.makeText(view.getContext(), "대기중인 약속을 생성하였습니다", Toast.LENGTH_SHORT).show();
+ requireActivity().getSupportFragmentManager().popBackStack();
+ }else{
+ checkError = !checkError;
+ }
+ }
+ });
+
+
+
+
+
}
});
+
+ }
+
+ @Override
+ public void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
+ super.onActivityResult(requestCode, resultCode, data);
+ if (requestCode == REQUEST_CODE) {
+ if (resultCode == Activity.RESULT_OK) {
+ if (data != null) {
+ selectLatitude = data.getDoubleExtra("latitude", 0);
+ selectLongitude = data.getDoubleExtra("longitude", 0);
+ Log.d("woo2", "onActivityResult: " + selectLatitude + selectLongitude);
+ }
+ }
+ }
+ }
+
+ private void showDatePickerDialog() {
+ Calendar calendar = Calendar.getInstance();
+ int initialYear = calendar.get(Calendar.YEAR);
+ int initialMonth = calendar.get(Calendar.MONTH);
+ int initialDay = calendar.get(Calendar.DAY_OF_MONTH);
+
+
+ DatePickerDialog datePickerDialog = new DatePickerDialog(
+ requireContext(),
+ new DatePickerDialog.OnDateSetListener() {
+ @Override
+ public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) {
+ selectedYear = year;
+ selectedMonth = month;
+ selectedDay = dayOfMonth;
+
+ binding.promiseDay.setText(year + "-" + (month + 1) + "-" + dayOfMonth);
+
+ }
+ },
+ initialYear,
+ initialMonth,
+ initialDay
+ );
+
+ datePickerDialog.show();
}
-}
\ No newline at end of file
+
+ private void showTimePickerDialog() {
+ Calendar calendar = Calendar.getInstance();
+ int initialHour = calendar.get(Calendar.HOUR_OF_DAY);
+ int initialMinute = calendar.get(Calendar.MINUTE);
+
+ TimePickerDialog timePickerDialog = new TimePickerDialog(
+ requireContext(),
+ new TimePickerDialog.OnTimeSetListener() {
+ @Override
+ public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
+ selectedHour = hourOfDay;
+ selectedMinute = minute;
+
+ binding.promiseTime.setText(hourOfDay + ":" + minute);
+
+ }
+ },
+ initialHour,
+ initialMinute,
+ true
+ );
+ timePickerDialog.show();
+ }
+
+ private void addToFirestore(ArrayList uidList, OnFirestoreCompleteListener listener) {
+
+ EditText promiseName = binding.promiseName;
+
+ String promiseNameString = promiseName.getText().toString();
+ if (promiseNameString.isEmpty()) {
+ Toast.makeText(requireContext(), "약속 이름을 입력하세요", Toast.LENGTH_SHORT).show();
+ checkError = true;
+ return;
+ }
+
+ if (uidList == null || uidList.isEmpty()) {
+ Toast.makeText(requireContext(), "친구를 선택하세요", Toast.LENGTH_SHORT).show();
+ checkError = true;
+ return;
+ }
+
+ if (selectLatitude == -100000 && selectLongitude == -100000) {
+ Toast.makeText(requireContext(), "위치를 입력하세요", Toast.LENGTH_SHORT).show();
+ checkError = true;
+ return;
+ }
+
+
+ Calendar calendar = Calendar.getInstance();
+ calendar.set(Calendar.YEAR, selectedYear);
+ calendar.set(Calendar.MONTH, selectedMonth);
+ calendar.set(Calendar.DAY_OF_MONTH, selectedDay);
+ calendar.set(Calendar.HOUR_OF_DAY, selectedHour);
+ calendar.set(Calendar.MINUTE, selectedMinute);
+ calendar.set(Calendar.SECOND, 0);
+ if (selectedYear == 0 || selectedMonth == 0 || selectedDay == 0 || selectedHour == 0 || selectedMinute == 0) {
+ Toast.makeText(requireContext(), "Please select date and time", Toast.LENGTH_SHORT).show();
+ checkError = true;
+ return;
+ }
+
+ Timestamp timestamp = new Timestamp(calendar.getTime());
+
+
+
+
+
+
+
+ int promiseAcceptPeople = 1; // uidList의 개수 넣어주면 될 듯
+ double promiseLatitude = selectLatitude;
+ double promiseLongitude = selectLongitude;
+
+ Map promiseData = new HashMap<>();
+ promiseData.put("promiseAcceptPeople", promiseAcceptPeople);
+ promiseData.put("promiseDate", timestamp);
+ promiseData.put("promiseLatitude", promiseLatitude);
+ promiseData.put("promiseLongitude", promiseLongitude);
+ promiseData.put("promiseName", promiseNameString);
+
+
+ promisesCollectionRef
+ .whereEqualTo("promiseName", promiseNameString)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ Log.d("LJM", "task.isSuccessful()은 됨");
+ boolean isDuplicate = !task.getResult().isEmpty();
+ if (isDuplicate) {
+ Log.d("LJM", "중복일 때 토스트처리");
+// Toast.makeText(getActivity(), "기존에 생성된 약속존 이름입니다.", Toast.LENGTH_SHORT).show();
+ listener.onComplete(true);
+
+ } else {
+ Log.d("LJM", "중복이 아닐 때 처리");
+
+ promisesCollectionRef.add(promiseData)
+ .addOnSuccessListener(documentReference -> {
+ String promiseDocumentId = documentReference.getId();
+ withFriend(promiseDocumentId, uidList);
+ addPromiseToUserCollection(promiseDocumentId, promiseNameString, uidList);
+
+ Log.d("LJM", "DocumentSnapshot added with ID: " + documentReference.getId());
+ listener.onComplete(false); // 작업 성공을 listener에 알림
+
+ })
+ .addOnFailureListener(e -> {
+ Log.d("uidList", "Firebase에 데이터를 추가하기 위한 참조 실패");
+ });
+
+ }
+ } else {
+ Log.d("LJM", "중복 검사 실패");
+ listener.onComplete(true); // 작업 실패를 listener에 알림
+
+ }
+ });
+
+ }
+
+
+ ////////user의 promises에 문서 uid 넣어주기
+ private void addPromiseToUserCollection(String promiseDocumentId, String promiseName, ArrayList uidList) {
+ Map promiseDocumentData = new HashMap<>();
+ promiseDocumentData.put("promiseDocument", promiseDocumentId);
+ promiseDocumentData.put("promiseName", promiseName);
+
+ for (String uid : uidList) {
+ firestore.collection("users")
+ .document(uid)
+ .collection("promises")
+ .document(promiseDocumentId)
+ .set(promiseDocumentData)
+ .addOnSuccessListener(new OnSuccessListener() {
+ @Override
+ public void onSuccess(Void aVoid) {
+ Log.d("Firestore", "문서 추가 성공");
+ }
+ })
+ .addOnFailureListener(new OnFailureListener() {
+ @Override
+ public void onFailure(@NonNull Exception e) {
+ Log.e("Firestore", "문서 추가 실패", e);
+ }
+ });
+ }
+ }
+
+
+ // 번들로 정보를 받아서
+
+ private void withFriend(String promiseDocumentId, ArrayList uidList) {
+ FirebaseUser currentUser = FirebaseAuth.getInstance().getCurrentUser();
+ if (uidList != null) {
+ uidList.add(currentUser.getUid());
+ for (String uid : uidList) {
+ firestore.collection("users")
+ .whereEqualTo("uid", uid)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ String friendName = document.getString("name");
+ String friendID = document.getString("id");
+ String friendUid = document.getString("uid");
+ if (currentUser != null) {
+ String myUid = currentUser.getUid();
+ String myName = currentUser.getDisplayName();
+
+ // 자신의 정보를 friendData에 추가
+ Map myData = new HashMap<>();
+ if (myUid == uid) {
+ myData.put("friendAccept", true);
+ } else {
+ myData.put("friendAccept", false);
+ }
+// myData.put("friendAccept", false);
+ myData.put("friendArrive", false);
+ myData.put("friendArriveTime", Timestamp.now());
+ myData.put("friendId", friendID);
+ myData.put("friendLatitude", 37.495861);
+ myData.put("friendLongitude", 126.953991);
+ myData.put("friendName", friendName);
+ myData.put("friendUid", friendUid);
+
+ addFriendToPromise(promiseDocumentId, friendUid, myData);
+ }
+ }
+ }
+
+ });
+
+ }
+ } else {
+ Log.d("uidList2", "uidList2 null");
+ }
+ }
+
+
+ /////////////이제 친구 목록 하는거에서 Map의 값 받아서 하면 됨
+ private void addFriendToPromise(String promiseDocumentId, String friendUid, Map friendData) {
+ DocumentReference promiseDocRef = firestore.collection("promisesPractice").document(promiseDocumentId);
+
+ promiseDocRef.collection("friends")
+ .document(friendUid)
+ .set(friendData)
+ .addOnSuccessListener(new OnSuccessListener() {
+ @Override
+ public void onSuccess(Void unused) {
+ Log.d("PromiseFriends", "Add Friends to Firesore Success");
+ }
+ }).addOnFailureListener(new OnFailureListener() {
+ @Override
+ public void onFailure(@NonNull Exception e) {
+ Log.d("PromiseFriends", "Add Friends to Firesore Success");
+ }
+ });
+ }
+
+}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_received_promise.java b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_received_promise.java
index 5c4d9b8..53240a9 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_received_promise.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/click_received_promise.java
@@ -34,20 +34,16 @@ public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle sa
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);
- // 프래그먼트 2의 종료 이벤트 처리
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
- // 리사이클러뷰 설정
RecyclerView recyclerView = view.findViewById(R.id.recycler_view_received_promise);
recyclerView.setLayoutManager(new LinearLayoutManager(getActivity()));
- // 어댑터와 데이터 연결
- List dataList = generateData(); // 데이터 생성
+ List dataList = generateData();
Prom_received_adapter adapter = new Prom_received_adapter(dataList);
recyclerView.setAdapter(adapter);
@@ -56,12 +52,12 @@ public void onClick(View v) {
private List generateData() {
List dataList = new ArrayList<>();
// 데이터를 원하는대로 추가
- dataList.add(new Promise("문관록 1"));
- dataList.add(new Promise("문관록 2"));
- dataList.add(new Promise("문관록 3"));
- dataList.add(new Promise("문관록 4"));
- dataList.add(new Promise("문관록 5"));
- dataList.add(new Promise("문관록 6"));
+// dataList.add(new Promise("문관록 1"));
+// dataList.add(new Promise("문관록 2"));
+// dataList.add(new Promise("문관록 3"));
+// dataList.add(new Promise("문관록 4"));
+// dataList.add(new Promise("문관록 5"));
+// dataList.add(new Promise("문관록 6"));
// ...
return dataList;
}
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/received_promise_info.java b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/received_promise_info.java
index a13d118..77ba29f 100644
--- a/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/received_promise_info.java
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/make_prom/received_promise_info.java
@@ -5,24 +5,49 @@
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;
+import androidx.fragment.app.FragmentResultListener;
import androidx.fragment.app.FragmentTransaction;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
+import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
+import android.widget.TextView;
import com.example.myapplication.R;
import com.example.myapplication.adapter.Friend_list_adapter;
import com.example.myapplication.adapter.User;
import com.example.myapplication.databinding.ItemActivePromBinding;
import com.example.myapplication.make_prom.added_friend;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+
+import org.w3c.dom.Text;
import java.util.ArrayList;
import java.util.List;
public class received_promise_info extends Fragment {
+// String documentUid;
+// @Override
+// public void onCreate(@Nullable Bundle savedInstanceState) {
+// super.onCreate(savedInstanceState);
+// getChildFragmentManager().setFragmentResultListener("promiseUidBundle", this, new FragmentResultListener() {
+// @Override
+// public void onFragmentResult(@NonNull String requestKey, @NonNull Bundle result) {
+// documentUid = result.getString("promiseUid");
+// Log.d("promiceacceptInfo", documentUid);
+// getPromiseNameFromFirestore(documentUid);
+//
+// }
+// });
+//
+//
+//
+// }
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
@@ -41,11 +66,34 @@ public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceStat
view.findViewById(R.id.cancelButton).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
- // 프래그먼트 2 종료 후 프래그먼트 1로 돌아가기
requireActivity().getSupportFragmentManager().popBackStack();
}
});
}
+
+ private void getPromiseNameFromFirestore(String documentUid) {
+ FirebaseFirestore db = FirebaseFirestore.getInstance();
+ DocumentReference docRef = db.collection("promisesPractice").document(documentUid);
+
+ docRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ DocumentSnapshot document = task.getResult();
+ if (document.exists()) {
+ String promiseName = document.getString("promiseName");
+
+ if (promiseName != null) {
+ TextView textView = getView().findViewById(R.id.promise_name);
+ textView.setText(promiseName);
+ }
+ }
+ } else {
+ }
+ });
+
+
+
+ }
+
}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapGeoCodingTest.java b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapGeoCodingTest.java
new file mode 100644
index 0000000..3fd709d
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapGeoCodingTest.java
@@ -0,0 +1,207 @@
+package com.example.myapplication.map;
+
+import android.Manifest;
+import android.app.Activity;
+import android.content.Intent;
+import android.content.pm.PackageManager;
+import android.graphics.PointF;
+import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.EditText;
+import android.widget.ImageButton;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+
+import com.example.myapplication.R;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.naver.maps.geometry.LatLng;
+import com.naver.maps.map.CameraAnimation;
+import com.naver.maps.map.CameraUpdate;
+import com.naver.maps.map.LocationTrackingMode;
+import com.naver.maps.map.MapFragment;
+import com.naver.maps.map.NaverMap;
+import com.naver.maps.map.OnMapReadyCallback;
+import com.naver.maps.map.util.FusedLocationSource;
+
+import java.io.BufferedReader;
+import java.io.InputStreamReader;
+import java.net.HttpURLConnection;
+import java.net.URL;
+import java.net.URLEncoder;
+
+public class NaverMapGeoCodingTest extends AppCompatActivity implements OnMapReadyCallback {
+
+ private Button updateButton;
+ private ImageButton cancelButton;
+ private FirebaseFirestore db;
+ private NaverMap naverMap;
+ EditText editText;
+
+ private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;
+ private FusedLocationSource locationSource;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_naver_map_geo_coding_test);
+
+ cancelButton = findViewById(R.id.cancel_button);
+
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+ db = FirebaseFirestore.getInstance();
+ editText = findViewById(R.id.editText);
+
+ MapFragment mapFragment = (MapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
+ if (mapFragment == null) {
+ mapFragment = MapFragment.newInstance();
+ getSupportFragmentManager().beginTransaction().add(R.id.map, mapFragment).commit();
+ }
+ mapFragment.getMapAsync(this);
+
+ updateButton = findViewById(R.id.update_button);
+ updateButton.setOnClickListener(view -> updateCoordinatesToFirestore());
+ Button button = findViewById(R.id.button);
+ button.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View view) {
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ String address = editText.getText().toString();
+ requestGeocode(address);
+ }
+ }).start();
+ }
+ });
+
+ locationSource =
+ new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
+ }
+
+ private void updateCoordinatesToFirestore() {
+ if (naverMap != null) {
+ android.graphics.Point centerPoint = new android.graphics.Point(
+ naverMap.getWidth() / 2, naverMap.getHeight() / 2);
+
+ PointF centerPointF = new PointF(centerPoint.x, centerPoint.y);
+ LatLng centerLatLng = naverMap.getProjection().fromScreenLocation(centerPointF);
+
+ if (centerLatLng != null) {
+ double latitude = centerLatLng.latitude;
+ double longitude = centerLatLng.longitude;
+ Log.d("woohyuk", latitude+""+longitude);
+
+ Intent intent = new Intent();
+ intent.putExtra("latitude", latitude);
+ intent.putExtra("longitude", longitude);
+ setResult(Activity.RESULT_OK, intent);
+ finish();
+ }
+ }
+ }
+
+
+
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (locationSource.onRequestPermissionsResult(
+ requestCode, permissions, grantResults)) {
+ if (!locationSource.isActivated()) {
+ naverMap.setLocationTrackingMode(LocationTrackingMode.None);
+ }
+ return;
+ }
+ super.onRequestPermissionsResult(
+ requestCode, permissions, grantResults);
+ }
+
+ public void requestGeocode(String address) {
+ try {
+ BufferedReader bufferedReader;
+ StringBuilder stringBuilder = new StringBuilder();
+// String addr = "서울특별시 동작구 상도로 369";
+ String query = "https://naveropenapi.apigw.ntruss.com/map-geocode/v2/geocode?query=" + URLEncoder.encode(address, "UTF-8");
+ URL url = new URL(query);
+ HttpURLConnection conn = (HttpURLConnection) url.openConnection();
+ if (conn != null) {
+ conn.setConnectTimeout(5000);
+ conn.setReadTimeout(5000);
+ conn.setRequestMethod("GET");
+ conn.setRequestProperty("X-NCP-APIGW-API-KEY-ID", "uilhyth3w8");
+ conn.setRequestProperty("X-NCP-APIGW-API-KEY", "nTSWLMxsdhTtTSBbuVviiRWQX7ntNeK6gcym9oZB");
+ conn.setDoInput(true);
+
+ int responseCode = conn.getResponseCode();
+
+ if (responseCode == 200) {
+ bufferedReader = new BufferedReader(new InputStreamReader(conn.getInputStream()));
+ } else {
+ bufferedReader = new BufferedReader(new InputStreamReader(conn.getErrorStream()));
+ }
+
+ String line = null;
+ while ((line = bufferedReader.readLine()) != null) {
+ stringBuilder.append(line + "\n");
+ }
+ //textView.setText(stringBuilder);
+
+ int indexFirst;
+ int indexLast;
+
+ indexFirst = stringBuilder.indexOf("\"x\":\"");
+ indexLast = stringBuilder.indexOf("\",\"y\":");
+ String x = stringBuilder.substring(indexFirst + 5, indexLast);
+
+ indexFirst = stringBuilder.indexOf("\"y\":\"");
+ indexLast = stringBuilder.indexOf("\",\"distance\":");
+ String y = stringBuilder.substring(indexFirst + 5, indexLast);
+
+
+ double latitude = Double.parseDouble(y);
+ double longitude = Double.parseDouble(x);
+
+ LatLng searchLocation = new LatLng(latitude, longitude) ;
+ CameraUpdate cameraUpdate = CameraUpdate.scrollTo(searchLocation).animate(CameraAnimation.Linear);
+ naverMap.moveCamera(cameraUpdate);
+
+ bufferedReader.close();
+ conn.disconnect();
+ }
+ } catch (Exception e) {
+ e.printStackTrace();
+ }
+ }
+
+
+ @Override
+ public void onMapReady(@NonNull NaverMap naverMap) {
+ this.naverMap = naverMap;
+ naverMap.setLocationSource(locationSource);
+ naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
+
+ if (ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
+ ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
+ return;
+ }
+
+ naverMap.getUiSettings().setLocationButtonEnabled(true);
+ }
+}
+
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapRealNew.java b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapRealNew.java
new file mode 100644
index 0000000..2d3e132
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapRealNew.java
@@ -0,0 +1,499 @@
+package com.example.myapplication.map;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.graphics.Color;
+import android.location.Location;
+import android.os.Bundle;
+import android.os.Handler;
+import android.util.Log;
+import android.view.View;
+import android.widget.Button;
+import android.widget.ImageButton;
+import android.widget.RelativeLayout;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.appcompat.widget.AppCompatButton;
+import androidx.core.app.ActivityCompat;
+import androidx.fragment.app.FragmentManager;
+
+import com.example.myapplication.R;
+import com.google.android.gms.location.FusedLocationProviderClient;
+import com.google.android.gms.location.LocationServices;
+import com.google.android.gms.tasks.OnCompleteListener;
+import com.google.android.gms.tasks.Task;
+import com.google.firebase.Timestamp;
+import com.google.firebase.auth.FirebaseAuth;
+import com.google.firebase.auth.FirebaseUser;
+import com.google.firebase.firestore.CollectionReference;
+import com.google.firebase.firestore.DocumentReference;
+import com.google.firebase.firestore.DocumentSnapshot;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.google.firebase.firestore.QueryDocumentSnapshot;
+import com.google.firebase.firestore.QuerySnapshot;
+import com.naver.maps.geometry.LatLng;
+import com.naver.maps.map.CameraAnimation;
+import com.naver.maps.map.CameraUpdate;
+import com.naver.maps.map.LocationTrackingMode;
+import com.naver.maps.map.MapFragment;
+import com.naver.maps.map.NaverMap;
+import com.naver.maps.map.OnMapReadyCallback;
+import com.naver.maps.map.overlay.CircleOverlay;
+import com.naver.maps.map.overlay.InfoWindow;
+import com.naver.maps.map.overlay.Marker;
+import com.naver.maps.map.util.FusedLocationSource;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
+public class NaverMapRealNew extends AppCompatActivity implements OnMapReadyCallback {
+
+ Marker marker = new Marker();
+ Marker marker2 = new Marker();
+
+ InfoWindow infoWindow = new InfoWindow();
+ InfoWindow infoWindow2 = new InfoWindow();
+ private FirebaseFirestore db;
+ private static final int LOCATION_REQUEST_CODE = 1001;
+ private FusedLocationProviderClient fusedLocationClient;
+ private static final String TAG = "LocationUpdateActivity";
+ private NaverMap naverMap;
+ private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;
+ private FusedLocationSource locationSource;
+
+ double latitude, longitude;
+
+ private Map data = new HashMap<>();
+
+ private List markerList = new ArrayList<>();
+ private List infoWindowList = new ArrayList<>();
+
+ private List locationButtonList = new ArrayList<>();
+
+ private List safeCircleList = new ArrayList<>();
+
+
+ private AppCompatButton updateButton;
+ private AppCompatButton promisePlace;
+
+ private ImageButton cancelButton;
+
+
+ private Handler locationUpdateHandler = new Handler();
+ private int locationUpdateInterval = 5000;
+ private CollectionReference friendCollectionRef;
+ private String myUid;
+
+ private DocumentReference myDocumentReference;
+
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_naver_map_real_new);
+
+ cancelButton = findViewById(R.id.cancel_button);
+
+ cancelButton.setOnClickListener(new View.OnClickListener() {
+ @Override
+ public void onClick(View v) {
+ finish();
+ }
+ });
+
+
+ FragmentManager fm = getSupportFragmentManager();
+ MapFragment mapFragment = (MapFragment) fm.findFragmentById(R.id.map);
+ if (mapFragment == null) {
+ mapFragment = MapFragment.newInstance();
+ fm.beginTransaction().add(R.id.map, mapFragment).commit();
+ }
+ initializeCloudFirestore();
+ mapFragment.getMapAsync(this);
+
+ Log.d("collection", getIntent().getStringExtra("promiseUid"));
+ friendCollectionRef= db.collection("promisesPractice").document(getIntent().getStringExtra("promiseUid")).collection("friends");
+ friendCollectionRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ QuerySnapshot querySnapshot = task.getResult();
+ if (querySnapshot != null) {
+ List friendNames = new ArrayList<>();
+
+ int numOfButtons = querySnapshot.size();
+ Log.d("collection", ""+numOfButtons);
+ for (QueryDocumentSnapshot document : querySnapshot) {
+ String friendName = document.getString("friendName");
+ Log.d("friendName bb",friendName+"");
+
+ if (friendName != null) {
+ friendNames.add(friendName);
+ }
+ }
+ makeButtons(numOfButtons, friendNames);
+
+ } else {
+ Log.d("collection", "쿼리 스냅샷이 null입니다.");
+ }
+ } else {
+ Log.d("collection", "문서 가져오기 오류: ", task.getException());
+ }
+ });
+
+ FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
+ myUid = user.getUid();
+
+ updateButton = findViewById(R.id.update_button);
+ updateButton.setOnClickListener(v -> {
+ getCollectionAndMakeMemberTest(0);
+ });
+
+ promisePlace = findViewById(R.id.primise_location_move_button);
+ promisePlace.setOnClickListener(v -> {
+ getCollectionAndMakeMemberTest(1);
+ });
+
+
+ fusedLocationClient = LocationServices.getFusedLocationProviderClient(this);
+
+ startLocationUpdates();
+ locationSource = new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
+ startEveryLocationUpdates();
+ }
+
+
+ private void initializeCloudFirestore() {
+ db = FirebaseFirestore.getInstance();
+ }
+
+ private void getCollectionAndMakeMemberTest(int codeNum) {
+ friendCollectionRef.get().addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ removeMarkersAndInfoWindows();
+ removeSafeCircleZone();
+
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ Map data = document.getData();
+
+ String name = (String) data.get("friendName");
+ Double latitude = (Double) data.get("friendLatitude");
+ Double longitude = (Double) data.get("friendLongitude");
+
+ if (latitude != null && longitude != null) {
+ Marker marker = new Marker();
+ marker.setPosition(new LatLng(latitude, longitude));
+ markerList.add(marker);
+
+ InfoWindow infoWindow = new InfoWindow();
+ infoWindow.setAdapter(new InfoWindow.DefaultTextAdapter(this) {
+ @NonNull
+ @Override
+ public CharSequence getText(@NonNull InfoWindow infoWindow) {
+ return "이름 : " + name;
+ }
+ });
+ infoWindowList.add(infoWindow);
+ } else {
+ Log.d(TAG, "잘못된 위경도 데이터: " + data);
+ }
+ }
+ addMarkersToMap();
+
+ if (!markerList.isEmpty() && codeNum == 1) {
+ DocumentReference documentReference = db.collection("promisesPractice").document(getIntent().getStringExtra("promiseUid"));
+ documentReference.get().addOnCompleteListener(task1 -> {
+ if (task1.isSuccessful()) {
+ DocumentSnapshot document = task1.getResult();
+ if (document.exists()) {
+ Double latitude = document.getDouble("promiseLatitude");
+ Double longitude = document.getDouble("promiseLongitude");
+
+ if (latitude != null && longitude != null) {
+ LatLng firstLocation = new LatLng(latitude, longitude);
+ CameraUpdate cameraUpdate = CameraUpdate.scrollTo(firstLocation).animate(CameraAnimation.Linear);
+ naverMap.moveCamera(cameraUpdate);
+ } else {
+ Log.d("Latitude", "Latitude 또는 Longitude 값이 null");
+ }
+ } else {
+ Log.d("Latitude", "해당 문서가 존재하지 않습니다");
+ }
+ } else {
+ Log.d("Latitude", "문서 가져오기 실패");
+ }
+ });
+ }
+
+ if (!markerList.isEmpty()) {
+ DocumentReference documentReference = db.collection("promisesPractice").document(getIntent().getStringExtra("promiseUid"));
+
+ documentReference.get().addOnCompleteListener(task1 -> {
+ if (task1.isSuccessful()) {
+ DocumentSnapshot document = task1.getResult();
+ if (document.exists()) {
+ Double latitude = document.getDouble("promiseLatitude");
+ Double longitude = document.getDouble("promiseLongitude");
+
+ if (latitude != null && longitude != null) {
+ LatLng firstLocation = new LatLng(latitude, longitude);
+ makeSafeCircleZone(firstLocation);
+ } else {
+ Log.d("Latitude", "Latitude 또는 Longitude 값이 null입니다.");
+ }
+ } else {
+ Log.d("Latitude", "해당 문서가 존재하지 않습니다.");
+ }
+ } else {
+ Log.d("Latitude", "문서 가져오기 실패: ", task1.getException());
+ }
+ });
+ }
+ } else {
+ Log.d(TAG, "문서 가져오기 오류: ", task.getException());
+ }
+ });
+ }
+
+ private void addMarkersToMap() {
+ for (int i = 0; i < markerList.size(); i++) {
+ Marker marker = markerList.get(i);
+ InfoWindow infoWindow = infoWindowList.get(i);
+
+ marker.setMap(naverMap);
+ infoWindow.open(marker);
+
+ marker.setOnClickListener(overlay -> {
+ if (marker.getInfoWindow() == null) {
+ infoWindow.open(marker);
+ } else {
+ infoWindow.close();
+ }
+ return true;
+ });
+ }
+ }
+
+ private void makeButtons(int numOfButtons, List friendNames) {
+ RelativeLayout layout = findViewById(R.id.activity_real_layout);
+ int prevButtonId = R.id.update_button;
+
+ for (int i = 0; i < numOfButtons; i++) {
+ Button memberButton = new Button(this);
+ memberButton.setId(View.generateViewId());
+ if (i < friendNames.size()) {
+ memberButton.setText(friendNames.get(i));
+ } else {
+ memberButton.setText("Friend " + (i + 1));
+ }
+ RelativeLayout.LayoutParams params = new RelativeLayout.LayoutParams(
+ RelativeLayout.LayoutParams.WRAP_CONTENT,
+ RelativeLayout.LayoutParams.WRAP_CONTENT
+ );
+ params.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
+
+ if (i > 0) {
+ params.addRule(RelativeLayout.RIGHT_OF, prevButtonId);
+ } else {
+ params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
+ }
+
+ memberButton.setLayoutParams(params);
+ layout.addView(memberButton);
+
+ prevButtonId = memberButton.getId();
+
+ int finalI = i;
+ memberButton.setOnClickListener(v -> {
+ if (!markerList.isEmpty() && finalI < markerList.size()) {
+ LatLng location = markerList.get(finalI).getPosition();
+ CameraUpdate cameraUpdate = CameraUpdate.scrollTo(location).animate(CameraAnimation.Linear);
+ naverMap.moveCamera(cameraUpdate);
+ }
+ });
+ }
+ }
+
+ private void removeMarkersAndInfoWindows() {
+ for (Marker marker : markerList) {
+ marker.setMap(null);
+ }
+
+ markerList.clear();
+
+ for (InfoWindow infoWindow : infoWindowList) {
+ infoWindow.close();
+ }
+ infoWindowList.clear();
+ }
+
+ private void makeSafeCircleZone(LatLng latLng) {
+ CircleOverlay circle = new CircleOverlay();
+ circle.setCenter(latLng);
+ circle.setRadius(300);
+ circle.setColor(Color.argb(128, 255, 0, 0));
+ circle.setMap(naverMap);
+
+ safeCircleList.add(circle);
+
+ for (Marker marker : markerList) {
+ if (circle.getBounds().contains(marker.getPosition())) {
+ updateInCircleFirestoreDocument(marker);
+ break;
+ }
+ }
+
+ }
+ private void updateInCircleFirestoreDocument(Marker marker) {
+
+ friendCollectionRef
+ .whereEqualTo("friendLatitude", marker.getPosition().latitude)
+ .whereEqualTo("friendLongitude", marker.getPosition().longitude)
+ .get()
+ .addOnCompleteListener(task -> {
+ if (task.isSuccessful()) {
+ for (QueryDocumentSnapshot document : task.getResult()) {
+ if((boolean)document.get("friendArrive")==false){
+ document.getReference().update("friendArrive", true);
+
+ Timestamp timestamp = com.google.firebase.Timestamp.now();
+ document.getReference().update("friendArriveTime", timestamp);
+ }
+ }
+ } else {
+ Log.d(TAG, "Error getting documents: ", task.getException());
+ }
+ });
+ }
+
+
+ private void removeSafeCircleZone() {
+ for (CircleOverlay circleOverlay : safeCircleList) {
+ circleOverlay.setMap(null);
+ }
+ safeCircleList.clear();
+ }
+
+
+ private Runnable locationUpdateRunnable = new Runnable() {
+ @Override
+ public void run() {
+ getCollectionAndMakeMemberTest(0);
+
+ locationUpdateHandler.postDelayed(this, locationUpdateInterval);
+ }
+ };
+
+ private void startEveryLocationUpdates() {
+ locationUpdateHandler.postDelayed(locationUpdateRunnable, locationUpdateInterval);
+ }
+
+ private void stopLocationUpdates() {
+ locationUpdateHandler.removeCallbacks(locationUpdateRunnable);
+ }
+
+ private void startLocationUpdates() {
+ Runnable locationUpdateRunnable = new Runnable() {
+ @Override
+ public void run() {
+ getLocationAndUpload();
+ delayedLocationUpdate();
+ }
+ };
+ locationUpdateRunnable.run();
+ }
+
+ private void delayedLocationUpdate() {
+ new Handler().postDelayed(this::getLocationAndUpload, 5000);
+ }
+
+ private void getLocationAndUpload() {
+ if (ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED && ActivityCompat.checkSelfPermission(this, Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ return;
+ }
+ fusedLocationClient.getLastLocation()
+ .addOnCompleteListener(this, new OnCompleteListener() {
+ @Override
+ public void onComplete(@NonNull Task task) {
+ if (task.isSuccessful() && task.getResult() != null) {
+ Location location = task.getResult();
+ double latitude = location.getLatitude();
+ double longitude = location.getLongitude();
+
+ uploadToFirestore(latitude, longitude);
+ } else {
+ Log.e(TAG, "Failed to get location.");
+ }
+ }
+ });
+ }
+ ///////////////////////여기 해야
+ private void uploadToFirestore(double latitude, double longitude) {
+ Map data = new HashMap<>();
+ data.put("friendLatitude", latitude);
+ data.put("friendLongitude", longitude);
+
+
+ friendCollectionRef.whereEqualTo("friendUid", myUid)
+ .get()
+ .addOnSuccessListener(queryDocumentSnapshots -> {
+ for (QueryDocumentSnapshot documentSnapshot : queryDocumentSnapshots) {
+ documentSnapshot.getReference().update(data)
+ .addOnSuccessListener(aVoid ->
+ Log.d(TAG, "DocumentSnapshot updated with ID: " + documentSnapshot.getId()))
+ .addOnFailureListener(e ->
+ Log.e(TAG, "Error updating document", e));
+ }
+ })
+ .addOnFailureListener(e ->
+ Log.e(TAG, "Error getting documents", e));
+ }
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (locationSource.onRequestPermissionsResult(
+ requestCode, permissions, grantResults)) {
+ if (!locationSource.isActivated()) {
+ naverMap.setLocationTrackingMode(LocationTrackingMode.None);
+ }
+ return;
+ }
+ super.onRequestPermissionsResult(
+ requestCode, permissions, grantResults);
+ }
+ @Override
+ public void onMapReady(@NonNull NaverMap naverMap) {
+ this.naverMap = naverMap;
+ naverMap.setLocationSource(locationSource);
+
+ naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
+
+ if (ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
+ ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
+ return;
+ }
+
+ naverMap.getUiSettings().setLocationButtonEnabled(true);
+ naverMap.setLocationSource(locationSource);
+ naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
+
+
+ getCollectionAndMakeMemberTest(1);
+
+ }
+
+
+//
+// @Override
+// protected void onDestroy() {
+// super.onDestroy();
+// // 액티비티가 종료될 때 위치 업데이트 작업 중지
+// stopLocationUpdates();
+// }
+}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapShowPromisePlace.java b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapShowPromisePlace.java
new file mode 100644
index 0000000..d1b8ab8
--- /dev/null
+++ b/TeamProjects/app/src/main/java/com/example/myapplication/map/NaverMapShowPromisePlace.java
@@ -0,0 +1,109 @@
+package com.example.myapplication.map;
+
+import androidx.annotation.NonNull;
+import androidx.appcompat.app.AppCompatActivity;
+import androidx.core.app.ActivityCompat;
+
+import android.Manifest;
+import android.content.pm.PackageManager;
+import android.os.Bundle;
+import android.widget.Button;
+import android.widget.EditText;
+
+import com.example.myapplication.R;
+import com.google.firebase.firestore.FirebaseFirestore;
+import com.naver.maps.geometry.LatLng;
+import com.naver.maps.map.CameraAnimation;
+import com.naver.maps.map.CameraUpdate;
+import com.naver.maps.map.LocationTrackingMode;
+import com.naver.maps.map.MapFragment;
+import com.naver.maps.map.NaverMap;
+import com.naver.maps.map.OnMapReadyCallback;
+import com.naver.maps.map.overlay.Align;
+import com.naver.maps.map.overlay.Marker;
+import com.naver.maps.map.util.FusedLocationSource;
+
+public class NaverMapShowPromisePlace extends AppCompatActivity implements OnMapReadyCallback{
+
+ private Button updateButton;
+ private FirebaseFirestore db;
+ private NaverMap naverMap;
+ EditText editText;
+
+ private static final int LOCATION_PERMISSION_REQUEST_CODE = 1000;
+ private FusedLocationSource locationSource;
+
+ @Override
+ protected void onCreate(Bundle savedInstanceState) {
+ super.onCreate(savedInstanceState);
+ setContentView(R.layout.activity_naver_map_show_promise_place);
+
+ db = FirebaseFirestore.getInstance();
+
+ MapFragment mapFragment = (MapFragment) getSupportFragmentManager().findFragmentById(R.id.map);
+ if (mapFragment == null) {
+ mapFragment = MapFragment.newInstance();
+ getSupportFragmentManager().beginTransaction().add(R.id.map, mapFragment).commit();
+ }
+ mapFragment.getMapAsync( this);
+
+
+
+
+ locationSource =
+ new FusedLocationSource(this, LOCATION_PERMISSION_REQUEST_CODE);
+ }
+
+
+
+ @Override
+ public void onRequestPermissionsResult(int requestCode,
+ @NonNull String[] permissions, @NonNull int[] grantResults) {
+ if (locationSource.onRequestPermissionsResult(
+ requestCode, permissions, grantResults)) {
+ if (!locationSource.isActivated()) {
+ naverMap.setLocationTrackingMode(LocationTrackingMode.None);
+ }
+ return;
+ }
+ super.onRequestPermissionsResult(
+ requestCode, permissions, grantResults);
+ }
+
+
+
+
+
+ @Override
+ public void onMapReady(@NonNull NaverMap naverMap) {
+ this.naverMap = naverMap;
+ naverMap.setLocationSource(locationSource);
+ naverMap.setLocationTrackingMode(LocationTrackingMode.Follow);
+
+ if (ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_FINE_LOCATION) != PackageManager.PERMISSION_GRANTED &&
+ ActivityCompat.checkSelfPermission(this,
+ Manifest.permission.ACCESS_COARSE_LOCATION) != PackageManager.PERMISSION_GRANTED) {
+ ActivityCompat.requestPermissions(this,
+ new String[]{Manifest.permission.ACCESS_FINE_LOCATION}, LOCATION_PERMISSION_REQUEST_CODE);
+ return;
+ }
+
+ naverMap.getUiSettings().setLocationButtonEnabled(true);
+
+ double latitude = getIntent().getDoubleExtra("latitude",0);
+ double longitude = getIntent().getDoubleExtra("longitude", 0);
+
+ LatLng searchLocation = new LatLng(latitude,longitude );
+ CameraUpdate cameraUpdate = CameraUpdate.scrollTo(searchLocation).animate(CameraAnimation.Linear);
+ naverMap.moveCamera(cameraUpdate);
+
+ Marker marker = new Marker();
+ marker.setPosition(searchLocation);
+ marker.setMap(naverMap);
+ marker.setCaptionText("목적지!");
+ marker.setCaptionTextSize(25);
+ marker.setCaptionAligns(Align.Top);
+ marker.setCaptionOffset(30);
+ }
+}
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/anim/slide_in_top.xml b/TeamProjects/app/src/main/res/anim/slide_in_top.xml
index bf0de37..73ac205 100644
--- a/TeamProjects/app/src/main/res/anim/slide_in_top.xml
+++ b/TeamProjects/app/src/main/res/anim/slide_in_top.xml
@@ -3,7 +3,7 @@
diff --git a/TeamProjects/app/src/main/res/drawable/bg_edit.xml b/TeamProjects/app/src/main/res/drawable/bg_edit.xml
new file mode 100644
index 0000000..4905f21
--- /dev/null
+++ b/TeamProjects/app/src/main/res/drawable/bg_edit.xml
@@ -0,0 +1,13 @@
+
+
+ -
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/drawable/exit_chat.xml b/TeamProjects/app/src/main/res/drawable/exit_chat.xml
new file mode 100644
index 0000000..6c3197a
--- /dev/null
+++ b/TeamProjects/app/src/main/res/drawable/exit_chat.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/TeamProjects/app/src/main/res/drawable/time.xml b/TeamProjects/app/src/main/res/drawable/time.xml
new file mode 100644
index 0000000..b1d12b7
--- /dev/null
+++ b/TeamProjects/app/src/main/res/drawable/time.xml
@@ -0,0 +1,6 @@
+
+
+
+
diff --git a/TeamProjects/app/src/main/res/layout/activity_chat.xml b/TeamProjects/app/src/main/res/layout/activity_chat.xml
new file mode 100644
index 0000000..353ccc9
--- /dev/null
+++ b/TeamProjects/app/src/main/res/layout/activity_chat.xml
@@ -0,0 +1,94 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/activity_log_in.xml b/TeamProjects/app/src/main/res/layout/activity_log_in.xml
index 2685ee0..61c413f 100644
--- a/TeamProjects/app/src/main/res/layout/activity_log_in.xml
+++ b/TeamProjects/app/src/main/res/layout/activity_log_in.xml
@@ -66,6 +66,7 @@
android:hint="pw를 입력하세요"
android:textSize="12sp"
android:gravity="start"
+ android:inputType="textPassword"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"/>
diff --git a/TeamProjects/app/src/main/res/layout/activity_naver_map_geo_coding_test.xml b/TeamProjects/app/src/main/res/layout/activity_naver_map_geo_coding_test.xml
new file mode 100644
index 0000000..69b5a6a
--- /dev/null
+++ b/TeamProjects/app/src/main/res/layout/activity_naver_map_geo_coding_test.xml
@@ -0,0 +1,70 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/activity_naver_map_real_new.xml b/TeamProjects/app/src/main/res/layout/activity_naver_map_real_new.xml
new file mode 100644
index 0000000..c6ca76a
--- /dev/null
+++ b/TeamProjects/app/src/main/res/layout/activity_naver_map_real_new.xml
@@ -0,0 +1,47 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TeamProjects/app/src/main/res/layout/activity_naver_map_show_promise_place.xml b/TeamProjects/app/src/main/res/layout/activity_naver_map_show_promise_place.xml
new file mode 100644
index 0000000..5623174
--- /dev/null
+++ b/TeamProjects/app/src/main/res/layout/activity_naver_map_show_promise_place.xml
@@ -0,0 +1,16 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/activity_sign_in.xml b/TeamProjects/app/src/main/res/layout/activity_sign_in.xml
index d3e556b..0083e59 100644
--- a/TeamProjects/app/src/main/res/layout/activity_sign_in.xml
+++ b/TeamProjects/app/src/main/res/layout/activity_sign_in.xml
@@ -105,6 +105,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="@drawable/image_button"
+ android:inputType="textPassword"
android:gravity="start"
android:textSize="12sp"
android:hint="비밀번호를 입력하세요"
@@ -128,6 +129,7 @@
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:background="@drawable/image_button"
+ android:inputType="textPassword"
android:gravity="start"
android:textSize="12sp"
android:hint="비밀번호를 입력하세요"
diff --git a/TeamProjects/app/src/main/res/layout/fragment_active_promise_info.xml b/TeamProjects/app/src/main/res/layout/fragment_active_promise_info.xml
deleted file mode 100644
index 5a36619..0000000
--- a/TeamProjects/app/src/main/res/layout/fragment_active_promise_info.xml
+++ /dev/null
@@ -1,179 +0,0 @@
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/fragment_activie_and_time_in_promise_info.xml b/TeamProjects/app/src/main/res/layout/fragment_activie_and_time_in_promise_info.xml
index 4f45d6d..a695d3d 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_activie_and_time_in_promise_info.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_activie_and_time_in_promise_info.xml
@@ -86,13 +86,13 @@
android:layout_marginStart="18dp"
android:orientation="vertical"
>
-
+
+
+ android:textSize="15sp" />
@@ -172,7 +174,7 @@
@@ -186,22 +188,13 @@
android:textSize="15sp"/>
+
-
-
-
+ />
diff --git a/TeamProjects/app/src/main/res/layout/fragment_adding_friend.xml b/TeamProjects/app/src/main/res/layout/fragment_adding_friend.xml
index 26c2dfc..3de077b 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_adding_friend.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_adding_friend.xml
@@ -2,9 +2,9 @@
+ android:hint="함꼐할 친구의 이름을 입력하세요."/>
@@ -72,6 +73,7 @@
android:textColor="@color/lavender"
android:textSize="20sp"/>
-
-
-
@@ -136,34 +141,18 @@
android:textColor="@color/lavender"
android:textSize="20sp"/>
-
+
-
+
-
-
-
-
-
-
+ android:orientation="horizontal">
-
-
-
+
+
+
+ android:textColor="@color/lavender"
+ android:textSize="15sp"/>
+
+
+
+
-
+
-
-
-
+ android:textSize="20sp"/>
+ android:id="@+id/add_friend_complete">
@@ -190,4 +171,5 @@
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/fragment_first.xml b/TeamProjects/app/src/main/res/layout/fragment_first.xml
index addb7b4..3294a74 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_first.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_first.xml
@@ -35,6 +35,7 @@
android:layout_height="0dp"
android:layout_weight="1"
android:gravity="bottom"
+ android:layout_gravity="center"
android:orientation="horizontal">
+ android:text="____" />
+ android:text="____" />
diff --git a/TeamProjects/app/src/main/res/layout/fragment_friend_requested_fragment.xml b/TeamProjects/app/src/main/res/layout/fragment_friend_requested_fragment.xml
index 4713d40..cef675c 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_friend_requested_fragment.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_friend_requested_fragment.xml
@@ -80,7 +80,7 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textSize="13sp"
- android:hint="함꼐할 친구의 id를 입력하세요."/>
+ android:hint="함꼐할 친구의 이름를 입력하세요."/>
@@ -103,11 +110,12 @@
android:text="참여인원: "
android:textColor="@color/lavender"/>
@@ -86,7 +86,7 @@
android:paddingEnd="8dp"
android:paddingBottom="4dp"
android:text="확정된 약속"
- android:textSize="10sp"
+ android:textSize="8sp"
android:textColor="@color/lavender"/>
@@ -105,7 +105,7 @@
android:paddingEnd="8dp"
android:paddingBottom="4dp"
android:text="대기중인 약속"
- android:textSize="10sp"
+ android:textSize="8sp"
android:textColor="@color/lavender"/>
diff --git a/TeamProjects/app/src/main/res/layout/fragment_prom_make.xml b/TeamProjects/app/src/main/res/layout/fragment_prom_make.xml
index 0f42c85..d45174d 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_prom_make.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_prom_make.xml
@@ -65,21 +65,21 @@
android:textColor="@color/lavender"/>
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/TeamProjects/app/src/main/res/layout/fragment_waiting_promise_info.xml b/TeamProjects/app/src/main/res/layout/fragment_waiting_promise_info.xml
index 5a36619..14ca6eb 100644
--- a/TeamProjects/app/src/main/res/layout/fragment_waiting_promise_info.xml
+++ b/TeamProjects/app/src/main/res/layout/fragment_waiting_promise_info.xml
@@ -100,15 +100,7 @@
android:textAlignment="viewStart"
android:textColor="@color/black"
android:textSize="15sp"/>
-
+
-
-
-
-
+ android:orientation="vertical"/>
-
-
-
-
+ android:orientation="vertical"/>
@@ -63,23 +52,9 @@
android:layout_height="match_parent"
android:orientation="horizontal"
android:gravity="right">
-
@@ -70,32 +72,6 @@
-
-
-
-
-
-
-
diff --git a/TeamProjects/app/src/main/res/layout/item_friend_add.xml b/TeamProjects/app/src/main/res/layout/item_friend_add.xml
index ea37ed4..2ae2435 100644
--- a/TeamProjects/app/src/main/res/layout/item_friend_add.xml
+++ b/TeamProjects/app/src/main/res/layout/item_friend_add.xml
@@ -3,10 +3,11 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
- android:background="@drawable/friend_info"
+ android:background="@drawable/image_button"
+ android:elevation="15dp"
android:layout_marginStart="30dp"
android:layout_marginEnd="30dp"
- android:layout_marginTop="20dp">
+ android:layout_marginTop="8dp">
@@ -40,7 +42,7 @@
android:layout_height="wrap_content"
android:layout_gravity="center"
android:layout_weight="1"
- android:id="@+id/userName"
+ android:id="@+id/userName_request"
android:text="문관록"
android:textSize="13sp" />
@@ -67,7 +69,7 @@
android:ellipsize="marquee"
android:marqueeRepeatLimit="marquee_forever"
android:singleLine="true"
- android:id="@+id/userId"
+ android:id="@+id/userId_request"
android:text="gwanrokMoon"
android:textSize="13sp" />
@@ -81,6 +83,7 @@
android:orientation="vertical">
+ android:layout_height="wrap_content"
+ android:layout_margin="10dp"
+ android:elevation="20dp">
@@ -43,12 +45,13 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
-
+
-
-
-
-
diff --git a/TeamProjects/app/src/main/res/layout/item_promise_request.xml b/TeamProjects/app/src/main/res/layout/item_promise_request.xml
index f0873fe..f80dad3 100644
--- a/TeamProjects/app/src/main/res/layout/item_promise_request.xml
+++ b/TeamProjects/app/src/main/res/layout/item_promise_request.xml
@@ -3,6 +3,8 @@
@@ -26,22 +28,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
- android:orientation="vertical">
-
-
-
-
-
+ android:orientation="vertical"/>
@@ -28,19 +30,7 @@
android:layout_weight="1"
android:orientation="vertical">
-
-
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/app/src/main/res/layout/other_message.xml b/TeamProjects/app/src/main/res/layout/other_message.xml
new file mode 100644
index 0000000..f98e9e2
--- /dev/null
+++ b/TeamProjects/app/src/main/res/layout/other_message.xml
@@ -0,0 +1,49 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TeamProjects/settings.gradle.kts b/TeamProjects/settings.gradle.kts
index ecaa021..c4fc431 100644
--- a/TeamProjects/settings.gradle.kts
+++ b/TeamProjects/settings.gradle.kts
@@ -10,6 +10,8 @@ dependencyResolutionManagement {
repositories {
google()
mavenCentral()
+ maven("https://naver.jfrog.io/artifactory/maven/")
+
}
}