diff --git a/app/src/main/java/jp/atled/agileworks/model/AppRepository.kt b/app/src/main/java/jp/atled/agileworks/model/AppRepository.kt new file mode 100644 index 0000000000000000000000000000000000000000..87de81df651a202507385686220ea063fdd6db1b --- /dev/null +++ b/app/src/main/java/jp/atled/agileworks/model/AppRepository.kt @@ -0,0 +1,17 @@ +package jp.atled.agileworks.model + +class AppRepository { + fun getAppBackGroundStatus(): Boolean { + return appBackGroundStatus + } + + fun setAppBackGroundStatus(status: Boolean) { + appBackGroundStatus = status + } + + companion object { + fun getInstance() = AppRepository() + // アプリがバックグラウンドか + private var appBackGroundStatus = false + } +} \ No newline at end of file diff --git a/app/src/main/java/jp/atled/agileworks/view/base/BaseViewModel.kt b/app/src/main/java/jp/atled/agileworks/view/base/BaseViewModel.kt index 31e7adecf0a97477a7ec4983e0293be98eb607cb..13d7ef43b4393eccecc0abaa39c4d7d186fa64b9 100644 --- a/app/src/main/java/jp/atled/agileworks/view/base/BaseViewModel.kt +++ b/app/src/main/java/jp/atled/agileworks/view/base/BaseViewModel.kt @@ -2,10 +2,20 @@ package jp.atled.agileworks.view.base import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel +import jp.atled.agileworks.model.AppRepository open class BaseViewModel : ViewModel() { val dataLoading = MutableLiveData().apply { value = false } val logout = MutableLiveData() + + fun getAppBackGroundStatus(): Boolean { + return AppRepository.getInstance().getAppBackGroundStatus() + } + + fun setAppBackGroundStatus(status: Boolean) { + AppRepository.getInstance().setAppBackGroundStatus(status) + } + } \ No newline at end of file diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt index 6fe824773832bc605aeacc6b69ac21f5d532f655..f4f7cb3153912486dcb27c6199d054020a05e777 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/documentweb/DocumentWebFragment.kt @@ -12,8 +12,6 @@ import android.webkit.CookieManager import android.webkit.WebView import android.widget.Button import android.widget.RelativeLayout -import android.widget.TextView -import android.widget.Toolbar import androidx.core.view.GestureDetectorCompat import androidx.fragment.app.Fragment import androidx.lifecycle.ViewModelProvider @@ -89,6 +87,9 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { displayDisconnectViewState() webShare.presenter.updateAutoReloadState(true) + + // アプリがバックグラウンドかの情報 + viewDataBinding?.viewModel?.setAppBackGroundStatus(false) } override fun onDestroyView() { @@ -116,6 +117,8 @@ class DocumentWebFragment : Fragment(), DocumentWebPresenter { } catch (e: Exception) { Log.e(TAG, "${e.message}") } + // バックグラウンドかの情報 + viewDataBinding?.viewModel?.setAppBackGroundStatus(true) } @SuppressLint("ClickableViewAccessibility") diff --git a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt index 0b4d81da233d6c0f94e0c4747ca871085cbd394c..53137cb0325e5df35834aaad945cf4e1208cf3fd 100644 --- a/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt +++ b/app/src/main/java/jp/atled/agileworks/view/ui/login/LoginFragment.kt @@ -75,16 +75,23 @@ class LoginFragment: Fragment() { } else { // 過去に認証したときの authState を取得 if (mOAuthService.getAuthState(savedInstanceState).isAuthorized) { - // 認証済みの場合、生体/デバイス認証を実行 - Log.d(TAG, "authState.isAuthorized == true") - if (BiometricPrompt.anyAuthenticationAvailable(this.requireContext())) { + if (binding.viewmodel?.getAppBackGroundStatus() == true) { + Log.d(TAG, "authState.isAuthorized == true") + Log.d(TAG,"appBackGroundStatus == true") disableLogin() - Handler().postDelayed({ - startBiometricPrompt() - }, 0) + onSuccessAuth() } else { - // 認証設定が全くされていない場合、一旦ログアウトしてから同じサーバ・ドメインで OAuth2 認証を再実行 - relogin() + // 認証済みの場合、生体/デバイス認証を実行 + Log.d(TAG, "authState.isAuthorized == true") + if (BiometricPrompt.anyAuthenticationAvailable(this.requireContext())) { + disableLogin() + Handler().postDelayed({ + startBiometricPrompt() + }, 0) + } else { + // 認証設定が全くされていない場合、一旦ログアウトしてから同じサーバ・ドメインで OAuth2 認証を再実行 + relogin() + } } } else { // 認証されていない場合、ログイン画面を表示 @@ -243,7 +250,7 @@ class LoginFragment: Fragment() { Log.d(TAG, "call startBiometricPrompt()") BiometricPrompt.auth(this.requireActivity()) { when (it) { - BiometricPrompt.Result.Success -> onSuccessBiometricAuth() + BiometricPrompt.Result.Success -> onSuccessAuth() BiometricPrompt.Result.UnsupportedHardware -> onFailureAuthBiometricPrompt(R.string.auth_biometric_unsupported_hardware) BiometricPrompt.Result.NotHasBiometricsOnHardware -> onFailureAuthBiometricPrompt(R.string.auth_biometric_not_has_biometrics_on_hardware) BiometricPrompt.Result.Cancel -> onFailureAuthBiometricPrompt(R.string.auth_biometric_cancel) @@ -252,9 +259,9 @@ class LoginFragment: Fragment() { } } - private fun onSuccessBiometricAuth() { - // 生体認証に成功した場合、トークンを更新 - Log.d(TAG, "call onSuccessBiometricAuth()") + private fun onSuccessAuth() { + // トークンを更新 + Log.d(TAG, "call onSuccessAuth()") mOAuthService.performAction(AuthState.AuthStateAction() { accessToken, _, ex -> if (ex != null) {