Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
439 commits
Select commit Hold shift + click to select a range
5076a7a
feat: HyperlinkText 컴포넌트 구현
librarywon Jan 20, 2025
df0f0d0
feat: NotificationDetailResponseDto 수정
librarywon Jan 20, 2025
7ef751f
feat: NotificationDetailViewModel 구현
librarywon Jan 20, 2025
976fd2e
feat: NotificationDetailActivity 구현
librarywon Jan 20, 2025
758f7d0
feat: NotificationDetailUiState 구현
librarywon Jan 20, 2025
a9bc482
feat: NotificationDetail compose ui 구현
librarywon Jan 20, 2025
95e9505
feat: fcm 토큰 저장 api 연동
m6z1 Jan 20, 2025
654d248
build: 불필요한 알림 속성 제거
m6z1 Jan 20, 2025
71c22fb
feat: HyperlinkText 로직 수정
librarywon Jan 20, 2025
91cc1e8
feat: NotificationDetailEntity 기본값 수정
librarywon Jan 20, 2025
d0d340c
refactor: exported false 처리
librarywon Jan 20, 2025
c71ccdd
refactor: modifier 기본 파라미터 추가
librarywon Jan 20, 2025
869c9b8
refactor: getNotificationDetail 이름 변경
librarywon Jan 20, 2025
de5dc7c
fix: 홈 화면 데이터 init 에서 호출
m6z1 Jan 21, 2025
078a7de
fix: api 호출 시 엑세스 토큰 값 수정
m6z1 Jan 21, 2025
9649eba
build: fcm 서비스 객체 네이밍 수정
m6z1 Jan 21, 2025
b001b51
refactor: 메서드 분리 및 상수화
m6z1 Jan 21, 2025
f9a5adc
build: ktlint 포맷팅
m6z1 Jan 21, 2025
449a044
build: ktlint 포맷팅
m6z1 Jan 21, 2025
56cf04d
build: 메시지 패키지 core/common/util 로 이동
m6z1 Jan 21, 2025
23bf0d6
build: ktlint 포맷팅
m6z1 Jan 21, 2025
2837eb1
refactor: 정적 팩토리 메서드 사용하여 intent 실행
m6z1 Jan 21, 2025
c57d50b
refactor: NOTIFICATION ID 기본값 상수화
librarywon Jan 21, 2025
434c3f9
refactor: NotificationDetailBody -> NotificationDetailContent 이름 변경
librarywon Jan 21, 2025
3acc95a
Merge pull request #556 from Team-WSS/feat/526
m6z1 Jan 21, 2025
84bf4e1
refactor: HyperlinkText 컴포넌트 디렉토리 위치 변경
librarywon Jan 22, 2025
f6f19c6
Merge pull request #555 from Team-WSS/feat/528
librarywon Jan 22, 2025
89c0c12
feat: 알림 뷰 xml 구현
m6z1 Jan 22, 2025
89c2769
feat: 알림 설정 뷰 토글 상태 로직 구현
m6z1 Jan 22, 2025
00c163c
Merge branch 'develop' of https://github.com/Team-WSS/WSS-Android int…
junseo511 Jan 23, 2025
a2a5f4e
fix: 머지 충돌 해결
junseo511 Jan 23, 2025
52cfea6
refactor: 아이콘 네이밍 변경
junseo511 Jan 23, 2025
a2bc575
refactor: Notice에서 Notification으로 네이밍 이전
junseo511 Jan 23, 2025
fe583d4
fix: 잘못 바뀐 네이밍 수정
junseo511 Jan 23, 2025
94cc235
refactor: 네이밍 명시
junseo511 Jan 23, 2025
842820f
Merge pull request #552 from Team-WSS/feat/549
junseo511 Jan 23, 2025
04d4b06
feat: 피드 알림 읽음 처리 추가
junseo511 Jan 23, 2025
0185469
feat: 알림 권한 없을 경우 권한 설정 이동 다이얼로그 구현
m6z1 Jan 23, 2025
c9540b6
feat: 내 서재 보관함 레이아웃 영역 추가
yeonjeen Jan 23, 2025
9847ae6
feat: 내 서재 보관함 읽기 상태 탭별 개별 이동 로직 구현
yeonjeen Jan 23, 2025
05ee178
feat: 다른유저 서재 보관함 읽기 상태 탭별 개별 이동 로직 구현
yeonjeen Jan 23, 2025
6018733
refactor: 불필요한 코드 삭제
yeonjeen Jan 23, 2025
998721b
feat: 다른유저 서재 보관함 레이아웃 영역 추가
yeonjeen Jan 23, 2025
b5b76ec
feat: 읽기상태 경로에 따른 보관함 작품 업데이트 로직 분기처리
yeonjeen Jan 23, 2025
f8453da
feat: 보관함 이동 시 업데이트 조건에 읽기 상태 추가
yeonjeen Jan 23, 2025
491aaa0
refactor: 함수 이름 변경
yeonjeen Jan 23, 2025
325fec2
hotfix: 뷰모델에 error 및 강제업데이트 프로퍼티 추가
m6z1 Jan 23, 2025
51e6292
fix: 스플래시 내 로직 수정(자동 로그인, 강제업데이트, 401 에러)
m6z1 Jan 23, 2025
dfaeb6b
build: 1.0.9 버전 업데이트
m6z1 Jan 23, 2025
d91eeae
build: 버전코드 수정
m6z1 Jan 23, 2025
6e96e5a
Merge branch 'develop' into hotfix/560
m6z1 Jan 24, 2025
3f68605
build: 버전 관리 수정
m6z1 Jan 24, 2025
0199c0d
Merge pull request #564 from Team-WSS/hotfix/560
m6z1 Jan 24, 2025
fa6d8a1
feat: 변경된 fcm 토큰 저장 api 수정
m6z1 Jan 24, 2025
dc90ed0
Merge branch 'develop' of https://github.com/Team-WSS/WSS-Android int…
m6z1 Jan 24, 2025
0325c73
feat: 토큰 만료 시 업데이트 로직 구현
m6z1 Jan 24, 2025
b6fa864
build: 불필요한 파일 제거
m6z1 Jan 24, 2025
bab3f81
feat: 뷰에서 완료 버튼 삭제
m6z1 Jan 24, 2025
795acac
Merge remote-tracking branch 'origin/develop' into feat/554
yeonjeen Jan 24, 2025
7e9d871
refactor: 코드리뷰반영
yeonjeen Jan 24, 2025
0e06d67
refactor: 린트해결
yeonjeen Jan 24, 2025
58ce4a0
refactor: 린트해결
yeonjeen Jan 24, 2025
fc4293c
refactor: 린트해결
yeonjeen Jan 24, 2025
5b17f7e
refactor: 린트해결
yeonjeen Jan 24, 2025
1803f50
refactor: 린트해결
yeonjeen Jan 24, 2025
a462c8a
refactor: 린트해결
yeonjeen Jan 24, 2025
07719f7
refactor: 린트해결
yeonjeen Jan 24, 2025
275bc5c
refactor: 린트해결
yeonjeen Jan 24, 2025
3f0da6c
build: 불필요한 코드 제거
m6z1 Jan 24, 2025
3237f4f
feat: 알림 수신여부 api 연동
m6z1 Jan 24, 2025
9656b1d
fix: fcm service에 repository 의존성 수정
m6z1 Jan 24, 2025
69fdd3a
refactor: 토글 버튼 디바운스 적용
m6z1 Jan 24, 2025
7f0e34e
fix: 알림 수신여부 초기에 null 값 반환하는 에러 수정
m6z1 Jan 24, 2025
4454e16
Merge pull request #559 from Team-WSS/feat/558
m6z1 Jan 25, 2025
34c5538
build: ktlint 포맷팅
m6z1 Jan 25, 2025
353b180
Merge branch 'develop' of https://github.com/Team-WSS/WSS-Android int…
m6z1 Jan 25, 2025
de1b6b9
build: ktlint expression body 설정 비활성화
m6z1 Jan 25, 2025
784199a
build: ktlint 포맷팅
m6z1 Jan 25, 2025
d4cbc33
Merge pull request #561 from Team-WSS/feat/554
m6z1 Jan 25, 2025
3219bc8
feat: 토글 버튼 디자인 반영
m6z1 Jan 25, 2025
b37a2db
Merge branch 'develop' of https://github.com/Team-WSS/WSS-Android int…
m6z1 Jan 25, 2025
956d937
feat: 푸시 알림 클릭 시 notificationId 값 전달
m6z1 Jan 25, 2025
5b4b39d
build: ktlint 포맷팅
m6z1 Jan 25, 2025
c91565b
build: ktlint 포맷팅
m6z1 Jan 25, 2025
f1d6be4
refactor: 푸시알림 수신 여부 네이밍 notificationPushEnabled로 통일
m6z1 Jan 25, 2025
51cb960
refactor: fcm 토큰 저장 로직 수정
m6z1 Jan 25, 2025
5757e1a
build: 불필요한 import 제거
m6z1 Jan 25, 2025
75997b7
fix: 기존 토큰과 다를 경우 로컬에도 fcm 토큰값 업데이트
m6z1 Jan 25, 2025
bc585bb
fix: 홈 화면 읽어야 할 알림 있을 때 아이콘 수정
m6z1 Jan 25, 2025
2f7d47e
Merge pull request #566 from Team-WSS/feat/557
m6z1 Jan 25, 2025
d260682
Update README.md
m6z1 Feb 2, 2025
e2f2a30
Merge pull request #570 from Team-WSS/feat/569
m6z1 Feb 3, 2025
3b842f0
fix: 기존 pendingIntent 재사용되는 문제 해결
m6z1 Feb 11, 2025
09d9271
Merge pull request #575 from Team-WSS/feat/574
m6z1 Feb 14, 2025
1f7a6cc
feat: 홈 알림 아이콘 selector 적용
junseo511 Feb 14, 2025
63e7016
feat: 알림 뷰 종료시 알림 읽음 여부 API 호출
junseo511 Feb 14, 2025
3e8c071
feat: 약관동의 토글 아이콘 추가
yeonjeen Feb 15, 2025
b0b2f1a
feat: 약관동의 바텀시트 xml 구현
yeonjeen Feb 15, 2025
df3d8ac
feat: 약관동의 다이얼로그 xml 구현
yeonjeen Feb 15, 2025
a45cbde
feat: 약관동의 타입 enum
yeonjeen Feb 15, 2025
5eea022
feat: 스트링 추출
yeonjeen Feb 15, 2025
a070c9d
feat: 약관동의 바텀시트 버튼 스트링 추가
yeonjeen Feb 15, 2025
f7a3b06
feat: 약관동의 바텀시트 구현
yeonjeen Feb 15, 2025
e06c169
feat: 약관동의 바텀시트 뷰모델 구현
yeonjeen Feb 15, 2025
3109354
feat: 약관동의 기존유저 팝업 구현
yeonjeen Feb 15, 2025
2820bf7
feat: 온보딩에 약관동의 바텀시트 연결
yeonjeen Feb 15, 2025
f50c604
feat: 홈에 약관동의 기존유저 팝업 연결
yeonjeen Feb 15, 2025
34c7fba
Merge remote-tracking branch 'origin/develop' into feat/554
yeonjeen Feb 15, 2025
0ad17bb
feat: 로그아웃 시 유저 디바이스 값 전달
m6z1 Feb 15, 2025
2173b53
feat: 로그아웃 시 로컬에 저장된 fcm 토큰 제거
m6z1 Feb 15, 2025
cbc7f0d
feat: 홈 화면 진입 시 fcm토큰 로컬 토큰 값과 비교하는 로직 추가
m6z1 Feb 15, 2025
f7d3b53
refactor: 로그인 관련 쉐어드프리퍼런스 객체 네이밍 수정
m6z1 Feb 15, 2025
a546646
refactor: 코드리뷰 반영
yeonjeen Feb 15, 2025
af0b82e
refactor: 코드리뷰 반영
yeonjeen Feb 15, 2025
8ae9463
feat: 약관동의 Entity 구현
yeonjeen Feb 15, 2025
61b0564
refactor: 코드리뷰 반영
yeonjeen Feb 15, 2025
f1bb411
feat: flow 수집을 위한 collectWithLifecycle 확장 함수 구현
yeonjeen Feb 15, 2025
ecc8417
refactor: 확장함수 적용
yeonjeen Feb 15, 2025
57396ea
Merge pull request #577 from Team-WSS/feat/554
yeonjeen Feb 15, 2025
81bd25e
Merge remote-tracking branch 'origin/feat/571' into feat/578
yeonjeen Feb 15, 2025
90365b1
Merge pull request #576 from Team-WSS/feat/568
junseo511 Feb 15, 2025
c896c5e
build: 사용하지 않는 result 제거
m6z1 Feb 15, 2025
133703b
build: namedArgument 작성
m6z1 Feb 15, 2025
a80cafe
feat: 약관동의 응답 dto
yeonjeen Feb 16, 2025
3691971
feat: 약관동의 요청 dto
yeonjeen Feb 16, 2025
bf92ef0
feat: 약관동의 patch/get api 설정
yeonjeen Feb 16, 2025
450b0a3
feat: 약관동의 dto와 entity 매핑
yeonjeen Feb 16, 2025
7366446
feat: 레포지터리 api 연결 함수 구현
yeonjeen Feb 16, 2025
5083b8b
feat: 약관동의 보내기 api 연결
yeonjeen Feb 16, 2025
595cedd
feat: 약관동의 성공 후 바텀시트 닫기 구현
yeonjeen Feb 16, 2025
52f77c1
feat: 약관동의 확인 api 연결
yeonjeen Feb 16, 2025
4dd9d32
feat: 약관동의 여부에 따른 다이얼로그 호출 구현
yeonjeen Feb 16, 2025
9ffa193
feat: 약관동의 확인 시 동의 여부 레포지터리에 저장
yeonjeen Feb 16, 2025
3e2a457
Merge pull request #580 from Team-WSS/feat/578
yeonjeen Feb 16, 2025
8e45cd3
Merge remote-tracking branch 'origin/develop' into feat/571
yeonjeen Feb 16, 2025
0fa67c3
refactor: 린트해결
yeonjeen Feb 16, 2025
a62fa8a
refactor: 린트해결
yeonjeen Feb 16, 2025
ad8ed4d
refactor: 린트해결
yeonjeen Feb 16, 2025
5735bf6
refactor: 린트해결
yeonjeen Feb 16, 2025
9630997
refactor: 린트해결
yeonjeen Feb 16, 2025
61b7267
refactor: 린트해결
yeonjeen Feb 16, 2025
6abf589
refactor: 린트해결
yeonjeen Feb 16, 2025
3c8e413
refactor: 린트해결
yeonjeen Feb 16, 2025
3c56c05
refactor: 린트해결
yeonjeen Feb 16, 2025
ce00d94
Merge pull request #579 from Team-WSS/feat/573
m6z1 Feb 16, 2025
65c1754
refactor: 린트해결
yeonjeen Feb 16, 2025
d033038
refactor: 린트해결
yeonjeen Feb 16, 2025
164ca26
build: 린트 해결
m6z1 Feb 16, 2025
7f2d2a6
Merge branch 'feat/571' of https://github.com/Team-WSS/WSS-Android in…
m6z1 Feb 16, 2025
be0782b
build: 린트 해결
m6z1 Feb 16, 2025
f0a4722
Merge branch 'develop' into feat/571
m6z1 Feb 16, 2025
6f53008
build: 린트 해결
m6z1 Feb 16, 2025
171f1ec
Merge pull request #581 from Team-WSS/feat/571
m6z1 Feb 16, 2025
72ce856
fix: 약관동의 바텀시트 전체동의 토글 터치 영역 수정
yeonjeen Feb 17, 2025
72bc595
fix: 개인정보 처리방침 링크 수정
yeonjeen Feb 17, 2025
ce172cc
feat: 회원탈퇴 시 약관동의 여부 상태 삭제 구현
yeonjeen Feb 17, 2025
6727e22
refactor: 최대 줄 수 추가
junseo511 Feb 19, 2025
c1d7234
refactor: 제목의 줄바꿈 제거
junseo511 Feb 19, 2025
e06238b
refactor: 함수명 변경
junseo511 Feb 19, 2025
523b5fe
bugfix: 회원탈퇴 후 회원가입 시 푸시알림이 오지 않는 현상 해결
m6z1 Feb 20, 2025
9fb4846
fix: 약관 동의 다이얼로그 중복 표시 방지
yeonjeen Feb 21, 2025
6bed022
fix: 바텀시트가 열려 있을 때 약관 동의 다이얼로그 중복 표시 방지
yeonjeen Feb 21, 2025
daf1405
refactor: 약관 동의 다이얼로그 닫힐 때 상태 초기화 추가
yeonjeen Feb 21, 2025
8a0445c
refactor: 불필요한 import 제거
yeonjeen Feb 21, 2025
d02254f
refactor: 코드리뷰 반영
yeonjeen Feb 21, 2025
cfab47b
refactor: 불필요한 import 제거
yeonjeen Feb 21, 2025
62ddbef
refactor: 각 레이어에 알림을 받아오는 역할 분리
junseo511 Feb 21, 2025
f0fb233
fix: 모델 변경 과정에서 발생한 컴파일 오류 해결
junseo511 Feb 21, 2025
6b871bc
refactor: 터치영역수정
yeonjeen Feb 21, 2025
b273c1e
refactor: 코드리뷰반영
yeonjeen Feb 21, 2025
c4d4aa2
Merge pull request #588 from Team-WSS/feat/582
yeonjeen Feb 21, 2025
a28d8dc
fix: feat/582 머지 이전으로 되돌리기
yeonjeen Feb 21, 2025
ed2a56c
fix: 스트링 수정
yeonjeen Feb 21, 2025
aa85cfd
fix: 스트링 수정
yeonjeen Feb 21, 2025
0c7b752
refactor: 회원탈퇴 동의 체크 여부 변수 네이밍 수정
m6z1 Feb 21, 2025
b85e8a4
refactor: 회원탈퇴 동의 체크 업데이트 함수 네이밍 수정
m6z1 Feb 21, 2025
6d56316
Merge pull request #590 from Team-WSS/bugfix/582
yeonjeen Feb 21, 2025
84ade50
refactor: 변수 의존성 관련 리뷰 반영
junseo511 Feb 21, 2025
b0af227
Merge branch 'release/1.1.0' into bugfix/583
m6z1 Feb 21, 2025
4b86df0
build: 코드 포맷팅
m6z1 Feb 21, 2025
db28712
refactor: 인터페이스 변수 네이밍 수정
junseo511 Feb 21, 2025
b84a7e6
refactor: 인터페이스 변수 네이밍 롤백
junseo511 Feb 21, 2025
ee03d08
refactor: 인터페이스 변수 네이밍 수정
junseo511 Feb 21, 2025
9f935f4
Merge pull request #587 from Team-WSS/bugfix/583
m6z1 Feb 21, 2025
c568ab5
Merge pull request #589 from Team-WSS/bugfix/585
m6z1 Feb 21, 2025
093b9c6
refactor: 레이아웃 변경
yeonjeen Feb 21, 2025
614cf09
refactor: 불필요한 프로퍼티 삭제
yeonjeen Feb 21, 2025
5d2a6f2
Merge remote-tracking branch 'origin/release/1.1.0' into bugfix/591
yeonjeen Feb 21, 2025
fa23a55
feat: 상단바 다크모드 대응 확장함수 추가
junseo511 Feb 21, 2025
bd579d1
feat: 다크모드 대응 확장함수 공지 상세에 적용
junseo511 Feb 21, 2025
a3f3500
refactor: 가독성을 위한 줄바꿈 추가
junseo511 Feb 21, 2025
19ed06d
Merge pull request #593 from Team-WSS/bugfix/592
junseo511 Feb 21, 2025
cba3c14
Merge pull request #594 from Team-WSS/bugfix/591
yeonjeen Feb 21, 2025
f6cb442
bugfix: 비로그인 조건문 제거
m6z1 Feb 21, 2025
cab3042
Merge pull request #595 from Team-WSS/bugfix/584
m6z1 Feb 21, 2025
d86a685
build: 1.1.0 버전 업데이트
m6z1 Feb 21, 2025
74c8523
feat: 약관동의 다이얼로그 외부 터치 or 뒤로가기 막기
yeonjeen Feb 22, 2025
7720f8e
Merge remote-tracking branch 'origin/release/1.1.0' into bugfix/596
yeonjeen Feb 22, 2025
cde9112
Merge pull request #597 from Team-WSS/bugfix/596
yeonjeen Feb 22, 2025
85889af
Merge branch 'release/1.1.0' of https://github.com/Team-WSS/WSS-Andro…
m6z1 Feb 24, 2025
5383511
build: 버전 코드 업데이트
m6z1 Feb 24, 2025
e6b073b
Squashed commit of the following:
m6z1 Feb 25, 2025
37d12e9
Merge branch 'release/1.1.0' into release_wss
m6z1 Feb 25, 2025
52934da
Merge branch 'master' into release_wss
m6z1 Feb 25, 2025
3b60d56
Merge branch 'develop' into release_wss
m6z1 Feb 25, 2025
cc2e54e
Revert "Merge branch 'develop' into release_wss"
m6z1 Mar 4, 2025
269ae18
Merge pull request #599 from Team-WSS/release_wss
m6z1 Mar 4, 2025
1cd719b
bugfix: 회원탈퇴 후 회원가입 시 푸시알림이 오지 않는 현상 해결
m6z1 Feb 20, 2025
432736d
refactor: 회원탈퇴 동의 체크 여부 변수 네이밍 수정
m6z1 Feb 21, 2025
e860b96
refactor: 회원탈퇴 동의 체크 업데이트 함수 네이밍 수정
m6z1 Feb 21, 2025
a4ec530
fix: 스트링 수정
yeonjeen Feb 21, 2025
8d1c40c
fix: 스트링 수정
yeonjeen Feb 21, 2025
3c22ee2
refactor: 최대 줄 수 추가
junseo511 Feb 19, 2025
2ab297f
refactor: 제목의 줄바꿈 제거
junseo511 Feb 19, 2025
4982002
refactor: 함수명 변경
junseo511 Feb 19, 2025
7c36105
refactor: 각 레이어에 알림을 받아오는 역할 분리
junseo511 Feb 21, 2025
fa198de
fix: 모델 변경 과정에서 발생한 컴파일 오류 해결
junseo511 Feb 21, 2025
e9485be
refactor: 변수 의존성 관련 리뷰 반영
junseo511 Feb 21, 2025
4678a70
refactor: 인터페이스 변수 네이밍 수정
junseo511 Feb 21, 2025
b63ef8f
refactor: 인터페이스 변수 네이밍 롤백
junseo511 Feb 21, 2025
5b09375
refactor: 인터페이스 변수 네이밍 수정
junseo511 Feb 21, 2025
b5e2547
feat: 상단바 다크모드 대응 확장함수 추가
junseo511 Feb 21, 2025
c01c8d1
feat: 다크모드 대응 확장함수 공지 상세에 적용
junseo511 Feb 21, 2025
2797093
refactor: 가독성을 위한 줄바꿈 추가
junseo511 Feb 21, 2025
3bd28d1
refactor: 레이아웃 변경
yeonjeen Feb 21, 2025
b16fa89
refactor: 불필요한 프로퍼티 삭제
yeonjeen Feb 21, 2025
c3cba45
bugfix: 비로그인 조건문 제거
m6z1 Feb 21, 2025
7ddfb0f
build: 1.1.0 버전 업데이트
m6z1 Feb 21, 2025
e0e6805
feat: 약관동의 다이얼로그 외부 터치 or 뒤로가기 막기
yeonjeen Feb 22, 2025
edbc9ce
build: 버전 코드 업데이트
m6z1 Feb 24, 2025
730e5cd
fix: 약관동의 확인 다이얼로그 닫힘 이벤트 처리 개선
yeonjeen Mar 3, 2025
abb2218
refactor: 약관 동의 확인 다이얼로그 상태 관리 로직 개선
yeonjeen Mar 3, 2025
72f0931
refactor: 약관 동의 확인 다이얼로그 상태 관리 로직 개선
yeonjeen Mar 3, 2025
484ad1d
fix: 백스택으로 홈 복귀 시 약관 동의 확인 다이얼로그 중복 표시 문제 해결
yeonjeen Mar 3, 2025
64890cf
Merge remote-tracking branch 'origin/develop' into bugfix/600
yeonjeen Mar 4, 2025
ae0a1ff
Merge pull request #602 from Team-WSS/bugfix/600
yeonjeen Mar 4, 2025
46c4801
fix: 프로필 설명 글이 짤림 현상 해결
m6z1 Mar 15, 2025
5decae1
feat: FeedDetailBack, NovelDetailBack, OtherUserProfileBack 시 피드를 갱신하…
s9hn Mar 17, 2025
a056d78
feat: FeedDetailBack, NovelDetailBack, OtherUserProfileBack 시 해당 피드만 …
s9hn Mar 17, 2025
47b97d6
refactor: 주석 TODO 처리
s9hn Mar 18, 2025
f605208
Merge pull request #610 from Team-WSS/feat/603
s9hn Mar 19, 2025
31665b4
Merge pull request #607 from Team-WSS/feat/604
m6z1 Mar 19, 2025
e4f3af1
refactor: 에러 다이얼로그 람다 수정
s9hn Mar 21, 2025
8c91365
refactor: 네비게이션 뒤로가기 시 뷰모델 업데이트 함수 추가
s9hn Mar 21, 2025
5d2fb48
Merge pull request #616 from Team-WSS/feat/605
m6z1 Mar 21, 2025
11e5370
build: wildcard import 제거
m6z1 Mar 21, 2025
a42d01b
Merge pull request #615 from Team-WSS/feat/606
s9hn Mar 21, 2025
1855530
build: 1.1.1 버전 업데이트
m6z1 Mar 23, 2025
48c27de
Merge branch 'master' into release/1.1.1
m6z1 Mar 25, 2025
19b0c1b
build: ktlint 포맷팅
m6z1 Mar 25, 2025
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
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,8 @@ class FeedDetailActivity : BaseActivity<ActivityFeedDetailBinding>(activity_feed
false -> likeCount + 1
}

