diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 93237e2b..e129e926 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -183,9 +183,6 @@ android:name="android.app.lib_name" android:value="" /> - diff --git a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt index 99a4def0..df746f5a 100644 --- a/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt +++ b/app/src/main/java/com/eatssu/android/presentation/base/BaseActivity.kt @@ -69,6 +69,7 @@ abstract class BaseActivity( // refreshtoken 관리 observeTokenExpiration() + observeNetworkError() setContainerInset() @@ -120,8 +121,6 @@ abstract class BaseActivity( navigateToLogin() } } - - observeNetworkError() } private fun navigateToLogin() { diff --git a/app/src/main/java/com/eatssu/android/presentation/error/ServerErrorActivity.kt b/app/src/main/java/com/eatssu/android/presentation/error/ServerErrorActivity.kt deleted file mode 100644 index 2f0897e4..00000000 --- a/app/src/main/java/com/eatssu/android/presentation/error/ServerErrorActivity.kt +++ /dev/null @@ -1,40 +0,0 @@ -package com.eatssu.android.presentation.error - -import android.app.AlertDialog -import android.os.Bundle -import androidx.activity.enableEdgeToEdge -import androidx.appcompat.app.AppCompatActivity -import com.eatssu.android.R - -class ServerErrorActivity : AppCompatActivity() { - - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - enableEdgeToEdge() - setContentView(R.layout.activity_server_error) - - val title = intent.getStringExtra(EXTRA_TITLE) ?: getString(R.string.server_error_title) - val message = - intent.getStringExtra(EXTRA_MESSAGE) ?: getString(R.string.server_error_message) - - showServerErrorDialog(title, message) - } - - private fun showServerErrorDialog(title: String, message: String) { - AlertDialog.Builder(this) - .setTitle(title) - .setMessage(message) - .setPositiveButton(getString(R.string.confirm)) { _, _ -> - finishAffinity() - } - .setCancelable(false) - .create() - .show() - } - - companion object { - const val EXTRA_TITLE = "extra_title" - const val EXTRA_MESSAGE = "extra_message" - } -} - diff --git a/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt b/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt index cee80130..08ad3a48 100644 --- a/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt +++ b/app/src/main/java/com/eatssu/android/presentation/intro/IntroActivity.kt @@ -37,6 +37,7 @@ class IntroActivity : AppCompatActivity() { observeState() observeEvents() + observeNetworkError() lifecycleScope.launch { // 버전 체크 결과 관찰 @@ -88,8 +89,6 @@ class IntroActivity : AppCompatActivity() { } } } - - observeNetworkError() } private fun log() { diff --git a/app/src/main/java/com/eatssu/android/presentation/util/ActivityUtil.kt b/app/src/main/java/com/eatssu/android/presentation/util/ActivityUtil.kt index 0e3c7090..af9dee9f 100644 --- a/app/src/main/java/com/eatssu/android/presentation/util/ActivityUtil.kt +++ b/app/src/main/java/com/eatssu/android/presentation/util/ActivityUtil.kt @@ -1,12 +1,12 @@ package com.eatssu.android.presentation.util import android.app.Activity +import android.app.AlertDialog import android.content.Intent import androidx.appcompat.app.AppCompatActivity import androidx.lifecycle.lifecycleScope import com.eatssu.android.R import com.eatssu.android.presentation.base.NetworkErrorEventBus -import com.eatssu.android.presentation.error.ServerErrorActivity import kotlinx.coroutines.launch inline fun AppCompatActivity.startActivity(block: Intent.() -> Unit = {}) { @@ -14,26 +14,38 @@ inline fun AppCompatActivity.startActivity(block: Intent. } /** - * NetworkErrorEventBus를 구독하여 네트워크 에러 발생 시 ServerErrorActivity로 이동합니다. + * NetworkErrorEventBus를 구독하여 네트워크 에러 발생 시 다이얼로그를 표시합니다. + * 액티비티를 종료하지 않아 진행 중인 요청이 취소되지 않습니다. */ fun AppCompatActivity.observeNetworkError( errorTitle: String? = null, errorMessage: String? = null ) { + var networkErrorDialog: AlertDialog? = null + lifecycleScope.launch { NetworkErrorEventBus.networkError.collect { - val intent = Intent(this@observeNetworkError, ServerErrorActivity::class.java).apply { - putExtra( - ServerErrorActivity.EXTRA_TITLE, - errorTitle ?: getString(R.string.server_error_title) - ) - putExtra( - ServerErrorActivity.EXTRA_MESSAGE, - errorMessage ?: getString(R.string.server_error_message) - ) + if (networkErrorDialog?.isShowing == true) { + return@collect } - startActivity(intent) - finish() + + val title = errorTitle ?: getString(R.string.server_error_title) + val message = errorMessage ?: getString(R.string.server_error_message) + + networkErrorDialog = AlertDialog.Builder(this@observeNetworkError) + .setTitle(title) + .setMessage(message) + .setPositiveButton(getString(R.string.confirm)) { dialog, _ -> + dialog.dismiss() + } + .setCancelable(true) + .create() + .also { dialog -> + dialog.setOnDismissListener { + networkErrorDialog = null + } + dialog.show() + } } } } \ No newline at end of file