diff --git a/.idea/misc.xml b/.idea/misc.xml
index 99ff75c..ce5e583 100644
--- a/.idea/misc.xml
+++ b/.idea/misc.xml
@@ -9,6 +9,7 @@
+
@@ -22,7 +23,11 @@
+
+
+
+
@@ -38,13 +43,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index a8a89da..fa57fbf 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,13 +15,14 @@
android:usesCleartextTraffic="true">
+
diff --git a/buildSrc/src/main/java/Dep.kt b/buildSrc/src/main/java/Dep.kt
index da26671..d2dc382 100644
--- a/buildSrc/src/main/java/Dep.kt
+++ b/buildSrc/src/main/java/Dep.kt
@@ -86,6 +86,7 @@ object Dep {
const val analytics = "com.google.firebase:firebase-analytics-ktx"
}
+ const val lottie = "com.airbnb.android:lottie:5.0.3"
const val gson = "com.google.code.gson:gson:2.8.7"
const val photoView = "com.github.chrisbanes:PhotoView:2.3.0"
const val shimmer = "com.facebook.shimmer:shimmer:0.5.0"
diff --git a/data/src/main/AndroidManifest.xml b/data/src/main/AndroidManifest.xml
index 1dc0a8d..3bc8923 100644
--- a/data/src/main/AndroidManifest.xml
+++ b/data/src/main/AndroidManifest.xml
@@ -1,4 +1,6 @@
+
+
\ No newline at end of file
diff --git a/data/src/main/java/github/dev_playground/jeju_road/data/di/NetworkModule.kt b/data/src/main/java/github/dev_playground/jeju_road/data/di/NetworkModule.kt
index 50b8bf3..6ec7719 100644
--- a/data/src/main/java/github/dev_playground/jeju_road/data/di/NetworkModule.kt
+++ b/data/src/main/java/github/dev_playground/jeju_road/data/di/NetworkModule.kt
@@ -2,8 +2,10 @@ package github.dev_playground.jeju_road.data.di
import github.dev_playground.jeju_road.data.api.RestaurantApi
import github.dev_playground.jeju_road.data.api.mock.MockRestaurantApi
+import github.dev_playground.jeju_road.data.util.NetworkHealthCheckingInterceptor
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
+import org.koin.android.ext.koin.androidApplication
import org.koin.android.ext.koin.androidContext
import org.koin.core.qualifier.named
import org.koin.dsl.module
@@ -24,6 +26,7 @@ val networkModule = module {
.writeTimeout(WRITE_TIMEOUT, TimeUnit.SECONDS)
.readTimeout(READ_TIMEOUT, TimeUnit.SECONDS)
.retryOnConnectionFailure(true)
+ .addNetworkInterceptor(NetworkHealthCheckingInterceptor())
.addNetworkInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
@@ -38,7 +41,7 @@ val networkModule = module {
.build()
}
-// single { get().create(RestaurantApi::class.java) }
- single { MockRestaurantApi(androidContext()) }
+ single { get().create(RestaurantApi::class.java) }
+// single { MockRestaurantApi(androidContext()) }
}
\ No newline at end of file
diff --git a/data/src/main/java/github/dev_playground/jeju_road/data/repository/RestaurantRepositoryImpl.kt b/data/src/main/java/github/dev_playground/jeju_road/data/repository/RestaurantRepositoryImpl.kt
index 0d7d45a..0dd3391 100644
--- a/data/src/main/java/github/dev_playground/jeju_road/data/repository/RestaurantRepositoryImpl.kt
+++ b/data/src/main/java/github/dev_playground/jeju_road/data/repository/RestaurantRepositoryImpl.kt
@@ -22,4 +22,5 @@ internal class RestaurantRepositoryImpl(
}.getOrThrow()
}
+
}
\ No newline at end of file
diff --git a/data/src/main/java/github/dev_playground/jeju_road/data/util/NetworkHealthCheckingInterceptor.kt b/data/src/main/java/github/dev_playground/jeju_road/data/util/NetworkHealthCheckingInterceptor.kt
new file mode 100644
index 0000000..4eccf53
--- /dev/null
+++ b/data/src/main/java/github/dev_playground/jeju_road/data/util/NetworkHealthCheckingInterceptor.kt
@@ -0,0 +1,22 @@
+package github.dev_playground.jeju_road.data.util
+
+import okhttp3.Interceptor
+import okhttp3.Response
+import java.io.IOException
+
+class NetworkHealthCheckingInterceptor() : Interceptor {
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val request = chain.request()
+ val response = chain.proceed(request)
+
+ if (response.code == 500) {
+ throw ConnectionShutdownException()
+ }
+ return response
+ }
+}
+
+class ConnectionShutdownException : IOException() {
+ override val message: String
+ get() = "500 ERROR: 서버가 종료되었습니다. 다시 시도해주세요."
+}
diff --git a/presentation/build.gradle.kts b/presentation/build.gradle.kts
index ed99906..7a2f1cc 100644
--- a/presentation/build.gradle.kts
+++ b/presentation/build.gradle.kts
@@ -37,6 +37,7 @@ dependencies {
implementation(Dep.Glide.glide)
implementation(Dep.Glide.glideCompiler)
implementation(Dep.shimmer)
+ implementation(Dep.lottie)
testImplementation(Dep.Test.junit)
androidTestImplementation(Dep.Test.junitExt)
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/SplashActivity.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/SplashActivity.kt
new file mode 100644
index 0000000..df6838b
--- /dev/null
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/SplashActivity.kt
@@ -0,0 +1,33 @@
+package github.dev_playground.jeju_road.presentation
+
+import android.annotation.SuppressLint
+import android.os.Bundle
+import android.view.WindowManager
+import androidx.appcompat.app.AppCompatActivity
+import github.dev_playground.jeju_road.presentation.ui.main.MainActivity
+import github.dev_playground.jeju_road.presentation.util.startActivity
+import kotlinx.coroutines.CoroutineScope
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.delay
+import kotlinx.coroutines.launch
+
+@SuppressLint("CustomSplashScreen")
+class SplashActivity : AppCompatActivity() {
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+
+ window.setFlags(
+ WindowManager.LayoutParams.FLAG_FULLSCREEN,
+ WindowManager.LayoutParams.FLAG_FULLSCREEN
+ )
+
+ setContentView(R.layout.activity_splash)
+
+ CoroutineScope(Dispatchers.IO).launch {
+ delay(2000)
+
+ this@SplashActivity.startActivity { }
+ finish()
+ }
+ }
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseActivity.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseActivity.kt
index 0ecab88..f406a92 100644
--- a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseActivity.kt
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseActivity.kt
@@ -8,9 +8,15 @@ import androidx.appcompat.app.AppCompatActivity
import androidx.databinding.DataBindingUtil
import androidx.databinding.ViewDataBinding
import androidx.lifecycle.LiveData
+import androidx.lifecycle.viewModelScope
import github.dev_playground.jeju_road.presentation.util.Event
+import github.dev_playground.jeju_road.presentation.util.UiState
-abstract class BaseActivity(@LayoutRes layoutId: Int): AppCompatActivity(layoutId) {
+abstract class BaseActivity(
+ @LayoutRes layoutId: Int
+): AppCompatActivity(layoutId) {
+
+ //baseviewmodel에서 ui state 상태 바뀐거 여기서 onSuccess, onFailure, onLoading 처리?
protected val binding: B by lazy { DataBindingUtil.setContentView(this, layoutId) }
@@ -37,6 +43,7 @@ abstract class BaseActivity(@LayoutRes layoutId: Int): AppCo
if (item.itemId == android.R.id.home) {
finish()
}
+
return super.onOptionsItemSelected(item)
}
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseDialogFragment.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseDialogFragment.kt
new file mode 100644
index 0000000..0696cf1
--- /dev/null
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/base/BaseDialogFragment.kt
@@ -0,0 +1,40 @@
+package github.dev_playground.jeju_road.presentation.ui.base
+
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.annotation.LayoutRes
+import androidx.databinding.DataBindingUtil
+import androidx.databinding.ViewDataBinding
+import androidx.fragment.app.DialogFragment
+
+abstract class BaseDialogFragment(
+ @LayoutRes val layoutId: Int
+) : DialogFragment() {
+ private var _binding: VB? = null
+ val binding: VB by lazy { _binding!! }
+
+ override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?
+ ): View? {
+ _binding = DataBindingUtil.inflate(
+ inflater,
+ layoutId,
+ container,
+ false
+ )
+
+ binding {
+ lifecycleOwner = viewLifecycleOwner
+ }
+
+ return binding.root
+ }
+
+ protected fun binding(action: VB.() -> Unit) {
+ binding.run(action)
+ }
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/error/ErrorDialogFragment.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/error/ErrorDialogFragment.kt
new file mode 100644
index 0000000..89e2b50
--- /dev/null
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/error/ErrorDialogFragment.kt
@@ -0,0 +1,30 @@
+package github.dev_playground.jeju_road.presentation.ui.error
+
+import android.app.Dialog
+import android.graphics.Point
+import android.os.Bundle
+import android.view.*
+import androidx.fragment.app.DialogFragment
+import github.dev_playground.jeju_road.presentation.R
+import github.dev_playground.jeju_road.presentation.databinding.ActivityRestaurantDetailBinding
+import github.dev_playground.jeju_road.presentation.databinding.FragmentDialogErrorBinding
+import github.dev_playground.jeju_road.presentation.ui.base.BaseDialogFragment
+
+class ErrorDialogFragment
+ : BaseDialogFragment(R.layout.fragment_dialog_error) {
+
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ dialog?.setCanceledOnTouchOutside(false)
+ binding {
+ imageViewCloseErrorDialog.setOnClickListener {
+ dialog?.dismiss()
+ }
+ }
+ }
+
+ override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ setStyle(STYLE_NO_TITLE, R.style.Dialog_ERROR_DIALOG)
+ return super.onCreateDialog(savedInstanceState)
+ }
+}
\ No newline at end of file
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListFragment.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListFragment.kt
index b9f01f4..17fdd72 100644
--- a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListFragment.kt
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListFragment.kt
@@ -12,10 +12,12 @@ import github.dev_playground.jeju_road.domain.model.Content
import github.dev_playground.jeju_road.presentation.R
import github.dev_playground.jeju_road.presentation.databinding.FragmentRestaurantListBinding
import github.dev_playground.jeju_road.presentation.ui.base.BaseFragment
+import github.dev_playground.jeju_road.presentation.ui.error.ErrorDialogFragment
import github.dev_playground.jeju_road.presentation.ui.page.RestaurantDetailActivity
import github.dev_playground.jeju_road.presentation.ui.page.RestaurantDetailActivity.Companion.KEY_RESTAURANT_ID
import github.dev_playground.jeju_road.presentation.ui.page.RestaurantDetailActivity.Companion.KEY_TRANSITION_NAME
import github.dev_playground.jeju_road.presentation.util.UiState
+import github.dev_playground.jeju_road.presentation.util.onFailure
import github.dev_playground.jeju_road.presentation.util.onSuccess
import org.koin.androidx.viewmodel.ext.android.sharedViewModel
@@ -73,10 +75,14 @@ class RestaurantListFragment : BaseFragment(
contentUiState.observe {
restaurantListAdapter.submitList(it.data)
+
it.onSuccess {
savedState.value?.let { state ->
recyclerViewRestaurantList.layoutManager?.onRestoreInstanceState(state)
}
+ }.onFailure {
+ val errorDialog = ErrorDialogFragment()
+ errorDialog.show(requireActivity().supportFragmentManager, "tag")
}
}
}
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListViewModel.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListViewModel.kt
index 7f5f2b8..6f9c662 100644
--- a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListViewModel.kt
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/ui/list/RestaurantListViewModel.kt
@@ -7,9 +7,7 @@ import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import github.dev_playground.jeju_road.domain.model.Content
import github.dev_playground.jeju_road.domain.usecase.GetRestaurantListUseCase
-import github.dev_playground.jeju_road.presentation.util.Pager
-import github.dev_playground.jeju_road.presentation.util.UiState
-import github.dev_playground.jeju_road.presentation.util.toUiState
+import github.dev_playground.jeju_road.presentation.util.*
import kotlinx.coroutines.launch
class RestaurantListViewModel(
diff --git a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/util/UiState.kt b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/util/UiState.kt
index 7d92358..fca2f60 100644
--- a/presentation/src/main/java/github/dev_playground/jeju_road/presentation/util/UiState.kt
+++ b/presentation/src/main/java/github/dev_playground/jeju_road/presentation/util/UiState.kt
@@ -1,5 +1,7 @@
package github.dev_playground.jeju_road.presentation.util
+import kotlinx.coroutines.flow.MutableStateFlow
+
data class UiState(
val loading: Boolean = false,
val exception: Throwable? = null,
@@ -22,12 +24,13 @@ data class UiState(
}
companion object {
- fun loading(): UiState = UiState(loading = true)
+ fun loading(): UiState = UiState(loading = false)
fun success(value: T?): UiState = UiState(data = value)
fun failure(exception: Throwable?): UiState = UiState(exception = exception)
}
+
}
inline fun UiState.onSuccess(action: (T) -> Unit) = apply {
diff --git a/presentation/src/main/res/drawable/bg_error_dialog_radius_shape.xml b/presentation/src/main/res/drawable/bg_error_dialog_radius_shape.xml
new file mode 100644
index 0000000..f0e5202
--- /dev/null
+++ b/presentation/src/main/res/drawable/bg_error_dialog_radius_shape.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/drawable/bg_error_dialog_retry_shape.xml b/presentation/src/main/res/drawable/bg_error_dialog_retry_shape.xml
new file mode 100644
index 0000000..9225634
--- /dev/null
+++ b/presentation/src/main/res/drawable/bg_error_dialog_retry_shape.xml
@@ -0,0 +1,5 @@
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/drawable/ic_close_black.xml b/presentation/src/main/res/drawable/ic_close_black.xml
new file mode 100644
index 0000000..121ba7f
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_close_black.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_devplayground.xml b/presentation/src/main/res/drawable/ic_devplayground.xml
new file mode 100644
index 0000000..3780c86
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_devplayground.xml
@@ -0,0 +1,9 @@
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_error.xml b/presentation/src/main/res/drawable/ic_error.xml
new file mode 100644
index 0000000..ed28c23
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_error.xml
@@ -0,0 +1,43 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_haenyeo_with_waves.xml b/presentation/src/main/res/drawable/ic_haenyeo_with_waves.xml
new file mode 100644
index 0000000..6c6f7e2
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_haenyeo_with_waves.xml
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_island.xml b/presentation/src/main/res/drawable/ic_island.xml
new file mode 100644
index 0000000..49b38a3
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_island.xml
@@ -0,0 +1,33 @@
+
+
+
+
+
+
+
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_mandarin_with_waves.xml b/presentation/src/main/res/drawable/ic_mandarin_with_waves.xml
new file mode 100644
index 0000000..b51d30f
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_mandarin_with_waves.xml
@@ -0,0 +1,34 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_stone_with_waves.xml b/presentation/src/main/res/drawable/ic_stone_with_waves.xml
new file mode 100644
index 0000000..6ee6696
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_stone_with_waves.xml
@@ -0,0 +1,64 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_warning.xml b/presentation/src/main/res/drawable/ic_warning.xml
new file mode 100644
index 0000000..90703dd
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_warning.xml
@@ -0,0 +1,12 @@
+
+
+
+
diff --git a/presentation/src/main/res/drawable/ic_waves.xml b/presentation/src/main/res/drawable/ic_waves.xml
new file mode 100644
index 0000000..d1830a6
--- /dev/null
+++ b/presentation/src/main/res/drawable/ic_waves.xml
@@ -0,0 +1,12 @@
+
+
+
diff --git a/presentation/src/main/res/layout-land/activity_splash.xml b/presentation/src/main/res/layout-land/activity_splash.xml
new file mode 100644
index 0000000..963f2ce
--- /dev/null
+++ b/presentation/src/main/res/layout-land/activity_splash.xml
@@ -0,0 +1,22 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/activity_splash.xml b/presentation/src/main/res/layout/activity_splash.xml
new file mode 100644
index 0000000..78fc1b7
--- /dev/null
+++ b/presentation/src/main/res/layout/activity_splash.xml
@@ -0,0 +1,92 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/layout/fragment_dialog_error.xml b/presentation/src/main/res/layout/fragment_dialog_error.xml
new file mode 100644
index 0000000..d6c656f
--- /dev/null
+++ b/presentation/src/main/res/layout/fragment_dialog_error.xml
@@ -0,0 +1,75 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/presentation/src/main/res/raw/animation_main_text.json b/presentation/src/main/res/raw/animation_main_text.json
new file mode 100644
index 0000000..bab4627
--- /dev/null
+++ b/presentation/src/main/res/raw/animation_main_text.json
@@ -0,0 +1,1072 @@
+{
+ "v": "5.7.3",
+ "fr": 25,
+ "ip": 0,
+ "op": 50,
+ "w": 1920,
+ "h": 1080,
+ "nm": "제주로드",
+ "ddd": 0,
+ "assets": [],
+ "layers": [
+ {
+ "ddd": 0,
+ "ind": 1,
+ "ty": 4,
+ "nm": "제주로드 Outlines",
+ "sr": 1,
+ "ks": {
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 11
+ },
+ "r": {
+ "a": 0,
+ "k": 0,
+ "ix": 10
+ },
+ "p": {
+ "a": 0,
+ "k": [
+ 960,
+ 630.617,
+ 0
+ ],
+ "ix": 2
+ },
+ "a": {
+ "a": 0,
+ "k": [
+ 0,
+ 0,
+ 0
+ ],
+ "ix": 1
+ },
+ "s": {
+ "a": 0,
+ "k": [
+ 100,
+ 100,
+ 100
+ ],
+ "ix": 6
+ }
+ },
+ "ao": 0,
+ "shapes": [
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "ind": 0,
+ "ty": "sh",
+ "ix": 1,
+ "ks": {
+ "a": 0,
+ "k": {
+ "i": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "o": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "v": [
+ [
+ -241.78,
+ 0
+ ],
+ [
+ -241.78,
+ -145.234
+ ],
+ [
+ -191.039,
+ -145.234
+ ],
+ [
+ -191.039,
+ -181.235
+ ],
+ [
+ -339.28,
+ -181.235
+ ],
+ [
+ -339.28,
+ -145.234
+ ],
+ [
+ -288.425,
+ -145.234
+ ],
+ [
+ -288.425,
+ 0
+ ]
+ ],
+ "c": true
+ },
+ "ix": 2
+ },
+ "nm": "제",
+ "mn": "ADBE Vector Shape - Group",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "ix": 3
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 4
+ },
+ "w": {
+ "a": 0,
+ "k": 4,
+ "ix": 5
+ },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 2
+ },
+ "a": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 1
+ },
+ "s": {
+ "a": 0,
+ "k": [
+ 100,
+ 100
+ ],
+ "ix": 3
+ },
+ "r": {
+ "a": 0,
+ "k": 0,
+ "ix": 6
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 7
+ },
+ "sk": {
+ "a": 0,
+ "k": 0,
+ "ix": 4
+ },
+ "sa": {
+ "a": 0,
+ "k": 0,
+ "ix": 5
+ },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "제",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 1,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ },
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "ind": 0,
+ "ty": "sh",
+ "ix": 1,
+ "ks": {
+ "a": 0,
+ "k": {
+ "i": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "o": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "v": [
+ [
+ -34.555,
+ 0
+ ],
+ [
+ -34.555,
+ -36.247
+ ],
+ [
+ -115.331,
+ -36.247
+ ],
+ [
+ -115.331,
+ -74.951
+ ],
+ [
+ -40.584,
+ -74.951
+ ],
+ [
+ -40.584,
+ -109.478
+ ],
+ [
+ -115.331,
+ -109.478
+ ],
+ [
+ -115.331,
+ -146.462
+ ],
+ [
+ -36.83,
+ -146.462
+ ],
+ [
+ -36.83,
+ -181.235
+ ],
+ [
+ -160.611,
+ -181.235
+ ],
+ [
+ -160.611,
+ 0
+ ]
+ ],
+ "c": true
+ },
+ "ix": 2
+ },
+ "nm": "주",
+ "mn": "ADBE Vector Shape - Group",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "ix": 3
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 4
+ },
+ "w": {
+ "a": 0,
+ "k": 4,
+ "ix": 5
+ },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 2
+ },
+ "a": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 1
+ },
+ "s": {
+ "a": 0,
+ "k": [
+ 100,
+ 100
+ ],
+ "ix": 3
+ },
+ "r": {
+ "a": 0,
+ "k": 0,
+ "ix": 6
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 7
+ },
+ "sk": {
+ "a": 0,
+ "k": 0,
+ "ix": 4
+ },
+ "sa": {
+ "a": 0,
+ "k": 0,
+ "ix": 5
+ },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "주",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 2,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ },
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "ind": 0,
+ "ty": "sh",
+ "ix": 1,
+ "ks": {
+ "a": 0,
+ "k": {
+ "i": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "o": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "v": [
+ [
+ 42.177,
+ 0
+ ],
+ [
+ 80.176,
+ -63.893
+ ],
+ [
+ 117.72,
+ 0
+ ],
+ [
+ 174.491,
+ 0
+ ],
+ [
+ 112.373,
+ -95.102
+ ],
+ [
+ 172.216,
+ -181.235
+ ],
+ [
+ 119.768,
+ -181.235
+ ],
+ [
+ 84.386,
+ -125.083
+ ],
+ [
+ 50.596,
+ -181.235
+ ],
+ [
+ -6.289,
+ -181.235
+ ],
+ [
+ 52.644,
+ -94.365
+ ],
+ [
+ -10.726,
+ 0
+ ]
+ ],
+ "c": true
+ },
+ "ix": 2
+ },
+ "nm": "로",
+ "mn": "ADBE Vector Shape - Group",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "ix": 3
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 4
+ },
+ "w": {
+ "a": 0,
+ "k": 4,
+ "ix": 5
+ },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 2
+ },
+ "a": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 1
+ },
+ "s": {
+ "a": 0,
+ "k": [
+ 100,
+ 100
+ ],
+ "ix": 3
+ },
+ "r": {
+ "a": 0,
+ "k": 0,
+ "ix": 6
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 7
+ },
+ "sk": {
+ "a": 0,
+ "k": 0,
+ "ix": 4
+ },
+ "sa": {
+ "a": 0,
+ "k": 0,
+ "ix": 5
+ },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "로",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 3,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ },
+ {
+ "ty": "gr",
+ "it": [
+ {
+ "ind": 0,
+ "ty": "sh",
+ "ix": 1,
+ "ks": {
+ "a": 0,
+ "k": {
+ "i": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "o": [
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ],
+ [
+ 0,
+ 0
+ ]
+ ],
+ "v": [
+ [
+ 288.539,
+ 0
+ ],
+ [
+ 288.539,
+ -145.234
+ ],
+ [
+ 339.28,
+ -145.234
+ ],
+ [
+ 339.28,
+ -181.235
+ ],
+ [
+ 191.039,
+ -181.235
+ ],
+ [
+ 191.039,
+ -145.234
+ ],
+ [
+ 241.894,
+ -145.234
+ ],
+ [
+ 241.894,
+ 0
+ ]
+ ],
+ "c": true
+ },
+ "ix": 2
+ },
+ "nm": "드",
+ "mn": "ADBE Vector Shape - Group",
+ "hd": false
+ },
+ {
+ "ty": "st",
+ "c": {
+ "a": 0,
+ "k": [
+ 0,
+ 0,
+ 0,
+ 1
+ ],
+ "ix": 3
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 4
+ },
+ "w": {
+ "a": 0,
+ "k": 4,
+ "ix": 5
+ },
+ "lc": 1,
+ "lj": 1,
+ "ml": 4,
+ "bm": 0,
+ "nm": "Stroke 1",
+ "mn": "ADBE Vector Graphic - Stroke",
+ "hd": false
+ },
+ {
+ "ty": "tr",
+ "p": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 2
+ },
+ "a": {
+ "a": 0,
+ "k": [
+ 0,
+ 0
+ ],
+ "ix": 1
+ },
+ "s": {
+ "a": 0,
+ "k": [
+ 100,
+ 100
+ ],
+ "ix": 3
+ },
+ "r": {
+ "a": 0,
+ "k": 0,
+ "ix": 6
+ },
+ "o": {
+ "a": 0,
+ "k": 100,
+ "ix": 7
+ },
+ "sk": {
+ "a": 0,
+ "k": 0,
+ "ix": 4
+ },
+ "sa": {
+ "a": 0,
+ "k": 0,
+ "ix": 5
+ },
+ "nm": "Transform"
+ }
+ ],
+ "nm": "드",
+ "np": 3,
+ "cix": 2,
+ "bm": 0,
+ "ix": 4,
+ "mn": "ADBE Vector Group",
+ "hd": false
+ },
+ {
+ "ty": "tm",
+ "s": {
+ "a": 0,
+ "k": 0,
+ "ix": 1
+ },
+ "e": {
+ "a": 1,
+ "k": [
+ {
+ "i": {
+ "x": [
+ 0.833
+ ],
+ "y": [
+ 0.833
+ ]
+ },
+ "o": {
+ "x": [
+ 0.167
+ ],
+ "y": [
+ 0.167
+ ]
+ },
+ "t": 25,
+ "s": [
+ 12
+ ]
+ },
+ {
+ "t": 47,
+ "s": [
+ 100
+ ]
+ }
+ ],
+ "ix": 2
+ },
+ "o": {
+ "a": 1,
+ "k": [
+ {
+ "i": {
+ "x": [
+ 0.833
+ ],
+ "y": [
+ 0.833
+ ]
+ },
+ "o": {
+ "x": [
+ 0.167
+ ],
+ "y": [
+ 0.167
+ ]
+ },
+ "t": 0,
+ "s": [
+ 0
+ ]
+ },
+ {
+ "t": 23,
+ "s": [
+ 360
+ ]
+ }
+ ],
+ "ix": 3
+ },
+ "m": 1,
+ "ix": 5,
+ "nm": "Trim Paths 1",
+ "mn": "ADBE Vector Filter - Trim",
+ "hd": false
+ }
+ ],
+ "ip": 0,
+ "op": 125,
+ "st": 0,
+ "bm": 0
+ }
+ ],
+ "markers": []
+}
\ No newline at end of file
diff --git a/presentation/src/main/res/values/colors.xml b/presentation/src/main/res/values/colors.xml
index b056f4e..6412fe9 100644
--- a/presentation/src/main/res/values/colors.xml
+++ b/presentation/src/main/res/values/colors.xml
@@ -39,4 +39,7 @@
#FFCCCCCC
#000000
+ #FFFFFF
+
+ #F3FEFF
\ No newline at end of file
diff --git a/presentation/src/main/res/values/dimens.xml b/presentation/src/main/res/values/dimens.xml
index dac2ae2..19d27ff 100644
--- a/presentation/src/main/res/values/dimens.xml
+++ b/presentation/src/main/res/values/dimens.xml
@@ -2,6 +2,11 @@
16dp
+ 12dp
+ 12dp
+ 30dp
+ 30dp
+
12dp
12dp
@@ -79,4 +84,24 @@
48dp
8dp
10dp
+
+ 20dp
+ 180dp
+ 180dp
+ 50dp
+ 45dp
+
+ 20dp
+ 7dp
+
+ 20dp
+ 20dp
+
+ 17dp
+ 17dp
+
+ 5dp
+ 35dp
+ 20dp
+
diff --git a/presentation/src/main/res/values/strings.xml b/presentation/src/main/res/values/strings.xml
index 2fbce06..dc42403 100644
--- a/presentation/src/main/res/values/strings.xml
+++ b/presentation/src/main/res/values/strings.xml
@@ -16,4 +16,8 @@
이곳의 이용팁
길찾기
오늘 %s %s - %s
+
+
+ 다시 시도
+ 서버 연결 상태가 좋지 않습니다.\n 잠시 후 다시 시도해주세요.
\ No newline at end of file
diff --git a/presentation/src/main/res/values/style.xml b/presentation/src/main/res/values/style.xml
index 1bfc2ee..5301110 100644
--- a/presentation/src/main/res/values/style.xml
+++ b/presentation/src/main/res/values/style.xml
@@ -40,4 +40,21 @@
- @font/nanum_gotic_bold_font
- false
+
+
+
+
+
\ No newline at end of file