view.findViewById<TextView>(tv_feed_thumb_up_count).text = updatedLikeCount.toString()
view.findViewById<TextView>(tv_feed_thumb_up_count).text =
updatedLikeCount.toString()
view.isSelected = !view.isSelected

singleEventHandler.debounce(coroutineScope = lifecycleScope) {
Expand Down Expand Up @@ -367,6 +368,7 @@ class FeedDetailActivity : BaseActivity<ActivityFeedDetailBinding>(activity_feed
val nickname = result.data?.getStringExtra(USER_NICKNAME).orEmpty()
val intent = Intent().apply {
putExtra(USER_NICKNAME, nickname)
putExtra(FEED_ID, feedId)
}
setResult(BlockUser.RESULT_OK, intent)
if (!isFinishing) finish()
Expand Down Expand Up @@ -462,19 +464,22 @@ class FeedDetailActivity : BaseActivity<ActivityFeedDetailBinding>(activity_feed
CreateFeed, FeedDetailRefreshed ->
RemovedFeedDialogFragment
.newInstance {
setResult(CreateFeed.RESULT_OK)
val extraIntent = Intent().apply { putExtra(FEED_ID, feedId) }
setResult(FeedDetailRefreshed.RESULT_OK, extraIntent)
if (!isFinishing) finish()
}.show(supportFragmentManager, RemovedFeedDialogFragment.TAG)

else -> {
setResult(FeedDetailRemoved.RESULT_OK)
val extraIntent = Intent().apply { putExtra(FEED_ID, feedId) }
setResult(FeedDetailRemoved.RESULT_OK, extraIntent)
if (!isFinishing) finish()
}
}
}

feedDetailUiState.isServerError -> {
setResult(FeedDetailError.RESULT_OK)
val extraIntent = Intent().apply { putExtra(FEED_ID, feedId) }
setResult(FeedDetailError.RESULT_OK, extraIntent)
if (!isFinishing) finish()
}

Expand Down Expand Up @@ -537,7 +542,7 @@ class FeedDetailActivity : BaseActivity<ActivityFeedDetailBinding>(activity_feed
}

companion object {
private const val FEED_ID: String = "FEED_ID"
const val FEED_ID: String = "FEED_ID"
private const val DEFAULT_FEED_ID: Long = -1
private const val NOTIFICATION_ID: String = "NOTIFICATION_ID"
private const val LOTTIE_IMAGE = "lottie_websoso_loading.json"
Expand Down
148 changes: 76 additions & 72 deletions app/src/main/java/com/into/websoso/ui/main/feed/FeedFragment.kt
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.into.websoso.ui.main.feed

import android.annotation.SuppressLint
import android.content.Intent
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.WindowManager
import android.widget.PopupWindow
import android.widget.TextView
import androidx.activity.result.ActivityResultLauncher
import androidx.activity.result.ActivityResult
import androidx.activity.result.contract.ActivityResultContracts.StartActivityForResult
import androidx.core.view.children
import androidx.core.view.isVisible
Expand All @@ -32,11 +31,9 @@ import com.into.websoso.core.common.ui.base.BaseFragment
import com.into.websoso.core.common.ui.custom.WebsosoChip
import com.into.websoso.core.common.ui.model.ResultFrom.BlockUser
import com.into.websoso.core.common.ui.model.ResultFrom.CreateFeed
import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailBack
import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailError
import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailRefreshed
import com.into.websoso.core.common.ui.model.ResultFrom.FeedDetailRemoved
import com.into.websoso.core.common.ui.model.ResultFrom.NovelDetailBack
import com.into.websoso.core.common.ui.model.ResultFrom.OtherUserProfileBack
import com.into.websoso.core.common.ui.model.ResultFrom.WithdrawUser
import com.into.websoso.core.common.util.InfiniteScrollListener
import com.into.websoso.core.common.util.SingleEventHandler
Expand All @@ -50,6 +47,7 @@ import com.into.websoso.databinding.FragmentFeedBinding
import com.into.websoso.databinding.MenuFeedPopupBinding
import com.into.websoso.ui.createFeed.CreateFeedActivity
import com.into.websoso.ui.feedDetail.FeedDetailActivity
import com.into.websoso.ui.feedDetail.FeedDetailActivity.Companion.FEED_ID
import com.into.websoso.ui.feedDetail.model.EditFeedModel
import com.into.websoso.ui.main.feed.adapter.FeedAdapter
import com.into.websoso.ui.main.feed.adapter.FeedType.Feed
Expand Down Expand Up @@ -80,7 +78,74 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
private val feedViewModel: FeedViewModel by viewModels()
private val feedAdapter: FeedAdapter by lazy { FeedAdapter(onClickFeedItem()) }
private val singleEventHandler: SingleEventHandler by lazy { SingleEventHandler.from() }
private lateinit var activityResultCallback: ActivityResultLauncher<Intent>
private val activityResultCallback by lazy {
registerForActivityResult(StartActivityForResult()) { result ->
handleActivityResult(result)
}
}

private fun handleActivityResult(result: ActivityResult) {
when (result.resultCode) {
FeedDetailRefreshed.RESULT_OK -> {
val removedFeedId = result.data?.getLongExtra(FEED_ID, -1) ?: -1
feedViewModel.updateRefreshedFeeds(removedFeedId)
}

CreateFeed.RESULT_OK -> {
feedViewModel.updateRefreshedFeeds(true)
// TODO: 피드 아예 초기화

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_create_done),
icon = ic_novel_detail_check,
)
}

FeedDetailRemoved.RESULT_OK -> {
val removedFeedId = result.data?.getLongExtra(FEED_ID, -1) ?: -1
feedViewModel.updateRefreshedFeeds(removedFeedId)

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_removed_feed_snackbar),
icon = ic_blocked_user_snack_bar,
)
}

