Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

부산대 Android_김정희_6주차 과제_1단계 #33

Merged
merged 119 commits into from
Jul 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
119 commits
Select commit Hold shift + click to select a range
04c907f
Initial commit
MyStoryG Jun 15, 2024
8b097b3
Initial commit
MyStoryG Jun 15, 2024
1e95da9
Docs: README 작성
lovelhee Jul 1, 2024
4a7f9a8
Add: 검색어 삭제 버튼 사진 추가
lovelhee Jul 1, 2024
42afbd1
Design: 검색어 입력 및 검색 결과 표시 기본 레이아웃 구현
lovelhee Jul 1, 2024
517f77f
Add: strings.xml 추가
lovelhee Jul 1, 2024
7ce9207
Feat: 데이터베이스 스키마 정의
lovelhee Jul 2, 2024
97252e2
Feat: SQliteOpenHelper 상속
lovelhee Jul 2, 2024
de8235e
Feat: ViewModel 생성
lovelhee Jul 2, 2024
c09822b
Feat: 데이터 삽입 기능 구현
lovelhee Jul 2, 2024
6648952
Add: strings.xml 한글 리소스 추가
lovelhee Jul 5, 2024
f768d06
Docs: step2 README 작성
lovelhee Jul 5, 2024
4667bef
Comment: SearchView 주석 삭제
lovelhee Jul 5, 2024
34d7f19
Design: 검색어 저장 목록 아이템 디자인
lovelhee Jul 5, 2024
af00889
Design: 검색 결과 목록 아이템 디자인
lovelhee Jul 5, 2024
4696833
Add: 마커 아이콘 추가
lovelhee Jul 5, 2024
270aa41
Feat: 데이터 존재 체킹 및 데이터 검색, 반환 기능 추가
lovelhee Jul 5, 2024
d8b123a
Feat: 검색어 저장 목록 관리 및 표시
lovelhee Jul 5, 2024
ba8c9e9
Feat: 검색 결과 목록 관리 및 표시
lovelhee Jul 5, 2024
d87066d
Feat: DB에서 검색어와 일치하는 장소 검색 기능
lovelhee Jul 5, 2024
14eab04
Feat: 검색 및 검색 결과-검색어 저장 목록 관리, 표시
lovelhee Jul 5, 2024
bbf77e9
Initial commit
MyStoryG Jul 7, 2024
566e065
Merge remote-tracking branch 'keyword/step2' into step0
lovelhee Jul 8, 2024
9761014
Docs: README 기능 작성
lovelhee Jul 9, 2024
a8018be
Chore: 카카오 API 키 저장
lovelhee Jul 9, 2024
83e4264
Design: 장소명 글씨 크기 변경
lovelhee Jul 9, 2024
d55b398
Remove: insertData 기능 삭제
lovelhee Jul 9, 2024
0a8dbb8
Feat: Retrofit 인터페이스 생성
lovelhee Jul 9, 2024
72262c9
Feat: Retrofit 클라이언트 설정
lovelhee Jul 9, 2024
6199ae0
Feat: 카카오 API 호출
lovelhee Jul 9, 2024
a1ea940
Feat: DTO 파일 생성
lovelhee Jul 9, 2024
5ad8740
Design: 검색 결과 목록 아이템 크기 수정
lovelhee Jul 10, 2024
923a0e6
Fix: Document-category_group_name 으로 변경
lovelhee Jul 10, 2024
ed5c86b
Fix: Document-category_group_name 으로 변경
lovelhee Jul 10, 2024
9d0cb76
Design: 지도 화면 구성
lovelhee Jul 11, 2024
1ad92d6
Docs: 3주차 과제 2단계 기능 명세
lovelhee Jul 11, 2024
c4d7d2c
Chore: MapActivity 인텐트 필터 추가 및 application 이름 설정
lovelhee Jul 11, 2024
789b398
Feat: KakaoMapSdk.init 호출
lovelhee Jul 11, 2024
200828c
Design: 검색 결과 항목 디자인 수정
lovelhee Jul 11, 2024
e2799c0
Feat: 뒤로가기 버튼 클릭시 화면 이동 기능 추가
lovelhee Jul 11, 2024
8969b8d
Feat: 지도 시작 및 검색창 클릭시 화면 이동 기능 추가
lovelhee Jul 11, 2024
ecfb8d4
Add: 돋보기 이미지 추가
lovelhee Jul 11, 2024
491fd21
Add: strings 리소스 추가
lovelhee Jul 11, 2024
6547a98
Chore: 카카오지도 SDK 의존성 추가 및 에뮬레이터 설정
lovelhee Jul 11, 2024
779e8bf
Feat: MapView resume, pause 호출
lovelhee Jul 12, 2024
1012e1c
Chore: HTTP 트래픽 차단 해결 (네트워크 보안 구성 변경)
lovelhee Jul 12, 2024
8668c0b
Merge remote-tracking branch 'search/step2' into step0
lovelhee Jul 15, 2024
5387bbc
Fix: private 변수로 변경
lovelhee Jul 16, 2024
39c2aca
Fix: 네트워크 에러 메세지 표시
lovelhee Jul 16, 2024
cdc82a9
Comment: 키 해시 주석 제거
lovelhee Jul 16, 2024
f5f422f
Docs: README 기능 작성
lovelhee Jul 16, 2024
3355c00
Feat: 저장된 검색어 선택시 해당 검색어 검색 결과 표시(검색창 자동 입력)
lovelhee Jul 16, 2024
649ec19
부산대 Android_김정희_4주차 과제_0단계 (#25)
lovelhee Jul 16, 2024
964fa52
Add: 마커 아이콘 이미지 추가
lovelhee Jul 17, 2024
7f38d89
Comment: 빌드 오류 막기 위해 주석 처리
lovelhee Jul 17, 2024
b251102
Feat: 데이터 넘겨주는 기능 추가
lovelhee Jul 17, 2024
d636f3f
Feat: 선택 항목 지도 표시 및 마지막 위치 저장 기능
lovelhee Jul 17, 2024
2ddc919
Refactor: 코드 리팩토링
lovelhee Jul 17, 2024
ebf3aa5
Feat: 위도, 경도 데이터 추가
lovelhee Jul 17, 2024
a799aac
Design: BottomSheet 래이아웃 디자인
lovelhee Jul 17, 2024
e4daf88
Feat: BottomSheet 띄우는 기능 추가
lovelhee Jul 17, 2024
59f842d
Add: 한글 리소스 추가
lovelhee Jul 17, 2024
2c127ca
Design: 에러 메세지 화면 디자인
lovelhee Jul 17, 2024
078fd2e
Add: 로딩 이미지 추가
lovelhee Jul 17, 2024
2623c4d
Design: errorLayout 추가
lovelhee Jul 17, 2024
3a508e5
Feat: 카카오지도 onMapError() 호출 시 에러 화면 띄우는 기능 추가
lovelhee Jul 17, 2024
305453d
Initial commit
MyStoryG Jul 18, 2024
95bf427
Docs: Step2 기능 작성
lovelhee Jul 19, 2024
706f113
Test: MainActivity UI 테스트 실행
lovelhee Jul 19, 2024
b0126f0
Test: MapActivity UI 테스트 실행
lovelhee Jul 19, 2024
2105f5b
Merge branch 'lovelhee' into step2
lovelhee Jul 19, 2024
f515e0f
Style: 테스트를 위해 public으로 변수 변경
lovelhee Jul 19, 2024
19241e0
Merge remote-tracking branch 'origin/step2' into step2
lovelhee Jul 19, 2024
44b0c8b
Test: MainActivity 단위 테스트 실행
lovelhee Jul 19, 2024
2a48e98
Style: 테스트를 위해 public으로 변수 변경
lovelhee Jul 19, 2024
27fdfc3
Test: MapActivity 단위 테스트 실행
lovelhee Jul 19, 2024
bc60c27
부산대 Android_김정희_4주차 과제_1단계 (#49)
lovelhee Jul 21, 2024
2f197c3
Merge branch 'lovelhee' into step2
LeeOhHyung Jul 21, 2024
a9d021d
Refactor: 패키지 분리
lovelhee Jul 22, 2024
1426ecf
Merge remote-tracking branch 'origin/step2' into step2
lovelhee Jul 22, 2024
f410091
Merge remote-tracking branch 'location/step2' into step0
lovelhee Jul 22, 2024
8b53376
Docs: Step1 기능 명세
lovelhee Jul 23, 2024
df98574
Feat: Room 데이터베이스 정의
lovelhee Jul 23, 2024
a326fb9
Feat: 데이터베이스 작업 정의
lovelhee Jul 23, 2024
f64ef36
Feat: 데이터 소스 관리 Repository 정의
lovelhee Jul 23, 2024
5ef4c73
Feat: 데이터 로직 처리
lovelhee Jul 23, 2024
58f0b7c
Feat: Room 데이터 불러와서 UI 업데이트하는 기능 추가
lovelhee Jul 23, 2024
10d4af5
Feat: Room 데이터베이스 엔티티 정의
lovelhee Jul 23, 2024
0ef011a
Feat: Hilt 초기화
lovelhee Jul 23, 2024
2fe82cb
Feat: 의존성 주입 모듈 추가
lovelhee Jul 23, 2024
dd6806c
Feat: Hilt 사용하여 ViewModel 주입 설정
lovelhee Jul 23, 2024
5f276af
Feat: Hilt 의존성 주입 적용
lovelhee Jul 23, 2024
a8d7d08
Feat: Hilt 사용하여 DAO 주입
lovelhee Jul 23, 2024
d876e3d
Feat: Hilt 사용하여 Application, Repository 주입 설정
lovelhee Jul 23, 2024
bd802f4
Fix: step1 피드백 반영
lovelhee Jul 25, 2024
f34c050
Docs: Step2 기능 명세
lovelhee Jul 25, 2024
fb20a77
Feat: 검색창 클릭시 데이터 초기화 기능 추가
lovelhee Jul 25, 2024
80e3e32
Feat: 커스텀 어댑터 추가
lovelhee Jul 26, 2024
f99f9a8
Refactor: MainActivity MVVM 패턴 적용
lovelhee Jul 26, 2024
e8f6ef1
Refactor: MapActivity MVVM 패턴 적용
lovelhee Jul 26, 2024
4efd28f
Refactor: MapActivity(error_layout.xml) MVVM 패턴 적용
lovelhee Jul 26, 2024
c9b3deb
Remove: 커스텀 어댑터 삭제
lovelhee Jul 26, 2024
b1a01df
Refactor: MainActivity MVVM 패턴 적용 수정
lovelhee Jul 26, 2024
b119c29
Refactor: 코루틴을 사용하여 MapViewModel 비동기 처리 개선
lovelhee Jul 26, 2024
397118a
Refactor: MainActivity MVVM 패턴 적용 수정
lovelhee Jul 27, 2024
b2cd4d4
Fix: 검색창 클릭시 DB 초기화 기능 삭제
lovelhee Jul 27, 2024
519b7a4
Refactor: MapActivity MVVM 패턴 적용 수정(bottom_sheet)
lovelhee Jul 27, 2024
cd214ea
Feat: 불필요한 부분 수정
lovelhee Jul 27, 2024
5c15df7
Merge remote-tracking branch 'refactoring/step2' into step0
lovelhee Jul 29, 2024
ff3f7cb
Fix: 4주차 2단계 피드백 반영
lovelhee Jul 29, 2024
a1e9ada
Docs: 1단계 기능 명세
lovelhee Jul 30, 2024
93a7ed4
Add: 한글 리소스 추가
lovelhee Jul 30, 2024
1744a99
Build: google-services 주석 제거
lovelhee Jul 30, 2024
68a8288
Add: 지도 아이콘 추가
lovelhee Jul 30, 2024
02d1ed4
Build: 시작 activity 설정
lovelhee Jul 30, 2024
faf35d9
Feat: FirebaseRemoteConfig 의존성 추가
lovelhee Jul 30, 2024
7ca97f5
Feat: SplashScreen을 위한 ViewModel 추가
lovelhee Jul 30, 2024
77fd1dc
Feat: SplashScreen 기능 추가
lovelhee Jul 30, 2024
1947208
Merge branch 'lovelhee' into step1
lovelhee Jul 30, 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
19 changes: 19 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -1 +1,20 @@
# android-map-notification

## Step1

### 📜 Description

카카오맵 클론 코딩 _ 알림-파이어베이


### 🎯 Tasks

- Main 기능 : **Splash Screen**

- 초기 진입 화면 추가
- Firebase의 Remote Config 설정
- 서비스 상태를 나타내는 매개변수 각각 등록
- 매개변수 이름 : serviceState, serviceMessage
- 매개변수 serviceState 값이 ON_SERVICE일 때만 초기 진입 화면이 지도 화면으로 넘어감
- 매개변수 serviceState 값이 ON_SERVICE이 아닌 경우, serviceMessage 값을 초기 진입 화면 하단에 표시하고 지도 화면으로 진입하지 않음
- 서버 상태, UI 로딩 등에 대한 상태 관리
20 changes: 12 additions & 8 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -7,31 +7,35 @@
<uses-permission android:name="android.permission.INTERNET" />

<application
android:name=".application.AppClass"
android:allowBackup="true"
android:dataExtractionRules="@xml/data_extraction_rules"
android:fullBackupContent="@xml/backup_rules"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:networkSecurityConfig="@xml/network_security_config"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/Theme.Map"
tools:targetApi="31"
android:name=".application.AppClass"
android:networkSecurityConfig="@xml/network_security_config">
tools:targetApi="31">

<activity
android:name=".ui.MapActivity"
android:exported="true" >
android:exported="false" />

<activity
android:name=".ui.SplashScreenActivity"
android:exported="true">
<intent-filter>
<action android:name="android.intent.action.MAIN"/>
<category android:name="android.intent.category.LAUNCHER"/>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>

<activity
android:name=".ui.MainActivity"
android:exported="false" />

</application>

</manifest>
</manifest>
7 changes: 7 additions & 0 deletions app/src/main/java/campus/tech/kakao/map/di/AppModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import androidx.room.Room
import campus.tech.kakao.map.database.AppDatabase
import campus.tech.kakao.map.database.MapItemDao
import campus.tech.kakao.map.repository.MapItemRepository
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import dagger.Module
import dagger.Provides
import dagger.hilt.InstallIn
Expand Down Expand Up @@ -39,4 +40,10 @@ object AppModule {
): MapItemRepository {
return MapItemRepository(mapItemDao, context)
}

@Provides
@Singleton
fun provideFirebaseRemoteConfig(): FirebaseRemoteConfig {
return FirebaseRemoteConfig.getInstance()
}
}
50 changes: 50 additions & 0 deletions app/src/main/java/campus/tech/kakao/map/ui/SplashScreenActivity.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,50 @@
package campus.tech.kakao.map.ui

import android.content.Intent
import android.os.Bundle
import android.os.Handler
import android.os.Looper
import android.util.Log
import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import campus.tech.kakao.map.R
import campus.tech.kakao.map.databinding.ActivitySplashScreenBinding
import campus.tech.kakao.map.viewmodel.SplashScreenViewModel
import dagger.hilt.android.AndroidEntryPoint

@AndroidEntryPoint
class SplashScreenActivity : AppCompatActivity() {

private val viewModel: SplashScreenViewModel by viewModels()
private lateinit var binding: ActivitySplashScreenBinding

override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)

binding = DataBindingUtil.setContentView(this, R.layout.activity_splash_screen)
binding.lifecycleOwner = this
binding.viewModel = viewModel

viewModel.serviceState.observe(this) { state ->
if (state == "ON_SERVICE") {
navigateToMapActivity()
} else {
showServiceMessage()
}
}
}

