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