FeedDetailError.RESULT_OK -> {
val removedFeedId = result.data?.getLongExtra(FEED_ID, -1) ?: -1
feedViewModel.updateRefreshedFeeds(removedFeedId)

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_server_error),
icon = ic_blocked_user_snack_bar,
)
}

BlockUser.RESULT_OK -> {
val nickname = result.data?.getStringExtra(USER_NICKNAME).orEmpty()
val removedFeedId = result.data?.getLongExtra(FEED_ID, -1) ?: -1

feedViewModel.updateRefreshedFeeds(removedFeedId)

showWebsosoSnackBar(
view = binding.root,
message = getString(block_user_success_message, nickname),
icon = ic_novel_detail_check,
)
}

WithdrawUser.RESULT_OK -> {
showWebsosoSnackBar(
view = binding.root,
message = getString(R.string.other_user_page_withdraw_user),
icon = ic_blocked_user_snack_bar,
)
}
}
}

override fun onCreateView(
inflater: LayoutInflater,
Expand Down Expand Up @@ -134,7 +199,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
false -> likeCount + 1
}

view.findViewById<TextView>(tv_feed_thumb_up_count).text = updatedLikeCount.toString()
view.findViewById<TextView>(tv_feed_thumb_up_count).text =
updatedLikeCount.toString()
view.isSelected = !view.isSelected