private fun navigateToMapActivity() {
Log.d("SplashScreen", "Success")
Handler(Looper.getMainLooper()).postDelayed({
startActivity(Intent(this, MapActivity::class.java))
finish()
}, 3000)
Comment on lines +40 to +43

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

MapActivity를 띄우는데 handler로 3초 딜레이를 주신 이유가 있을까요.
약간 늦게 뜨는걸 의도한 것이라면, ViewModelScope.launch 수행할때 RemoteConfig 값을 조금 늦게 확인하도록 하는방법이 어덜까 합니다.

viewModelScope.launch {
  delay(3000L)
  ...
}

Copy link
Author

@lovelhee lovelhee Jul 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

저에게는 가끔 에뮬레이터가 버벅이며 늦게 실행되어서 Splash Screen에 아이콘이 잘 들어왔는지, 메시지가 잘 처리되었는지 확인되기도 전에 MapActivity로 갑자기 휙 넘어가는 경우가 있어 지연을 주고싶었습니다.
구글링을 통해 해당 방법을 찾았는데, 더 좋은 방법을 알려주셔서 감사합니다!

(이 부분 작성할 때 제가 찾았던 자료도 살짝쿵 첨부하고 갑니다 ㅎㅎ)
https://dailycoding365.tistory.com/entry/%EC%95%88%EB%93%9C%EB%A1%9C%EC%9D%B4%EB%93%9C-Splash-%ED%99%94%EB%A9%B4-%EA%B5%AC%ED%98%84%ED%95%98%EA%B8%B0

}

