アプリがクラッシュしました
java.lang.NoSuchMethodError: No virtual method updateSuccess(Lkotlin/jvm/functions/Function3;)V in class Ljp/or/jaf/syg/feature/jafrsho01/jafrsho01020/JAFRSHO01020ViewModel; or its super classes (declaration of 'jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel' appears in /data/data/jp.or.jaf.syg/code_cache/.overlay/base.apk/classes9.dex)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel.onNewPwDspSwitch(JAFRSHO01020ViewModel.kt:410)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel.onAction(JAFRSHO01020ViewModel.kt:111)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020PopupKt$ContentView$1$1.invoke(JAFRSHO01020Popup.kt:56)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020PopupKt$ContentView$1$1.invoke(JAFRSHO01020Popup.kt:56)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt.JAFRSHO01020Content$lambda$14$lambda$3$lambda$2(JAFRSHO01020Content.kt:46)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt.$r8$lambda$fzBcZZICWk_wMGd0W3tzT7R9qto(Unknown Source:0)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke-k-4lQ0M(Clickable.kt:639)
at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke(Clickable.kt:633)
at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:179)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:168)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:474)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:508)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:497)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:368)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:719)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:598)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:620)
at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:1044)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:387)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373)
at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:229)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:144)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:120)
at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1994)
at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1945)
at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1829)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
2025-09-29 16:22:29.691 21401-21401 CrashHandler jp.or.jaf.syg E at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:458)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1980)
at android.app.Dialog.dispatchTouchEvent(Dialog.java:935)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:416)
at android.view.View.dispatchPointerEvent(View.java:16729)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7947)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7710)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7106)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7295)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7352)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10214)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10165)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10134)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10356)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:295)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:346)
at android.os.Looper.loopOnce(Looper.java:189)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@ea443a4, androidx.compose.runtime.BroadcastFrameClock@d64f50d, StandaloneCoroutine{Cancelling}@bb47cc2, AndroidUiDispatcher@9e86ad3]
2025-09-29 16:22:29.697 21401-21438 EGL_emulation jp.or.jaf.syg D app_time_stats: avg=3681.39ms min=6.55ms max=32232.14ms count=9
2025-09-29 16:22:29.699 21401-21401 AndroidRuntime jp.or.jaf.syg E FATAL EXCEPTION: main
Process: jp.or.jaf.syg, PID: 21401
java.lang.NoSuchMethodError: No virtual method updateSuccess(Lkotlin/jvm/functions/Function3;)V in class Ljp/or/jaf/syg/feature/jafrsho01/jafrsho01020/JAFRSHO01020ViewModel; or its super classes (declaration of 'jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel' appears in /data/data/jp.or.jaf.syg/code_cache/.overlay/base.apk/classes9.dex)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel.onNewPwDspSwitch(JAFRSHO01020ViewModel.kt:410)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020ViewModel.onAction(JAFRSHO01020ViewModel.kt:111)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020PopupKt$ContentView$1$1.invoke(JAFRSHO01020Popup.kt:56)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.JAFRSHO01020PopupKt$ContentView$1$1.invoke(JAFRSHO01020Popup.kt:56)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt.JAFRSHO01020Content$lambda$14$lambda$3$lambda$2(JAFRSHO01020Content.kt:46)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt.$r8$lambda$fzBcZZICWk_wMGd0W3tzT7R9qto(Unknown Source:0)
at jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.components.JAFRSHO01020ContentKt$$ExternalSyntheticLambda1.invoke(D8$$SyntheticClass:0)
at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke-k-4lQ0M(Clickable.kt:639)
at androidx.compose.foundation.ClickableNode$clickPointerInput$3.invoke(Clickable.kt:633)
at androidx.compose.foundation.gestures.TapGestureDetectorKt$detectTapAndPress$2$1.invokeSuspend(TapGestureDetector.kt:255)
at kotlin.coroutines.jvm.internal.BaseContinuationImpl.resumeWith(ContinuationImpl.kt:33)
at kotlinx.coroutines.DispatchedTaskKt.resume(DispatchedTask.kt:179)
at kotlinx.coroutines.DispatchedTaskKt.dispatch(DispatchedTask.kt:168)
at kotlinx.coroutines.CancellableContinuationImpl.dispatchResume(CancellableContinuationImpl.kt:474)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl(CancellableContinuationImpl.kt:508)
at kotlinx.coroutines.CancellableContinuationImpl.resumeImpl$default(CancellableContinuationImpl.kt:497)
at kotlinx.coroutines.CancellableContinuationImpl.resumeWith(CancellableContinuationImpl.kt:368)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl$PointerEventHandlerCoroutine.offerPointerEvent(SuspendingPointerInputFilter.kt:719)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.dispatchPointerEvent(SuspendingPointerInputFilter.kt:598)
at androidx.compose.ui.input.pointer.SuspendingPointerInputModifierNodeImpl.onPointerEvent-H0pRuoY(SuspendingPointerInputFilter.kt:620)
at androidx.compose.foundation.AbstractClickableNode.onPointerEvent-H0pRuoY(Clickable.kt:1044)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:387)
at androidx.compose.ui.input.pointer.Node.dispatchMainEventPass(HitPathTracker.kt:373)
at androidx.compose.ui.input.pointer.NodeParent.dispatchMainEventPass(HitPathTracker.kt:229)
at androidx.compose.ui.input.pointer.HitPathTracker.dispatchChanges(HitPathTracker.kt:144)
at androidx.compose.ui.input.pointer.PointerInputEventProcessor.process-BIzXfog(PointerInputEventProcessor.kt:120)
at androidx.compose.ui.platform.AndroidComposeView.sendMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1994)
at androidx.compose.ui.platform.AndroidComposeView.handleMotionEvent-8iAsVTc(AndroidComposeView.android.kt:1945)
at androidx.compose.ui.platform.AndroidComposeView.dispatchTouchEvent(AndroidComposeView.android.kt:1829)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
2025-09-29 16:22:29.701 21401-21401 AndroidRuntime jp.or.jaf.syg E at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3122)
at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:2803)
at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:458)
at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1980)
at android.app.Dialog.dispatchTouchEvent(Dialog.java:935)
at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:416)
at android.view.View.dispatchPointerEvent(View.java:16729)
at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:7947)
at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:7710)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7106)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:7295)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:7352)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:7163)
at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:7129)
at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:7137)
at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:7110)
at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:10214)
at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:10165)
at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:10134)
at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:10356)
at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:295)
at android.os.MessageQueue.nativePollOnce(Native Method)
at android.os.MessageQueue.next(MessageQueue.java:346)
at android.os.Looper.loopOnce(Looper.java:189)
at android.os.Looper.loop(Looper.java:317)
at android.app.ActivityThread.main(ActivityThread.java:8705)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:580)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:886)
Suppressed: kotlinx.coroutines.internal.DiagnosticCoroutineContextException: [androidx.compose.ui.platform.MotionDurationScaleImpl@ea443a4, androidx.compose.runtime.BroadcastFrameClock@d64f50d, StandaloneCoroutine{Cancelling}@bb47cc2, AndroidUiDispatcher@9e86ad3]
下面的代码报上面的错误,是哪里错了,应该怎么改?
package jp.or.jaf.syg.feature.jafrsho01.jafrsho01020
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.text.input.PasswordVisualTransformation
import androidx.compose.ui.text.input.VisualTransformation
import dagger.hilt.android.lifecycle.HiltViewModel
import jp.or.jaf.syg.core.common.base.JafViewModel
import jp.or.jaf.syg.core.common.event.JafAction
import jp.or.jaf.syg.core.common.event.JafEvent
import jp.or.jaf.syg.core.common.util.JsonUtils
import jp.or.jaf.syg.core.designsystem.R
import jp.or.jaf.syg.core.designsystem.theme.resources
import jp.or.jaf.syg.domain.exception.StandardBusinessException.BusinessException
import jp.or.jaf.syg.domain.message.Message
import jp.or.jaf.syg.domain.model.jafrshs99.SendIFInfo
import jp.or.jaf.syg.domain.model.jafrshs99.SendResultModel
import jp.or.jaf.syg.domain.model.request.JAFRSJS05580IF01Req
import jp.or.jaf.syg.domain.repository.jafrsho01.IJAFRSHO01020Repository
import jp.or.jaf.syg.domain.usecase.jafrsho01.jafrsho01020.IJAFRSHO01020E004UseCase
import jp.or.jaf.syg.domain.usecase.jafrshs99.jafrshs99020.IJAFRSHS99020P001UseCase
import jp.or.jaf.syg.feature.jafrsho01.jafrsho01020.mappers.toPwModifyInfoInModel
import javax.inject.Inject
/**
* 【画面仕様: JAFRSHO01020】パスワード変更ポップアップのViewModel実装
*/
@HiltViewModel
class JAFRSHO01020ViewModel @Inject constructor(
/** IF送信処理UseCase */
private val jAFRSHS99020P001UseCase: IJAFRSHS99020P001UseCase,
/** 確定 - 押下UseCase */
private val jAFRSHO01020E004UseCase: IJAFRSHO01020E004UseCase,
/** JAFRSHO01020 パスワード変更リポジトリ */
private val jAFRSHO01020Repository: IJAFRSHO01020Repository,
) : JafViewModel<JAFRSHO01020UiStateData>() {
/**
* 定数(設計書準拠)
*/
companion object {
/** 最小パスワード入力桁数 */
private const val MIN_INPUT_LENGTH = 8
/** 最大パスワード入力桁数 */
private const val MAX_INPUT_LENGTH = 20
/** 連続文字制限 */
private const val RENZOKU_SEIGEN_LENGTH: Int = 3
}
/**
* パスワード表示モード列挙型
* 設計書の定数に対応
*/
enum class PasswordDisplayMode {
/** マスク表示 */
MASK_DSP,
/** パスワード表示 */
PW_DSP
}
/**
* システムイベント処理
* @param event 基本イベントクラス
*/
override fun onEvent(event: JafEvent) {
when (event) {
is JafEvent.Companion.InitializeWithParameters<*> -> {
// パラメータ付き初期化(編集画面等)
// 画面設計書記載のパラメータ付き初期表示処理
val params = event.params as? JAFRSHO01020Model
onPopupDisplay(
params?.userCdParam ?: "",
params?.henkouMaePwParam ?: "",
params?.pwValidKigenDaysParam ?: 0,
)
}
}
}
/**
* アクション処理
*
* @param action 基本アクションクラス
*/
override fun onAction(action: JafAction) {
when (action) {
// JAFRSHO01020E002 ×(閉じる) - 押下
is JAFRSHO01020Action.WindowClose -> {
onWindowClose()
}
// JAFRSHO01020E003 閉じる - 押下
is JAFRSHO01020Action.Close -> {
onClose()
}
// JAFRSHO01020E004 確定 - 押下
is JAFRSHO01020Action.Confirm -> {
launchWithLoading {
onConfirm(
action.userCdParam,
action.henkouMaePwParam,
action.pwValidKigenDaysParam,
)
}
}
// JAFRSHO01020E005 新パスワード表示切替アイコン - 押下
is JAFRSHO01020Action.NewPwDspSwitch -> {
onNewPwDspSwitch()
}
// JAFRSHO01020E006 確認用パスワード表示切替アイコン - 押下
is JAFRSHO01020Action.ConfirmPwDspSwitch -> {
onConfirmPwDspSwitch()
}
// JAFRSHO01020E007 - 新パスワード - 入力
is JAFRSHO01020Action.UpdateNewPassword -> {
val currentData: JAFRSHO01020UiStateData =
getCurrentData() ?: JAFRSHO01020UiStateData()
onNewPasswordUpdate(currentData.txtboxNewPw)
}
// JAFRSHO01020E008 - 確認用パスワード - 入力
is JAFRSHO01020Action.UpdateConfirmPassword -> {
val currentData: JAFRSHO01020UiStateData =
getCurrentData() ?: JAFRSHO01020UiStateData()
onConfirmPasswordUpdate(currentData.txtboxConfirmPw)
}
}
}
/**
* 【処理仕様: JAFRSHO01020E001】画面表示処理
* @param userCdParam ユーザーコード
* @param henkouMaePwParam 変更前パスワード
* @param pwValidKigenDaysParam パスワード有効期限日数
*/
private fun onPopupDisplay(
userCdParam: String,
henkouMaePwParam: String,
pwValidKigenDaysParam: Int
) {
val currentData: JAFRSHO01020UiStateData = getCurrentData() ?: JAFRSHO01020UiStateData()
// パラメータ付き初期化を実行
setSuccess(
currentData.copy(
txtboxNewPw = "",
txtboxConfirmPw = "",
newPwDspSwitch = PasswordDisplayMode.MASK_DSP,
confirmPwDspSwitch = PasswordDisplayMode.MASK_DSP,
newPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxNewPwDspInfo = VisualTransformation.None,
confirmPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxConfirmPwDspInfo = VisualTransformation.None
)
)
}
/**
* 【処理仕様: JAFRSHO01020E002】×(閉じる) - 押下処理
*/
private fun onWindowClose() {
// パスワード変更ポップアップを閉じる
navigateBack()
}
/**
* 【処理仕様: JAFRSHO01020E003】閉じる - 押下処理
*/
private fun onClose() {
// パスワード変更ポップアップを閉じる
navigateBack()
}
/**
* 【処理仕様: JAFRSHO01020E004】確定 - 押下処理
*
* @param userCdParam ユーザーコード
* @param henkouMaePwParam 変更前パスワード
* @param pwValidKigenDaysParam パスワード有効期限日数
*/
private suspend fun onConfirm(
userCdParam: String,
henkouMaePwParam: String,
pwValidKigenDaysParam: Int
) {
// 入力チェックを実施する。
val currentData: JAFRSHO01020UiStateData = getCurrentData() ?: JAFRSHO01020UiStateData()
val txtboxNewPw = currentData.txtboxNewPw
val txtboxConfirmPw = currentData.txtboxConfirmPw
val userCdParam = userCdParam
val henkouMaePwParam = henkouMaePwParam
// 新パスワード未入力チェック
if (txtboxNewPw.isNullOrEmpty()) {
showMessage(
Message.JAFRSHO99010WC00005.id,
listOf("新パスワード"),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
// 新パスワード桁数チェック
if (txtboxNewPw.length < MIN_INPUT_LENGTH || txtboxNewPw.length > MAX_INPUT_LENGTH) {
showMessage(
Message.JAFRSHO99010WC00110.id,
listOf(""),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
// 新パスワード強度チェック
// 項目定義.txtboxNewPw(新パスワード)に 引数.userCdParam(ユーザーコード)の連続する3文字以上が含まれる
var isConsecutiveCharactersFlg = false
if (userCdParam.length < RENZOKU_SEIGEN_LENGTH) {
isConsecutiveCharactersFlg = false
}
for (i in 0..userCdParam.length - RENZOKU_SEIGEN_LENGTH) {
val sequence = userCdParam.substring(i, i + RENZOKU_SEIGEN_LENGTH)
if (txtboxNewPw.contains(sequence, ignoreCase = true)) {
isConsecutiveCharactersFlg = true
}
}
// 項目定義.txtboxNewPw(新パスワード).matches(Regex("^[^a-zA-Z0-9]+$")) ||
// ※(英小文字 OR 英大文字 OR 数字)が含まれていない
// 項目定義.txtboxNewPw(新パスワード)に 引数.userCdParam(ユーザーコード)の連続する3文字以上が含まれる
// 項目定義.txtboxNewPw(新パスワード) == 引数.henkouMaePwParam(変更前パスワード)
if ((txtboxNewPw.matches(Regex("^[^a-zA-Z0-9]+$"))) ||
isConsecutiveCharactersFlg ||
txtboxNewPw == henkouMaePwParam
) {
showMessage(
Message.JAFRSHO99010WC00111.id,
listOf(""),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
// 確認用パスワード未入力チェック
if (txtboxConfirmPw.isEmpty()) {
showMessage(
Message.JAFRSHO99010WC00005.id,
listOf("確認用パスワード"),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
// 新パスワードと一致するかチェック
if (txtboxNewPw != txtboxConfirmPw) {
showMessage(
Message.JAFRSHO99010WC00112.id,
listOf(""),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
try {
val currentData: JAFRSHO01020UiStateData = getCurrentData() ?: JAFRSHO01020UiStateData()
val txtboxNewPw = currentData.txtboxNewPw
val userCdParam = userCdParam
// 車載連携アプリにパスワード世代確認処理を送信する。
val sendIFInfoTmp1: SendIFInfo<JAFRSJS05580IF01Req> = SendIFInfo(
cdIf = "JAFRSJS05580IF01",
JSON = JAFRSJS05580IF01Req(
// ユーザーコード
cdUser = userCdParam,
// パスワード
password = txtboxNewPw,
),
serializer = JAFRSJS05580IF01Req.serializer()
)
// IF送信処理を実施する。
// TODO IF送信処理に問題がありますので、一旦送信処理コメント
val sendResultModelTmp1: SendResultModel =
invoke {
jAFRSHS99020P001UseCase(sendIFInfoTmp1)
}
if (sendResultModelTmp1.isIfSendSuccess) {
if (JsonUtils.getJsonValue(
sendResultModelTmp1.resultJSON,
"searchResult",
) == "0"
) {
// 何もしない
} else {
// 業務共通部品(メッセージダイアログ)を呼び出す
showMessage(
Message.JAFRSHO99010WC00111.id,
listOf(""),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
return
}
} else {
throw BusinessException(
messageId = sendResultModelTmp1.messageID,
params = listOf(sendResultModelTmp1.errCd),
operator = "IF送信処理失敗"
)
}
// 有効なユーザーか確認用件数を取得する。
// 有効なユーザーであるか確認する。
// 有効なユーザーか確認用件数を取得する。
val validUserCntTmp: Int =
jAFRSHO01020Repository.getValidUserCnt(userCdParam)
if (validUserCntTmp < 1) {
// 業務共通部品(メッセージダイアログ)を呼び出す
showMessage(
Message.JAFRSHO99010WC00113.id,
listOf(""),
onOk = {
// 「OK」ボタンを押下した場合、処理を終了する。
}
)
} else {
// 業務共通部品(メッセージダイアログ)を呼び出す
showMessage(
Message.JAFRSHO99010IC00228.id,
// 「いいえ」ボタンを押下した場合
onNo = {
// その他操作ボタンポップアップを閉じる。
},
// 「はい」ボタンを押下した場合
onYes = {
launchWithLoading("") {
val currentData: JAFRSHO01020UiStateData =
getCurrentData() ?: JAFRSHO01020UiStateData()
val txtboxNewPw = currentData.txtboxNewPw
// JAFRSHO01020E004UseCaseに渡す引数を設定する。
val pwModifyInfoInModel = currentData.toPwModifyInfoInModel(
userCdParam,
txtboxNewPw,
pwValidKigenDaysParam
)
// パスワード更新処理を行う。
invoke {
jAFRSHO01020E004UseCase(pwModifyInfoInModel)
}
}
}
)
}
// パスワード更新処理を行う。
val pwModifyInfoInModel = currentData.toPwModifyInfoInModel(
userCdParam,
txtboxNewPw,
pwValidKigenDaysParam
)
invoke {
jAFRSHO01020E004UseCase(pwModifyInfoInModel)
}
// パスワード変更ポップアップを閉じる
navigateBack()
} catch (ex: BusinessException) {
showMessage(
ex.messageId,
ex.message?.let { listOf(it) } ?: emptyList()
)
return
}
}
/**
* 【処理仕様: JAFRSHO01020E005】新パスワード表示切替アイコン - 押下処理
*/
private fun onNewPwDspSwitch() {
val currentData: JAFRSHO01020UiStateData = getCurrentData() ?: JAFRSHO01020UiStateData()
// インスタンス変数.新パスワード表示切替が定数.マスク表示の場合
if (currentData.newPwDspSwitch == PasswordDisplayMode.MASK_DSP) {
updateSuccess { currentData ->
currentData.copy(
newPwDspSwitch = PasswordDisplayMode.PW_DSP,
newPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxNewPwDspInfo = VisualTransformation.None
)
}
// インスタンス変数.新パスワード表示切替が定数.パスワード表示の場合
} else if (currentData.newPwDspSwitch == PasswordDisplayMode.PW_DSP) {
updateSuccess { currentData ->
currentData.copy(
newPwDspSwitch = PasswordDisplayMode.MASK_DSP,
newPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxNewPwDspInfo = PasswordVisualTransformation('※')
)
}
} else {
// 何もしない
}
}
/**
* 【処理仕様: JAFRSHO01020E006】確認用パスワード表示切替アイコン - 押下処理
*/
private fun onConfirmPwDspSwitch() {
val currentData: JAFRSHO01020UiStateData = getCurrentData() ?: JAFRSHO01020UiStateData()
// インスタンス変数.確認用パスワード表示切替が定数.マスク表示の場合
if (currentData.confirmPwDspSwitch == PasswordDisplayMode.MASK_DSP) {
updateSuccess { currentData ->
currentData.copy(
confirmPwDspSwitch = PasswordDisplayMode.PW_DSP,
confirmPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxConfirmPwDspInfo = VisualTransformation.None
)
}
// インスタンス変数.確認用パスワード表示切替が定数.パスワード表示の場合
} else if (currentData.confirmPwDspSwitch == PasswordDisplayMode.PW_DSP) {
updateSuccess { currentData ->
currentData.copy(
confirmPwDspSwitch = PasswordDisplayMode.MASK_DSP,
confirmPwDspSwitchIcon = R.drawable.dark_pwdsp_button.toString(),
txtboxConfirmPwDspInfo = PasswordVisualTransformation('※')
)
}
} else {
// 何もしない
}
}
/**
* 新パスワード入力更新
* @param newPassword 新パスワード
*/
private fun onNewPasswordUpdate(newPassword: String) {
val currentData = getCurrentData()
if (currentData != null) {
setSuccess(currentData.copy(txtboxNewPw = newPassword))
}
}
/**
* 確認用パスワード入力更新
* @param confirmPassword 確認用パスワード
*/
private fun onConfirmPasswordUpdate(confirmPassword: String) {
val currentData = getCurrentData()
if (currentData != null) {
setSuccess(currentData.copy(txtboxConfirmPw = confirmPassword))
}
}
}