singleEventHandler.debounce(coroutineScope = lifecycleScope) {
Expand Down Expand Up @@ -296,71 +362,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {

initView()
setupObserver()
refreshView()
tracker.trackEvent("feed_all")
}

private fun refreshView() {
if (::activityResultCallback.isInitialized.not()) {
activityResultCallback = registerForActivityResult(StartActivityForResult()) { result ->
when (result.resultCode) {
FeedDetailBack.RESULT_OK,
NovelDetailBack.RESULT_OK,
OtherUserProfileBack.RESULT_OK,
-> feedViewModel.updateRefreshedFeeds(false)

CreateFeed.RESULT_OK -> {
feedViewModel.updateRefreshedFeeds(true)

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_create_done),
icon = ic_novel_detail_check,
)
}

FeedDetailRemoved.RESULT_OK -> {
feedViewModel.updateRefreshedFeeds(false)

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_removed_feed_snackbar),
icon = ic_blocked_user_snack_bar,
)
}

FeedDetailError.RESULT_OK -> {
feedViewModel.updateRefreshedFeeds(false)

showWebsosoSnackBar(
view = binding.root,
message = getString(feed_server_error),
icon = ic_blocked_user_snack_bar,
)
}

BlockUser.RESULT_OK -> {
feedViewModel.updateRefreshedFeeds(false)

val nickname = result.data?.getStringExtra(USER_NICKNAME).orEmpty()

showWebsosoSnackBar(
view = binding.root,
message = getString(block_user_success_message, nickname),
icon = ic_novel_detail_check,
)
}

WithdrawUser.RESULT_OK -> {
showWebsosoSnackBar(
view = binding.root,
message = getString(R.string.other_user_page_withdraw_user),
icon = ic_blocked_user_snack_bar,
)
}
}
}
}
activityResultCallback
}

