Skip to content

Commit

Permalink
Merge pull request #282 from team-MUMENT/issue-#273
Browse files Browse the repository at this point in the history
#273 [FIX] Interceptor 로직 개선
  • Loading branch information
KkamSonLee authored Jul 17, 2023
2 parents 6eab00b + 4fd7c04 commit 118508b
Show file tree
Hide file tree
Showing 7 changed files with 38 additions and 77 deletions.
6 changes: 0 additions & 6 deletions app/src/main/java/com/mument_android/app/di/NetworkModule.kt
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,6 @@ object NetworkModule {
@Singleton
fun provideErrorHandler(): ErrorHandler = ErrorHandlerImpl()


@Provides
@Singleton
fun provideLoggingInterceptor(): HttpLoggingInterceptor =
Expand Down Expand Up @@ -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"
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,22 @@ 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

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)
}
}
}
}
Original file line number Diff line number Diff line change
@@ -1,24 +1,24 @@
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
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() }
Expand Down Expand Up @@ -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{

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down Expand Up @@ -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 {
Expand All @@ -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()
Expand All @@ -85,6 +74,7 @@ class AuthInterceptor @Inject constructor(
runBlocking(Dispatchers.Main) {
Toast.makeText(context, "세션이 만료되었습니다. 다시 로그인해주세요:)", Toast.LENGTH_SHORT).show()
}
loginNavigatorProvider.navToLogin()
}
runBlocking {
dataStoreManager.writeAccessToken("")
Expand Down Expand Up @@ -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 "
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ class HomeFragment : Fragment() {
receiveEffect()
binding.tvSearch.setOnClickListener {
viewModel.emitEvent(HomeEvent.OnClickSearch)

}
binding.ivNotify.setOnClickListener {
viewModel.emitEvent(HomeEvent.OnClickNotification)
Expand Down
21 changes: 8 additions & 13 deletions feature/login/src/main/java/com/mument_android/SplashActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand All @@ -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
Expand All @@ -37,30 +35,27 @@ class SplashActivity : BaseActivity<ActivitySplashBinding>(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()
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -51,41 +51,6 @@ class LogInActivity : BaseActivity<ActivityLogInBinding>(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) { //기기 토큰 얻어오는 코드
Expand Down

0 comments on commit 118508b

Please sign in to comment.