From 4fd7c045056447beb711a2331f930d80fec3adc6 Mon Sep 17 00:00:00 2001 From: minho Date: Sun, 16 Jul 2023 18:16:18 +0900 Subject: [PATCH] =?UTF-8?q?#273=20[FIX]=20Interceptor=20=EB=A1=9C=EC=A7=81?= =?UTF-8?q?=20=EA=B0=9C=EC=84=A0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../mument_android/app/di/NetworkModule.kt | 6 ---- .../navigator/LogInNavigatorProviderImpl.kt | 14 +++++--- .../core_dependent/ext/ViewExtensions.kt | 21 +++++++++-- .../data/network/AuthInterceptor.kt | 17 ++------- .../mument_android/home/main/HomeFragment.kt | 1 - .../java/com/mument_android/SplashActivity.kt | 21 +++++------ .../com/mument_android/login/LogInActivity.kt | 35 ------------------- 7 files changed, 38 insertions(+), 77 deletions(-) diff --git a/app/src/main/java/com/mument_android/app/di/NetworkModule.kt b/app/src/main/java/com/mument_android/app/di/NetworkModule.kt index 6d3052a5e..23150c8da 100644 --- a/app/src/main/java/com/mument_android/app/di/NetworkModule.kt +++ b/app/src/main/java/com/mument_android/app/di/NetworkModule.kt @@ -40,7 +40,6 @@ object NetworkModule { @Singleton fun provideErrorHandler(): ErrorHandler = ErrorHandlerImpl() - @Provides @Singleton fun provideLoggingInterceptor(): HttpLoggingInterceptor = @@ -162,9 +161,4 @@ object NetworkModule { @Singleton fun provideRefreshTokenApiService(@UnAuthRetrofit retrofit: Retrofit): RefreshTokenApiService = retrofit.create() - - private fun Request.Builder.addHeaders(token: String) = - this.apply { header("Authorization", "Bearer $token") } - - private const val BEARER = "Bearer" } \ No newline at end of file diff --git a/app/src/main/java/com/mument_android/app/presentation/ui/detail/mument/navigator/LogInNavigatorProviderImpl.kt b/app/src/main/java/com/mument_android/app/presentation/ui/detail/mument/navigator/LogInNavigatorProviderImpl.kt index 5e46d7c6f..f9bd7db26 100644 --- a/app/src/main/java/com/mument_android/app/presentation/ui/detail/mument/navigator/LogInNavigatorProviderImpl.kt +++ b/app/src/main/java/com/mument_android/app/presentation/ui/detail/mument/navigator/LogInNavigatorProviderImpl.kt @@ -3,6 +3,8 @@ package com.mument_android.app.presentation.ui.detail.mument.navigator import android.content.Context import android.content.Intent import com.angdroid.navigation.LogInNavigatorProvider +import com.mument_android.SplashActivity +import com.mument_android.core_dependent.ext.getTopActivity import com.mument_android.login.LogInActivity import javax.inject.Inject @@ -10,11 +12,13 @@ class LogInNavigatorProviderImpl @Inject constructor( private val context: Context ): LogInNavigatorProvider { override fun navToLogin() { - Intent(context, LogInActivity::class.java).apply { - flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or - Intent.FLAG_ACTIVITY_CLEAR_TASK or - Intent.FLAG_ACTIVITY_NEW_TASK - context.startActivity(this) + if (context.getTopActivity() != SplashActivity::class.java.simpleName) { + Intent(context, LogInActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or + Intent.FLAG_ACTIVITY_CLEAR_TASK or + Intent.FLAG_ACTIVITY_NEW_TASK + context.startActivity(this) + } } } } \ No newline at end of file diff --git a/core_dependent/src/main/java/com/mument_android/core_dependent/ext/ViewExtensions.kt b/core_dependent/src/main/java/com/mument_android/core_dependent/ext/ViewExtensions.kt index d8089e3aa..a08787367 100644 --- a/core_dependent/src/main/java/com/mument_android/core_dependent/ext/ViewExtensions.kt +++ b/core_dependent/src/main/java/com/mument_android/core_dependent/ext/ViewExtensions.kt @@ -1,7 +1,8 @@ package com.mument_android.core_dependent.ext -import android.app.Activity import android.app.Activity.RESULT_OK +import android.app.ActivityManager +import android.content.Context import android.content.Intent import android.util.TypedValue import android.view.View @@ -9,16 +10,15 @@ import android.widget.ImageView import android.widget.TextView import androidx.activity.result.ActivityResultLauncher import androidx.activity.result.contract.ActivityResultContracts -import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.widget.AppCompatTextView import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.databinding.BindingAdapter import androidx.fragment.app.FragmentActivity import com.mument_android.core.model.TagEntity.Companion.TAG_IS_FIRST -import com.mument_android.core_dependent.util.ViewUtils.dpToPx import com.mument_android.core_dependent.R import com.mument_android.core_dependent.util.OnSingleClickListener +import com.mument_android.core_dependent.util.ViewUtils.dpToPx inline fun View.click(crossinline block: () -> Unit) { setOnClickListener { block() } @@ -47,6 +47,21 @@ inline fun FragmentActivity.getActivityResult(crossinline resultSuccess: (Intent } } +fun Context.getTopActivity(): String { + return try { + val activityManager = getSystemService(ActivityManager::class.java) + val list = activityManager.appTasks + if (list.isEmpty() || list[0].taskInfo.topActivity == null) { + "" + } else { + val topClassName = list[0].taskInfo.topActivity?.className ?: "" + val lastIndex = topClassName.lastIndexOf(".") + 1 + topClassName.substring(lastIndex) + } + } catch (e: Exception) { + "" + } +} object BindingExtension{ diff --git a/data/src/main/java/com/mument_android/data/network/AuthInterceptor.kt b/data/src/main/java/com/mument_android/data/network/AuthInterceptor.kt index 2ce1e1dff..44731e78f 100644 --- a/data/src/main/java/com/mument_android/data/network/AuthInterceptor.kt +++ b/data/src/main/java/com/mument_android/data/network/AuthInterceptor.kt @@ -4,7 +4,6 @@ import android.content.Context import android.widget.Toast import com.angdroid.navigation.LogInNavigatorProvider import com.mument_android.core_dependent.ext.DataStoreManager -import com.mument_android.core_dependent.ext.collectFlow import com.mument_android.core_dependent.network.TokenDataSource import dagger.hilt.EntryPoint import dagger.hilt.EntryPoints @@ -37,23 +36,13 @@ class AuthInterceptor @Inject constructor( override fun intercept(chain: Interceptor.Chain): Response { val accessToken = runBlocking { - collectFlow(dataStoreManager.accessTokenFlow) { - dataStoreManager.writeAccessToken(it ?: "") - if (it == null) { - dataStoreManager.writeRefreshToken(it ?: "") - dataStoreManager.refreshTokenFlow.first() - } - } - dataStoreManager.accessTokenFlow.first() + dataStoreManager.accessTokenFlow.first() ?: "" } - val request = chain.request() .newBuilder() .addHeaders(accessToken) .build() - val response = chain.proceed(request) - return if (response.code == HttpURLConnection.HTTP_UNAUTHORIZED) { retryConnection(chain, context, response) } else { @@ -71,7 +60,7 @@ class AuthInterceptor @Inject constructor( do { response.close() refreshAccessToken() - val token = runBlocking { dataStoreManager.refreshTokenFlow.first() } + val token = runBlocking { dataStoreManager.accessTokenFlow.first() } val newRequest = chain.request().newBuilder() .addHeaders(token) .build() @@ -85,6 +74,7 @@ class AuthInterceptor @Inject constructor( runBlocking(Dispatchers.Main) { Toast.makeText(context, "세션이 만료되었습니다. 다시 로그인해주세요:)", Toast.LENGTH_SHORT).show() } + loginNavigatorProvider.navToLogin() } runBlocking { dataStoreManager.writeAccessToken("") @@ -112,7 +102,6 @@ class AuthInterceptor @Inject constructor( private const val MAX_RETRY_COUNT = 2 private fun Request.Builder.addHeaders(token: String?) = this.apply { header("Authorization", BEARER + token.toString()) } - private const val BEARER = "Bearer " } } \ No newline at end of file diff --git a/feature/home/src/main/java/com/mument_android/home/main/HomeFragment.kt b/feature/home/src/main/java/com/mument_android/home/main/HomeFragment.kt index 44109f836..4334032b9 100644 --- a/feature/home/src/main/java/com/mument_android/home/main/HomeFragment.kt +++ b/feature/home/src/main/java/com/mument_android/home/main/HomeFragment.kt @@ -97,7 +97,6 @@ class HomeFragment : Fragment() { receiveEffect() binding.tvSearch.setOnClickListener { viewModel.emitEvent(HomeEvent.OnClickSearch) - } binding.ivNotify.setOnClickListener { viewModel.emitEvent(HomeEvent.OnClickNotification) diff --git a/feature/login/src/main/java/com/mument_android/SplashActivity.kt b/feature/login/src/main/java/com/mument_android/SplashActivity.kt index 508fa46b9..d95104c23 100644 --- a/feature/login/src/main/java/com/mument_android/SplashActivity.kt +++ b/feature/login/src/main/java/com/mument_android/SplashActivity.kt @@ -2,9 +2,6 @@ package com.mument_android 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.lifecycle.lifecycleScope import com.angdroid.navigation.MainHomeNavigatorProvider @@ -15,6 +12,7 @@ import com.mument_android.login.LogInViewModel import com.mument_android.login.databinding.ActivitySplashBinding import com.mument_android.onboarding.OnBoardingActivity import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.flow.firstOrNull import kotlinx.coroutines.launch @@ -37,30 +35,27 @@ class SplashActivity : BaseActivity(ActivitySplashBinding //스플래시 -> 우선은 로그인으로 가는 로직 (후에 토큰 관리하다보면 login or main 분기처리) private fun initSplash() { - Handler(Looper.getMainLooper()).postDelayed({ - isFirst() - }, DURATION) - } - - private fun isFirst() { lifecycleScope.launch { + delay(DURATION) if (dataStoreManager.isFirstFlow.firstOrNull() == null) { - Log.e("datastore", "onBoarding") val intent = Intent(this@SplashActivity, OnBoardingActivity::class.java) startActivity(intent) finish() } else { + viewModel.isExistProfile() if (dataStoreManager.isFirstFlow.firstOrNull() == false) { dataStoreManager.writeIsFirst(true) } - viewModel.isExistProfile() viewModel.isExist.collectLatest { exist -> - Log.e("Why?", exist.toString()) if (exist == true) { moveToMainActivity() finish() } else if (exist == false) { - val intent = Intent(this@SplashActivity, LogInActivity::class.java) + val intent = Intent(this@SplashActivity, LogInActivity::class.java).apply { + flags = Intent.FLAG_ACTIVITY_CLEAR_TOP or + Intent.FLAG_ACTIVITY_CLEAR_TASK or + Intent.FLAG_ACTIVITY_NEW_TASK + } startActivity(intent) finish() } diff --git a/feature/login/src/main/java/com/mument_android/login/LogInActivity.kt b/feature/login/src/main/java/com/mument_android/login/LogInActivity.kt index 355101545..592872d5a 100644 --- a/feature/login/src/main/java/com/mument_android/login/LogInActivity.kt +++ b/feature/login/src/main/java/com/mument_android/login/LogInActivity.kt @@ -51,41 +51,6 @@ class LogInActivity : BaseActivity(ActivityLogInBinding::i //keyClipBoard() } - /* - private fun keyClipBoard() { - var keyHash = Utility.getKeyHash(this) - Log.e("kkkkkkkkkk:", "$keyHash") - binding.key.setText("$keyHash") - val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - - // 새로운 ClipData 객체로 데이터 복사하기 - val clip: ClipData = - ClipData.newPlainText("simple text", binding.key.text.toString()) - - // 새로운 클립 객체를 클립보드에 배치합니다. - clipboard.setPrimaryClip(clip) - - Toast.makeText(this, "복사 완료.", Toast.LENGTH_SHORT).show() - false - - binding.key.setOnClickListener { - val clipboard = getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager - - // 새로운 ClipData 객체로 데이터 복사하기 - val clip: ClipData = - ClipData.newPlainText("simple text", binding.key.text.toString()) - - // 새로운 클립 객체를 클립보드에 배치합니다. - clipboard.setPrimaryClip(clip) - - Toast.makeText(this, "복사 완료.", Toast.LENGTH_SHORT).show() - false - } - } - - */ - - private fun getFcmToken() { FirebaseMessaging.getInstance().token.addOnCompleteListener(OnCompleteListener { task -> if (!task.isSuccessful) { //기기 토큰 얻어오는 코드