private fun initView() {
Expand Down Expand Up @@ -433,7 +436,8 @@ class FeedFragment : BaseFragment<FragmentFeedBinding>(fragment_feed) {
val chip = it as Chip
chip.isSelected = chip.text == selectedCategory.category.krTitle
}

// TODO: 최초로 init할 때 전체상태로 updateFeeds 호출함 -> 리프레시되어야하기 때문에 true 설정
// TODO: 뷰모델 init으로 옮기기, isRefreshed 상태 없애기
feedViewModel.updateFeeds(true)
}
}
Expand Down
16 changes: 14 additions & 2 deletions app/src/main/java/com/into/websoso/ui/main/feed/FeedViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -51,6 +51,10 @@ class FeedViewModel @Inject constructor(
}

fun updateFeeds(isRefreshed: Boolean = false) {
// TODO: 피드 아이템 더 불러오기 함수
// TODO: 카테고리 누를 시 init 함수
// TODO: 새로고침 함수
// TODO: 모두 분리하기
feedUiState.value?.let { feedUiState ->
if (!feedUiState.isLoadable) return

Expand All @@ -63,7 +67,7 @@ class FeedViewModel @Inject constructor(
when (feedUiState.feeds.isNotEmpty()) {
true -> getFeedsUseCase(
selectedCategory.enTitle,
feedUiState.feeds.minOf { it.id }
feedUiState.feeds.minOf { it.id },
)

false -> getFeedsUseCase(selectedCategory.enTitle)
Expand Down Expand Up @@ -147,6 +151,14 @@ class FeedViewModel @Inject constructor(
}
}

fun updateRefreshedFeeds(feedId: Long) {
feedUiState.value?.let { feedUiState ->
_feedUiState.value = feedUiState.copy(
feeds = feedUiState.feeds.filterNot { it.id == feedId },
)
}
}

fun updateLike(selectedFeedId: Long, isLiked: Boolean, updatedLikeCount: Int) {
feedUiState.value?.let { feedUiState ->
val selectedFeed = feedUiState.feeds.find { feedModel ->
Expand Down Expand Up @@ -227,7 +239,7 @@ class FeedViewModel @Inject constructor(
}.onSuccess {
_feedUiState.value = feedUiState.copy(
loading = false,
feeds = feedUiState.feeds.filter { it.id != feedId }
feeds = feedUiState.feeds.filter { it.id != feedId },
)
}.onFailure {
_feedUiState.value = feedUiState.copy(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -323,6 +323,10 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>(R.layout.fragment_home) {
private fun showTermsAgreementDialog() {
val dialog = TermsAgreementDialogFragment.newInstance()
dialog.show(parentFragmentManager, TermsAgreementDialogFragment.TERMS_AGREEMENT_TAG)

dialog.onDismissListener = {
homeViewModel.updateTermsAgreementDialogState()
}
}

companion object {
Expand Down
21 changes: 19 additions & 2 deletions app/src/main/java/com/into/websoso/ui/main/home/HomeViewModel.kt
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.into.websoso.ui.main.home

import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.into.websoso.data.model.PopularFeedsEntity
Expand Down Expand Up @@ -35,6 +36,7 @@ class HomeViewModel
private val pushMessageRepository: PushMessageRepository,
private val notificationRepository: NotificationRepository,
private val userRepository: UserRepository,
private val savedStateHandle: SavedStateHandle,
) : ViewModel() {
private val _uiState: MutableLiveData<HomeUiState> = MutableLiveData(HomeUiState())
val uiState: LiveData<HomeUiState> get() = _uiState
Expand All @@ -47,6 +49,12 @@ class HomeViewModel
private val _showTermsAgreementDialog = MutableStateFlow(false)
val showTermsAgreementDialog: StateFlow<Boolean> = _showTermsAgreementDialog.asStateFlow()

private var isTermsAgreementChecked: Boolean
get() = savedStateHandle["isTermsAgreementChecked"] ?: false
set(value) {
savedStateHandle["isTermsAgreementChecked"] = value
}

init {
updateHomeData(true)
updateNotificationUnread()
Expand Down Expand Up @@ -245,13 +253,22 @@ class HomeViewModel
viewModelScope.launch {
runCatching { userRepository.fetchTermsAgreements() }
.onSuccess { terms ->

termsAgreementState.value = terms
_showTermsAgreementDialog.value = !(terms.serviceAgreed && terms.privacyAgreed)
val isShownDialog = !(terms.serviceAgreed && terms.privacyAgreed)

_showTermsAgreementDialog.value = isShownDialog

if (!isShownDialog) {
isTermsAgreementChecked = true
}
}
}
}

fun updateTermsAgreementDialogState() {
_showTermsAgreementDialog.value = false
}

fun updateFCMToken(token: String) {
viewModelScope.launch {
runCatching {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
package com.into.websoso.ui.main.home.dialog

import android.content.DialogInterface
import android.os.Bundle
import android.view.View
import com.into.websoso.R
Expand All @@ -9,6 +10,8 @@ import com.into.websoso.ui.termsAgreement.TermsAgreementDialogBottomSheet

class TermsAgreementDialogFragment :
BaseDialogFragment<DialogTermsAgreementPopupMenuBinding>(R.layout.dialog_terms_agreement_popup_menu) {
var onDismissListener: (() -> Unit)? = null

override fun onViewCreated(
view: View,
savedInstanceState: Bundle?,
Expand Down Expand Up @@ -42,6 +45,11 @@ class TermsAgreementDialogFragment :
dismiss()
}

override fun onDismiss(dialog: DialogInterface) {
super.onDismiss(dialog)
onDismissListener?.invoke()
}

companion object {
const val TERMS_AGREEMENT_TAG = "TermsAgreementDialog"
const val TERMS_AGREEMENT_BOTTOM_SHEET_TAG = "TermsAgreementDialogBottomSheet"
Expand Down
Loading