Skip to content

Commit

Permalink
부산대 Android_김정희_6주차 과제_1단계 (#33)
Browse files Browse the repository at this point in the history
* Initial commit

* Initial commit

* Docs: README 작성

* Add: 검색어 삭제 버튼 사진 추가

* Design: 검색어 입력 및 검색 결과 표시 기본 레이아웃 구현

* Add: strings.xml 추가

* Feat: 데이터베이스 스키마 정의

* Feat: SQliteOpenHelper 상속

* Feat: ViewModel 생성

* Feat: 데이터 삽입 기능 구현

* Add: strings.xml 한글 리소스 추가

* Docs: step2 README 작성

* Comment: SearchView 주석 삭제

* Design: 검색어 저장 목록 아이템 디자인

* Design: 검색 결과 목록 아이템 디자인

* Add: 마커 아이콘 추가

* Feat: 데이터 존재 체킹 및 데이터 검색, 반환 기능 추가

* Feat: 검색어 저장 목록 관리 및 표시

* Feat: 검색 결과 목록 관리 및 표시

* Feat: DB에서 검색어와 일치하는 장소 검색 기능

* Feat: 검색 및 검색 결과-검색어 저장 목록 관리, 표시

* Initial commit

* Docs: README 기능 작성

* Chore: 카카오 API 키 저장

* Design: 장소명 글씨 크기 변경

* Remove: insertData 기능 삭제

* Feat: Retrofit 인터페이스 생성

* Feat: Retrofit 클라이언트 설정

* Feat: 카카오 API 호출

* Feat: DTO 파일 생성

* Design: 검색 결과 목록 아이템 크기 수정

* Fix: Document-category_group_name 으로 변경

* Fix: Document-category_group_name 으로 변경

* Design: 지도 화면 구성

* Docs: 3주차 과제 2단계 기능 명세

* Chore: MapActivity 인텐트 필터 추가 및 application 이름 설정

* Feat: KakaoMapSdk.init 호출

* Design: 검색 결과 항목 디자인 수정

* Feat: 뒤로가기 버튼 클릭시 화면 이동 기능 추가

* Feat: 지도 시작 및 검색창 클릭시 화면 이동 기능 추가

* Add: 돋보기 이미지 추가

* Add: strings 리소스 추가

* Chore: 카카오지도 SDK 의존성 추가 및 에뮬레이터 설정

* Feat: MapView resume, pause 호출

* Chore: HTTP 트래픽 차단 해결 (네트워크 보안 구성 변경)

* Fix: private 변수로 변경

* Fix: 네트워크 에러 메세지 표시

* Comment: 키 해시 주석 제거

* Docs: README 기능 작성

* Feat: 저장된 검색어 선택시 해당 검색어 검색 결과 표시(검색창 자동 입력)

* 부산대 Android_김정희_4주차 과제_0단계 (#25)

* Initial commit

* Docs: README 작성

* Add: 검색어 삭제 버튼 사진 추가

* Design: 검색어 입력 및 검색 결과 표시 기본 레이아웃 구현

* Add: strings.xml 추가

* Feat: 데이터베이스 스키마 정의

* Feat: SQliteOpenHelper 상속

* Feat: ViewModel 생성

* Feat: 데이터 삽입 기능 구현

* Add: strings.xml 한글 리소스 추가

* Docs: step2 README 작성

* Comment: SearchView 주석 삭제

* Design: 검색어 저장 목록 아이템 디자인

* Design: 검색 결과 목록 아이템 디자인

* Add: 마커 아이콘 추가

* Feat: 데이터 존재 체킹 및 데이터 검색, 반환 기능 추가

* Feat: 검색어 저장 목록 관리 및 표시

* Feat: 검색 결과 목록 관리 및 표시

* Feat: DB에서 검색어와 일치하는 장소 검색 기능

* Feat: 검색 및 검색 결과-검색어 저장 목록 관리, 표시

* Initial commit

* Docs: README 기능 작성

* Chore: 카카오 API 키 저장

* Design: 장소명 글씨 크기 변경

* Remove: insertData 기능 삭제

* Feat: Retrofit 인터페이스 생성

* Feat: Retrofit 클라이언트 설정

* Feat: 카카오 API 호출

* Feat: DTO 파일 생성

* Design: 검색 결과 목록 아이템 크기 수정

* Fix: Document-category_group_name 으로 변경

* Fix: Document-category_group_name 으로 변경

* Design: 지도 화면 구성

* Docs: 3주차 과제 2단계 기능 명세

* Chore: MapActivity 인텐트 필터 추가 및 application 이름 설정

* Feat: KakaoMapSdk.init 호출

* Design: 검색 결과 항목 디자인 수정

* Feat: 뒤로가기 버튼 클릭시 화면 이동 기능 추가

* Feat: 지도 시작 및 검색창 클릭시 화면 이동 기능 추가

* Add: 돋보기 이미지 추가

* Add: strings 리소스 추가

* Chore: 카카오지도 SDK 의존성 추가 및 에뮬레이터 설정

* Feat: MapView resume, pause 호출

* Chore: HTTP 트래픽 차단 해결 (네트워크 보안 구성 변경)

* Fix: private 변수로 변경

* Fix: 네트워크 에러 메세지 표시

* Comment: 키 해시 주석 제거

---------

Co-authored-by: MyStoryG <[email protected]>

* Add: 마커 아이콘 이미지 추가

* Comment: 빌드 오류 막기 위해 주석 처리

* Feat: 데이터 넘겨주는 기능 추가

* Feat: 선택 항목 지도 표시 및 마지막 위치 저장 기능

* Refactor: 코드 리팩토링

* Feat: 위도, 경도 데이터 추가

* Design: BottomSheet 래이아웃 디자인

* Feat: BottomSheet 띄우는 기능 추가

* Add: 한글 리소스 추가

* Design: 에러 메세지 화면 디자인

* Add: 로딩 이미지 추가

* Design: errorLayout 추가

* Feat: 카카오지도 onMapError() 호출 시 에러 화면 띄우는 기능 추가

* Initial commit

* Docs: Step2 기능 작성

* Test: MainActivity UI 테스트 실행

* Test: MapActivity UI 테스트 실행

* Style: 테스트를 위해 public으로 변수 변경

* Test: MainActivity 단위 테스트 실행

* Style: 테스트를 위해 public으로 변수 변경

* Test: MapActivity 단위 테스트 실행

* 부산대 Android_김정희_4주차 과제_1단계 (#49)

* Initial commit

* Docs: README 작성

* Add: 검색어 삭제 버튼 사진 추가

* Design: 검색어 입력 및 검색 결과 표시 기본 레이아웃 구현

* Add: strings.xml 추가

* Feat: 데이터베이스 스키마 정의

* Feat: SQliteOpenHelper 상속

* Feat: ViewModel 생성

* Feat: 데이터 삽입 기능 구현

* Add: strings.xml 한글 리소스 추가

* Docs: step2 README 작성

* Comment: SearchView 주석 삭제

* Design: 검색어 저장 목록 아이템 디자인

* Design: 검색 결과 목록 아이템 디자인

* Add: 마커 아이콘 추가

* Feat: 데이터 존재 체킹 및 데이터 검색, 반환 기능 추가

* Feat: 검색어 저장 목록 관리 및 표시

* Feat: 검색 결과 목록 관리 및 표시

* Feat: DB에서 검색어와 일치하는 장소 검색 기능

* Feat: 검색 및 검색 결과-검색어 저장 목록 관리, 표시

* Initial commit

* Docs: README 기능 작성

* Chore: 카카오 API 키 저장

* Design: 장소명 글씨 크기 변경

* Remove: insertData 기능 삭제

* Feat: Retrofit 인터페이스 생성

* Feat: Retrofit 클라이언트 설정

* Feat: 카카오 API 호출

* Feat: DTO 파일 생성

* Design: 검색 결과 목록 아이템 크기 수정

* Fix: Document-category_group_name 으로 변경

* Fix: Document-category_group_name 으로 변경

* Design: 지도 화면 구성

* Docs: 3주차 과제 2단계 기능 명세

* Chore: MapActivity 인텐트 필터 추가 및 application 이름 설정

* Feat: KakaoMapSdk.init 호출

* Design: 검색 결과 항목 디자인 수정

* Feat: 뒤로가기 버튼 클릭시 화면 이동 기능 추가

* Feat: 지도 시작 및 검색창 클릭시 화면 이동 기능 추가

* Add: 돋보기 이미지 추가

* Add: strings 리소스 추가

* Chore: 카카오지도 SDK 의존성 추가 및 에뮬레이터 설정

* Feat: MapView resume, pause 호출

* Chore: HTTP 트래픽 차단 해결 (네트워크 보안 구성 변경)

* Fix: private 변수로 변경

* Fix: 네트워크 에러 메세지 표시

* Comment: 키 해시 주석 제거

* Docs: README 기능 작성

* Feat: 저장된 검색어 선택시 해당 검색어 검색 결과 표시(검색창 자동 입력)

* Add: 마커 아이콘 이미지 추가

* Comment: 빌드 오류 막기 위해 주석 처리

* Feat: 데이터 넘겨주는 기능 추가

* Feat: 선택 항목 지도 표시 및 마지막 위치 저장 기능

* Refactor: 코드 리팩토링

* Feat: 위도, 경도 데이터 추가

* Design: BottomSheet 래이아웃 디자인

* Feat: BottomSheet 띄우는 기능 추가

* Add: 한글 리소스 추가

* Design: 에러 메세지 화면 디자인

* Add: 로딩 이미지 추가

* Design: errorLayout 추가

* Feat: 카카오지도 onMapError() 호출 시 에러 화면 띄우는 기능 추가

---------

Co-authored-by: MyStoryG <[email protected]>

* Refactor: 패키지 분리

* Docs: Step1 기능 명세

* Feat: Room 데이터베이스 정의

* Feat: 데이터베이스 작업 정의

* Feat: 데이터 소스 관리 Repository 정의

* Feat: 데이터 로직 처리

* Feat: Room 데이터 불러와서 UI 업데이트하는 기능 추가

* Feat: Room 데이터베이스 엔티티 정의

* Feat: Hilt 초기화

* Feat: 의존성 주입 모듈 추가

* Feat: Hilt 사용하여 ViewModel 주입 설정

* Feat: Hilt 의존성 주입 적용

* Feat: Hilt 사용하여 DAO 주입

* Feat: Hilt 사용하여 Application, Repository 주입 설정

* Fix: step1 피드백 반영

* Docs: Step2 기능 명세

* Feat: 검색창 클릭시 데이터 초기화 기능 추가

* Feat: 커스텀 어댑터 추가

* Refactor: MainActivity MVVM 패턴 적용

* Refactor: MapActivity MVVM 패턴 적용

* Refactor: MapActivity(error_layout.xml) MVVM 패턴 적용

* Remove: 커스텀 어댑터 삭제

* Refactor: MainActivity MVVM 패턴 적용 수정

* Refactor: 코루틴을 사용하여 MapViewModel 비동기 처리 개선

* Refactor: MainActivity MVVM 패턴 적용 수정

* Fix: 검색창 클릭시 DB 초기화 기능 삭제

* Refactor: MapActivity MVVM 패턴 적용 수정(bottom_sheet)

* Feat: 불필요한 부분 수정

* Fix: 4주차 2단계 피드백 반영

* Docs: 1단계 기능 명세

* Add: 한글 리소스 추가

* Build: google-services 주석 제거

* Add: 지도 아이콘 추가

* Build: 시작 activity 설정

* Feat: FirebaseRemoteConfig 의존성 추가

* Feat: SplashScreen을 위한 ViewModel 추가

* Feat: SplashScreen 기능 추가

---------

Co-authored-by: MyStoryG <[email protected]>
Co-authored-by: 이오형 leo <[email protected]>
  • Loading branch information
3 people authored Jul 30, 2024
1 parent 4494e4e commit d9c761f
Show file tree
Hide file tree
Showing 8 changed files with 190 additions and 8 deletions.
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)
}

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")
}
}
}
}

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}"/>

</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>

0 comments on commit d9c761f

Please sign in to comment.