Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
49 commits
Select commit Hold shift + click to select a range
5ef6f06
feat#16:지오펜싱1차구현, 세분화이전
Nov 25, 2024
ee3ce7c
Merge branch 'dev' of https://github.com/MohaSSU/Android into feat#16…
Dec 2, 2024
951b21e
bug fix
Dec 3, 2024
1838be6
feat#16-1:conflictfix
Dec 3, 2024
c645ce5
feat#16-1:homemain 마커추가
Dec 4, 2024
a49b338
Merge pull request #42 from MohaSSU/feat#16-1bugfix
philbae0 Dec 4, 2024
410fb93
FEAT/#41 Realtime 에서 firestore로 변경
rudeore-098 Dec 4, 2024
3daf1c3
FEAT/#41 회원가입 로직 수정
rudeore-098 Dec 4, 2024
5120da4
FEAT/#41 컬렉션 Uesr 이메일 추가
rudeore-098 Dec 4, 2024
5110e79
FEAT/#41 이메일 인증 로직 수정
rudeore-098 Dec 4, 2024
670c287
FEAT/#41 이메일 인증 후 다음페이지로 이동
rudeore-098 Dec 4, 2024
e547694
Merge pull request #44 from MohaSSU/FEAT/#41-uesrprofile-database
rudeore-098 Dec 4, 2024
5cda60d
[FEAT/#41] my page 기본 정보 불러오기
rudeore-098 Dec 4, 2024
a932941
[FEAT/#41] my page 정보 다 불러옴요~
rudeore-098 Dec 4, 2024
ab5f8a7
Merge pull request #47 from MohaSSU/FEAT/#41-uesrprofile-database
rudeore-098 Dec 4, 2024
e9c34e5
[FEAT/#48] 친구 추가 dialog 화면표시
rudeore-098 Dec 4, 2024
77dca57
[FEAT/#48] 친구 추가 로직 구현 완료
rudeore-098 Dec 4, 2024
db28120
:chore:[FEAT/#19] : XML 스타일 및 색상 변경, 그래프 오류 수정
2ghrms Dec 4, 2024
3f67e74
:sparkles:[FEAT/#37] : 시간표 Edit 및 Delete 구현, 로컬 시간표 구현 완료
2ghrms Dec 4, 2024
48d921d
:bug:resolve navigation error
2ghrms Dec 4, 2024
9553d94
Merge pull request #49 from MohaSSU/feat/#37-#19
2ghrms Dec 4, 2024
ed3726d
내 위치마커이벤트, 말풍선위치수정필요
Dec 5, 2024
fec532d
[FEAT/#48] 친구 recycle view 구현 완료
rudeore-098 Dec 5, 2024
e53b6e0
Merge pull request #50 from MohaSSU/FEAT/#48-add-friends
rudeore-098 Dec 5, 2024
fc94dbb
Merge branch 'dev' of https://github.com/MohaSSU/Android into feat#43…
Dec 5, 2024
786cd4d
수정전
philbae0 Dec 5, 2024
08969c1
충돌해결
philbae0 Dec 5, 2024
5ba6f4e
내마커 친구마커 따로
philbae0 Dec 5, 2024
1ff2454
update
philbae0 Dec 6, 2024
586fff3
[FEAT/#45] time table DB 저장 완료
rudeore-098 Dec 6, 2024
9ddcd4a
마커사진 미지정
philbae0 Dec 6, 2024
0e826d7
feat#43:마커이벤트 구현, 사진x
philbae0 Dec 6, 2024
c6bae4c
토스트메세지 추가
philbae0 Dec 6, 2024
9be8c55
Merge pull request #53 from MohaSSU/feat#43marker-event
philbae0 Dec 6, 2024
e99b6b5
Merge pull request #54 from MohaSSU/FEAT/#45-timetable-DB
rudeore-098 Dec 7, 2024
726cab0
[FEAT/#55] time table DB에서 불러오기
rudeore-098 Dec 7, 2024
4d744da
[FEAT/#55] time table 수정 시 DB 반영
rudeore-098 Dec 7, 2024
3c853e4
[FEAT/#55] 저장하기 오류 수정
rudeore-098 Dec 7, 2024
3e450b4
[FEAT/#55] 친구 목록 bottomsheet
rudeore-098 Dec 7, 2024
4956e3e
마커버그 수정
philbae0 Dec 7, 2024
e623ae9
[FEAT/#55] 친구 시간표 불러오기 완료
rudeore-098 Dec 7, 2024
2dbcbdb
마커이벤트 구현
philbae0 Dec 7, 2024
0cef50a
[FEAT/#55] 버그 수정 완료
rudeore-098 Dec 8, 2024
eb96c3c
[FEAT/#55] 현재 수업 찾기 로직 추가
rudeore-098 Dec 8, 2024
471455c
[FEAT/#55] MY page 시간표 버그 수정
rudeore-098 Dec 8, 2024
828b6b6
Merge pull request #56 from MohaSSU/FEAT/#55-my-page
rudeore-098 Dec 8, 2024
d6df7aa
[FEAT/#58] 친구 리스트 검색 기능 추가
rudeore-098 Dec 14, 2024
827ebfb
[Fix] 친구 수업 표시 수정
rudeore-098 Dec 14, 2024
dacc4c5
[FEAT/#58] 바텀시트 close
rudeore-098 Dec 14, 2024
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
13 changes: 2 additions & 11 deletions .idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 6 additions & 0 deletions .idea/render.experimental.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 5 additions & 0 deletions app/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -73,6 +73,8 @@ dependencies {
implementation("com.google.firebase:firebase-analytics")
implementation("com.google.firebase:firebase-auth")

implementation ("com.google.firebase:firebase-firestore:24.7.0")
implementation ("com.google.firebase:firebase-storage:20.2.0")// 최신 버전 확인

// Naver Map SDK
implementation("com.naver.maps:map-sdk:3.19.1")
Expand All @@ -91,4 +93,7 @@ dependencies {
// When using the BoM, you don't specify versions in Firebase library dependencies
implementation("com.google.firebase:firebase-database")

implementation ("com.github.bumptech.glide:glide:4.15.1")
annotationProcessor ("com.github.bumptech.glide:compiler:4.15.1")

}
1 change: 1 addition & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -52,6 +52,7 @@
<meta-data
android:name="com.naver.maps.map.CLIENT_ID"
android:value="fs9rplnpjv" />
<receiver android:name=".GeofenceBroadcastReceiver"/>
</application>

</manifest>
Original file line number Diff line number Diff line change
@@ -1,49 +1,120 @@
package com.example.mohassu.CheckProfileAndTimeTableFragment;

import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ImageButton;
import android.widget.TextView;
import android.widget.Toast;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.fragment.app.Fragment;

import com.example.mohassu.R;
import com.example.mohassu.models.Friend;
import com.github.tlaabs.timetableview.TimetableView;
import com.google.firebase.firestore.FirebaseFirestore;

public class CheckTimeTableFragment extends Fragment {
private TimetableView timetableView;

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.fragment_check_time_table, container, false);
return inflater.inflate(R.layout.fragment_check_time_table, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

// 🔥 Back 버튼 클릭 리스너
ImageButton backButton = view.findViewById(R.id.btnBack);
backButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
// 현재 프래그먼트를 제거하고 백 스택에서 돌아가기
requireActivity()
.getSupportFragmentManager()
.popBackStack();

// `BottomSheetCheckProfileFragment` 다시 표시
BottomSheetCheckProfileFragment bottomSheet = (BottomSheetCheckProfileFragment)
requireActivity()
.getSupportFragmentManager()
.findFragmentByTag("BottomSheetCheckProfile");

if (bottomSheet != null && bottomSheet.getDialog() != null) {
bottomSheet.getDialog().show(); // 숨겨진 다이얼로그 다시 표시
}
}
});
backButton.setOnClickListener(v -> requireActivity().getSupportFragmentManager().popBackStack());

// 🔥 TimetableView 초기화
timetableView = view.findViewById(R.id.timetable);

// 🔥 타이틀 설정
TextView tvTitle = view.findViewById(R.id.tvTitle);

// 🔥 Bundle에서 친구 정보 가져오기
Bundle args = getArguments();
if (args != null) {
String userName = args.getString("nickName", "Default User");
tvTitle.setText(getString(R.string.check_time_table_title, userName));
Friend friend = (Friend) args.getSerializable("friend");
if (friend != null) {
// 🔥 친구 닉네임으로 타이틀 설정
tvTitle.setText(getString(R.string.check_time_table_title, friend.getNickname()));

// 🔥 친구의 시간표 데이터 로드
loadFriendTimeTable(friend.getUid());
} else {
Log.e("CheckTimeTableFragment", "Friend 객체가 null입니다.");
}
} else {
Log.e("CheckTimeTableFragment", "전달된 Bundle이 null입니다.");
}
}

private void loadFriendTimeTable(String friendUid) {
if (friendUid == null || friendUid.isEmpty()) {
Log.e("CheckTimeTableFragment", "friendUid가 null이거나 빈 문자열입니다.");
Toast.makeText(requireContext(), "친구의 정보를 불러올 수 없습니다.", Toast.LENGTH_SHORT).show();
return;
}

return view;
Log.d("CheckTimeTableFragment", "로드할 친구 UID: " + friendUid);

FirebaseFirestore db = FirebaseFirestore.getInstance();
db.collection("users").document(friendUid)
.get()
.addOnSuccessListener(documentSnapshot -> {
if (documentSnapshot.exists()) {
// 🔥 시간표 데이터 가져오기
String timetableData = documentSnapshot.getString("timetableData");

if (timetableData != null && !timetableData.isEmpty()) {
Log.d("CheckTimeTableFragment", "시간표 데이터: " + timetableData);

// 🔥 TimetableView에 데이터 로드
try {
timetableView.load(timetableData);
Toast.makeText(requireContext(), "시간표를 불러왔습니다.", Toast.LENGTH_SHORT).show();
} catch (Exception e) {
Log.e("CheckTimeTableFragment", "시간표 로드 중 오류 발생", e);
Toast.makeText(requireContext(), "시간표를 로드할 수 없습니다.", Toast.LENGTH_SHORT).show();
}
} else {
Toast.makeText(requireContext(), "시간표 데이터가 없습니다.", Toast.LENGTH_SHORT).show();
}
} else {
Log.e("CheckTimeTableFragment", "친구의 프로필을 찾을 수 없습니다.");
Toast.makeText(requireContext(), "프로필을 찾을 수 없습니다.", Toast.LENGTH_SHORT).show();
}
})
.addOnFailureListener(e -> {
Log.e("CheckTimeTableFragment", "시간표 불러오기 실패: " + e.getMessage(), e);
Toast.makeText(requireContext(), "시간표 불러오기 실패: " + e.getMessage(), Toast.LENGTH_SHORT).show();
});
}

@Override
public void onResume() {
super.onResume();
// 🔥 상단 타이틀 숨기기
if (requireActivity().getActionBar() != null) {
requireActivity().getActionBar().hide();
}
}

@Override
public void onDestroyView() {
super.onDestroyView();
// 🔥 상단 타이틀 복원
if (requireActivity().getActionBar() != null) {
requireActivity().getActionBar().show();
}
}
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,86 @@
package com.example.mohassu;

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.ImageButton;
import android.widget.ImageView;
import android.widget.TextView;

import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.navigation.NavController;
import androidx.navigation.Navigation;

import com.bumptech.glide.Glide;
import com.example.mohassu.models.Friend;
import com.google.android.material.bottomsheet.BottomSheetDialogFragment;

public class CheckProfileBottomSheetFragment extends BottomSheetDialogFragment {

// Friend 객체를 전달받는 newInstance 메서드
public static CheckProfileBottomSheetFragment newInstance(Friend friend) {
CheckProfileBottomSheetFragment fragment = new CheckProfileBottomSheetFragment();
Bundle args = new Bundle();
args.putSerializable("friend", friend);
fragment.setArguments(args);
return fragment;
}

@Nullable
@Override
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
return inflater.inflate(R.layout.fragment_bottom_sheet_check_profile, container, false);
}

@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
super.onViewCreated(view, savedInstanceState);

// 🔥 Friend 객체 가져오기
Friend friend = (Friend) getArguments().getSerializable("friend");

if (friend == null) {
return;
}

// 📌 UI 요소 초기화
TextView nicknameTextView = view.findViewById(R.id.text_nickname);
TextView nameTextView = view.findViewById(R.id.text_name);
ImageView photoImageView = view.findViewById(R.id.img_profile);
Button viewTimeTableButton = view.findViewById(R.id.view_time_table_button);
ImageButton btnBottomSheetClose = view.findViewById(R.id.btn_bottomsheet_close);// 🔥 추가된 버튼

// 🔥 데이터 바인딩
nicknameTextView.setText(friend.getNickname() != null ? friend.getNickname() : "닉네임 없음");
nameTextView.setText(friend.getName() != null ? friend.getName() : "이름 없음");

// 🔥 Glide를 활용하여 이미지 로드
Glide.with(requireContext())
.load(friend.getPhotoUrl())
.placeholder(R.drawable.img_logo) // 로딩 중 표시할 이미지
.error(R.drawable.img_logo) // 로딩 실패 시 표시할 이미지
.into(photoImageView);


// 🔥 "시간표 보기" 버튼 클릭 리스너 추가
viewTimeTableButton.setOnClickListener(v -> {
Bundle bundle = new Bundle();
bundle.putSerializable("friend", friend);

try {
dismiss();
NavController navController = Navigation.findNavController(requireActivity(), R.id.nav_host_fragment);
Log.d("CheckProfileBottomSheetFragment", "NavController 찾기 성공");
navController.navigate(R.id.action_checkProfileToCheckTimeTable, bundle);
} catch (Exception e) {
e.printStackTrace();
}
});

btnBottomSheetClose.setOnClickListener(v -> dismiss());
}
}
35 changes: 35 additions & 0 deletions app/src/main/java/com/example/mohassu/Constants.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
package com.example.mohassu;

import com.naver.maps.geometry.LatLng;

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

public class Constants {
public static final List<PlaceInfo> PLACES = new ArrayList<>();

static {
PLACES.add(new PlaceInfo("정보과학관", new LatLng(37.494576, 126.959706), 30));
PLACES.add(new PlaceInfo("한경직기념관", new LatLng(37.495619, 126.957444), 30));
PLACES.add(new PlaceInfo("중앙도서관", new LatLng(37.496325, 126.958585), 30));
PLACES.add(new PlaceInfo("전산관", new LatLng(37.495451, 126.959518), 30));
PLACES.add(new PlaceInfo("형남공학관", new LatLng(37.495732, 126.956152), 30));
PLACES.add(new PlaceInfo("안익태기념관", new LatLng(37.495753, 126.955012), 30));
PLACES.add(new PlaceInfo("경상관", new LatLng(37.496549, 126.955030), 30));
PLACES.add(new PlaceInfo("문화관", new LatLng(37.496576, 126.954271), 30));
PLACES.add(new PlaceInfo("베어드홀", new LatLng(37.496506, 126.956273), 30));
PLACES.add(new PlaceInfo("학생회관", new LatLng(37.496873, 126.956308), 30));
PLACES.add(new PlaceInfo("숭덕경상관", new LatLng(37.496942, 126.954923), 30));
PLACES.add(new PlaceInfo("백마관", new LatLng(37.497830, 126.956273), 30));
PLACES.add(new PlaceInfo("벤처관", new LatLng(37.497544, 126.957438), 30));
PLACES.add(new PlaceInfo("진리관", new LatLng(37.496906, 126.957495), 30));
PLACES.add(new PlaceInfo("조만식기념관", new LatLng(37.497249, 126.958212), 30));
PLACES.add(new PlaceInfo("미래관", new LatLng( 37.495610, 126.958487), 30));





// 필요시 추가
}
}
Loading