private fun showServiceMessage() {
Log.d("SplashScreen", "Failed")
binding.tvServiceMessage.text = viewModel.serviceMessage.value
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
package campus.tech.kakao.map.viewmodel

import android.util.Log
import androidx.lifecycle.LiveData
import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.google.firebase.remoteconfig.FirebaseRemoteConfig
import com.google.firebase.remoteconfig.remoteConfigSettings
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject

@HiltViewModel
class SplashScreenViewModel @Inject constructor(
private val remoteConfig: FirebaseRemoteConfig
) : ViewModel() {

private val _serviceState = MutableLiveData<String>()
val serviceState: LiveData<String> = _serviceState

private val _serviceMessage = MutableLiveData<String>()
val serviceMessage: LiveData<String> = _serviceMessage

init {
setupRemoteConfig()
fetchRemoteConfig()
}

private fun setupRemoteConfig() {
val configSettings = remoteConfigSettings {
minimumFetchIntervalInSeconds = 0
}
remoteConfig.setConfigSettingsAsync(configSettings)
}

private fun fetchRemoteConfig() {
viewModelScope.launch {
remoteConfig.fetchAndActivate()
.addOnCompleteListener { task ->
if (task.isSuccessful) {
handleRemoteConfig()
} else {
Log.d("SplashScreenViewModel", "Fetch failed")
}
}
}
}
Comment on lines +25 to +48

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

remoteConfig 에서 값을 가져와서 처리하는 로직은 정상적으로 작성해주셨습니다.
조금더 개선하면 좋을 부분이요. RemoteConfig도 결국 원격 저장소에서 데이터를 가져오는 관점에서 data layer 및 model의 영역이라고 볼수 있습니다. 따라서 ViewModel 이나 Repository 같은 곳에서 데이터를 조회한 후에 UI에서 전달받는 형태가 조금더 좋을것 같긴합니다 .

Copy link
Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

감사합니다! 그런 부분까지 생각하지 못했는데 새로운 관점을 알게 되었네요!! 적용해보겠습니다.


private fun handleRemoteConfig() {
_serviceState.value = remoteConfig.getString("serviceState")
_serviceMessage.value = remoteConfig.getString("serviceMessage")
}

}
Binary file added app/src/main/res/drawable/map.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
45 changes: 45 additions & 0 deletions app/src/main/res/layout/activity_splash_screen.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">

<data>
<variable
name="viewModel"
type="campus.tech.kakao.map.viewmodel.SplashScreenViewModel" />
<import type="android.view.View"/>
</data>

<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/main"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".ui.SplashScreenActivity">

<ImageView
android:id="@+id/ivMap"
android:layout_width="150dp"
android:layout_height="150dp"
android:src="@drawable/map"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:contentDescription="@string/splashscreenmapicon" />

<TextView
android:id="@+id/tvServiceMessage"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="@{viewModel.serviceMessage}"
android:textColor="#999999"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
android:gravity="center"
android:layout_marginBottom="50dp"
android:visibility="@{viewModel.serviceState.equals(`ON_SERVICE`) ? View.GONE : View.VISIBLE}"/>
Comment on lines +30 to +41

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

text를 넣어주는 코드는 Activity의 showServiceMessage() 메소드에서도 하고 있는것 같네요.
Activity or XML 중에 한곳에서 하도록 통일하는것은 어떨까합니다.

Copy link
Author

@lovelhee lovelhee Jul 31, 2024

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

state가 ON_SERVICE가 아닐 때, showServiceMessage()가 호출되며 로그를 띄우는 등의 기능을 하니까 Activity에서 하도록 통일해보려고 합니다 ... !!


</androidx.constraintlayout.widget.ConstraintLayout>

</layout>
2 changes: 2 additions & 0 deletions app/src/main/res/values/strings.xml
Original file line number Diff line number Diff line change
Expand Up @@ -16,4 +16,6 @@
<string name="tryMessage">지도 인증을 실패했습니다.\n다시 시도해주세요.</string>
<string name="errorMessage">에러 메세지</string>
<string name="loadingImage">로딩 이미지</string>
<string name="tvservicemessage">tvServiceMessage</string>
<string name="splashscreenmapicon">splashScreenMapIcon</string>
</resources>