Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
24 commits
Select commit Hold shift + click to select a range
8c018ee
✨ Feat: 하단 탭 네비게이션 및 홈 화면 구현
sooloin Aug 16, 2026
df6959f
✨ Feat: 커뮤니티 리스트/상세 화면 구현
sooloin Aug 16, 2026
990f720
✨ Feat: 커뮤니티 게시글 작성/내 활동 화면 구현
sooloin Aug 16, 2026
68051d1
✨ Feat: 산책 탭 울타리 설정 화면 구현
sooloin Aug 16, 2026
158d14a
✨ Feat: 네이버 지도 연동 및 OAuth 데이터 레이어 구현
sooloin Aug 27, 2026
38b1354
✨ Feat: 마이도도 탭 화면 전체 구현
sooloin Aug 27, 2026
917337a
🐞 Fix: 엣지 투 엣지 화면에서 상태바/제스처 바와 콘텐츠 겹침 수정
sooloin Aug 27, 2026
3ea46a3
⚙️ Chore: 네이버 지도 SDK용 Gradle 저장소 등록 플러그인 추가
sooloin Aug 27, 2026
3d61ff1
✨ Feat: 실제 배포 백엔드 명세에 맞춰 소셜 로그인 데이터 레이어 재작성
sooloin Aug 27, 2026
d3928db
⚙️ Chore: 웹소켓·이미지 피커 네이티브 의존성 추가
sooloin Aug 28, 2026
ef50314
✨ Feat: 백엔드 API 데이터 레이어 및 공용 컴포넌트 구축
sooloin Aug 28, 2026
d4005fd
✨ Feat: 소셜 로그인 브라우저 방식 전환 및 회원가입 4단계 위저드 구현
sooloin Aug 28, 2026
1fc3e84
✨ Feat: 마이도도(프로필·알림·탈퇴·가족·반려동물) 화면 API 연동
sooloin Aug 28, 2026
0b1ac9d
✨ Feat: 커뮤니티 화면 API 연동
sooloin Aug 28, 2026
e8bb584
✨ Feat: 홈 화면 API 연동
sooloin Aug 28, 2026
b18627e
✨ Feat: 산책(울타리·실시간 위치·활동 기록) 화면 구현
sooloin Aug 28, 2026
b64bdde
⚙️ Chore: expo-location·expo-dev-client·fast-text-encoding 패키지 추가
sooloin Sep 9, 2026
160ab05
🐞 Fix: 반려동물 이름 필드 응답 불확실성 방어 처리
sooloin Sep 9, 2026
a4dc18d
✨ Feat: 마이도도 펫 이름 표시 방어 처리 및 최근 활동 요약 UI 개선
sooloin Sep 9, 2026
f0c74e1
✨ Feat: 산책 지도에 실제 GPS 위치 연동 및 마커·울타리 색상 개선
sooloin Sep 9, 2026
6534e87
✨ Feat: 커뮤니티 게시글 썸네일·상세 이미지 표시 및 작성 후 목록 갱신
sooloin Sep 9, 2026
924ec32
🐞 Fix: 안드로이드 STOMP 웹소켓 프레임 처리 및 TextEncoder 폴리필 추가
sooloin Sep 9, 2026
ed6aedb
🐞 Fix: 시스템 포토 피커 미지원 기기에서 이미지 선택 에러 메시지 개선
sooloin Sep 9, 2026
459492c
🐞 Fix: 날짜 선택 모달 캘린더 행 수 고정으로 높이 흔들림 방지
sooloin Sep 9, 2026
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
26 changes: 25 additions & 1 deletion app.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,11 @@
"userInterfaceStyle": "automatic",
"newArchEnabled": true,
"ios": {
"bundleIdentifier": "com.dodo.app",
"supportsTablet": true
},
"android": {
"package": "com.dodo.app",
"adaptiveIcon": {
"backgroundColor": "#E6F4FE",
"foregroundImage": "./assets/images/android-icon-foreground.png",
Expand All @@ -38,7 +40,29 @@
"backgroundColor": "#000000"
}
}
]
],
[
"@mj-studio/react-native-naver-map",
{
"client_id": "furxnmcb69"
}
],
"expo-secure-store",
[
"expo-image-picker",
{
"photosPermission": "사진을 선택하려면 앨범 접근 권한이 필요해요.",
"cameraPermission": false,
"microphonePermission": false
}
],
[
"expo-location",
{
"locationAlwaysAndWhenInUsePermission": "산책 중 현재 위치를 지도에 표시하려면 위치 접근 권한이 필요해요."
}
],
"./plugins/withNaverMapsRepository.js"
],
"experiments": {
"typedRoutes": true,
Expand Down
58 changes: 48 additions & 10 deletions app/(tabs)/_layout.tsx
Original file line number Diff line number Diff line change
@@ -1,34 +1,72 @@
import Ionicons from '@expo/vector-icons/Ionicons';
import { Tabs } from 'expo-router';
import React from 'react';
import { useSafeAreaInsets } from 'react-native-safe-area-context';

import { HapticTab } from '@/components/haptic-tab';
import { IconSymbol } from '@/components/ui/icon-symbol';
import { Colors } from '@/constants/theme';
import { useColorScheme } from '@/hooks/use-color-scheme';
import { DodoColors } from '@/constants/theme';

export default function TabLayout() {
const colorScheme = useColorScheme();
const insets = useSafeAreaInsets();

return (
<Tabs
screenOptions={{
tabBarActiveTintColor: Colors[colorScheme ?? 'light'].tint,
headerShown: false,
tabBarButton: HapticTab,
tabBarActiveTintColor: DodoColors.brand,
tabBarInactiveTintColor: DodoColors.fenceIdleLabel,
tabBarStyle: {
backgroundColor: DodoColors.surface,
borderTopColor: DodoColors.border,
height: 52 + insets.bottom,
paddingTop: 6,
paddingBottom: Math.max(insets.bottom, 8),
},
tabBarItemStyle: {
paddingVertical: 2,
},
tabBarLabelStyle: {
fontSize: 11,
lineHeight: 16,
flexShrink: 0,
},
}}
>
<Tabs.Screen
name="index"
options={{
title: 'Home',
tabBarIcon: ({ color }) => <IconSymbol size={28} name="house.fill" color={color} />,
title: '홈',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'home' : 'home-outline'} size={24} color={color} />
),
}}
/>
<Tabs.Screen
name="explore"
name="walk"
options={{
title: 'Explore',
tabBarIcon: ({ color }) => <IconSymbol size={28} name="paperplane.fill" color={color} />,
title: '산책',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'walk' : 'walk-outline'} size={24} color={color} />
),
}}
/>
<Tabs.Screen
name="community"
options={{
title: '커뮤니티',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'chatbubbles' : 'chatbubbles-outline'} size={24} color={color} />
),
}}
/>
<Tabs.Screen
name="mypage"
options={{
title: '마이도도',
tabBarIcon: ({ color, focused }) => (
<Ionicons name={focused ? 'person' : 'person-outline'} size={24} color={color} />
),
}}
/>
</Tabs>
Expand Down
Loading
Loading