@@ -389,7 +389,7 @@ static void useCaseHomeExt(const char *appName,
389
389
nbgl_callback_t quitCallback );
390
390
static void displayDetails (const char * tag , const char * value , bool wrapping );
391
391
392
- static void reset_callbacks (void )
392
+ static void reset_callbacks_and_context (void )
393
393
{
394
394
onQuit = NULL ;
395
395
onContinue = NULL ;
@@ -398,10 +398,10 @@ static void reset_callbacks(void)
398
398
onControls = NULL ;
399
399
onContentAction = NULL ;
400
400
onChoice = NULL ;
401
- onModalConfirm = NULL ;
402
401
#ifdef NBGL_KEYPAD
403
402
onValidatePin = NULL ;
404
403
#endif
404
+ memset (& genericContext , 0 , sizeof (genericContext ));
405
405
}
406
406
407
407
// Helper to set genericContext page info
@@ -648,6 +648,7 @@ static void pageModalCallback(int token, uint8_t index)
648
648
if (index == 0 ) {
649
649
if (onModalConfirm != NULL ) {
650
650
onModalConfirm ();
651
+ onModalConfirm = NULL ;
651
652
}
652
653
}
653
654
else {
@@ -1810,7 +1811,7 @@ static void keypadGenericUseCase(const char *title,
1810
1811
return ;
1811
1812
}
1812
1813
1813
- reset_callbacks ();
1814
+ reset_callbacks_and_context ();
1814
1815
// reset the keypad context
1815
1816
memset (& keypadContext , 0 , sizeof (KeypadContext_t ));
1816
1817
@@ -2650,8 +2651,7 @@ static void useCaseReview(nbgl_operationType_t operationType,
2650
2651
bool isLight ,
2651
2652
bool playNotifSound )
2652
2653
{
2653
- reset_callbacks ();
2654
- memset (& genericContext , 0 , sizeof (genericContext ));
2654
+ reset_callbacks_and_context ();
2655
2655
2656
2656
bundleNavContext .review .operationType = operationType ;
2657
2657
bundleNavContext .review .choiceCallback = choiceCallback ;
@@ -2715,8 +2715,7 @@ static void useCaseReviewStreamingStart(nbgl_operationType_t operationType
2715
2715
nbgl_choiceCallback_t choiceCallback ,
2716
2716
bool playNotifSound )
2717
2717
{
2718
- reset_callbacks ();
2719
- memset (& genericContext , 0 , sizeof (genericContext ));
2718
+ reset_callbacks_and_context ();
2720
2719
2721
2720
bundleNavContext .reviewStreaming .operationType = operationType ;
2722
2721
bundleNavContext .reviewStreaming .choiceCallback = choiceCallback ;
@@ -2780,8 +2779,6 @@ static void useCaseHomeExt(const char *appName,
2780
2779
nbgl_callback_t topRightCallback ,
2781
2780
nbgl_callback_t quitCallback )
2782
2781
{
2783
- reset_callbacks ();
2784
-
2785
2782
nbgl_pageInfoDescription_t info = {.centeredInfo .icon = appIcon ,
2786
2783
.centeredInfo .text1 = appName ,
2787
2784
.centeredInfo .text3 = NULL ,
@@ -2793,6 +2790,8 @@ static void useCaseHomeExt(const char *appName,
2793
2790
.topRightStyle = withSettings ? SETTINGS_ICON : INFO_ICON ,
2794
2791
.topRightToken = CONTINUE_TOKEN ,
2795
2792
.tuneId = TUNE_TAP_CASUAL };
2793
+ reset_callbacks_and_context ();
2794
+
2796
2795
if ((homeAction -> text != NULL ) || (homeAction -> icon != NULL )) {
2797
2796
// trick to use ACTION_BUTTON_TOKEN for action and quit, with index used to distinguish
2798
2797
info .bottomButtonsToken = ACTION_BUTTON_TOKEN ;
@@ -3212,7 +3211,7 @@ void nbgl_useCaseNavigableContent(const char *title,
3212
3211
nbgl_navCallback_t navCallback ,
3213
3212
nbgl_layoutTouchCallback_t controlsCallback )
3214
3213
{
3215
- reset_callbacks ();
3214
+ reset_callbacks_and_context ();
3216
3215
3217
3216
// memorize context
3218
3217
onQuit = quitCallback ;
@@ -3263,8 +3262,7 @@ void nbgl_useCaseGenericSettings(const char *appName,
3263
3262
const nbgl_contentInfoList_t * infosList ,
3264
3263
nbgl_callback_t quitCallback )
3265
3264
{
3266
- reset_callbacks ();
3267
- memset (& genericContext , 0 , sizeof (genericContext ));
3265
+ reset_callbacks_and_context ();
3268
3266
3269
3267
// memorize context
3270
3268
onQuit = quitCallback ;
@@ -3340,6 +3338,8 @@ void nbgl_useCaseHomeAndSettings(
3340
3338
{
3341
3339
nbgl_homeAndSettingsContext_t * context = & bundleNavContext .homeAndSettings ;
3342
3340
3341
+ reset_callbacks_and_context ();
3342
+
3343
3343
context -> appName = appName ;
3344
3344
context -> appIcon = appIcon ;
3345
3345
context -> tagline = tagline ;
@@ -3370,12 +3370,12 @@ void nbgl_useCaseHomeAndSettings(
3370
3370
*/
3371
3371
void nbgl_useCaseStatus (const char * message , bool isSuccess , nbgl_callback_t quitCallback )
3372
3372
{
3373
- reset_callbacks ();
3374
-
3375
3373
nbgl_screenTickerConfiguration_t ticker = {.tickerCallback = & tickerCallback ,
3376
3374
.tickerIntervale = 0 , // not periodic
3377
3375
.tickerValue = STATUS_SCREEN_DURATION };
3378
3376
3377
+ reset_callbacks_and_context ();
3378
+
3379
3379
onQuit = quitCallback ;
3380
3380
if (isSuccess ) {
3381
3381
#ifdef HAVE_PIEZO_SOUND
@@ -3474,23 +3474,22 @@ void nbgl_useCaseChoice(const nbgl_icon_details_t *icon,
3474
3474
const char * cancelText ,
3475
3475
nbgl_choiceCallback_t callback )
3476
3476
{
3477
- reset_callbacks ();
3478
-
3479
- nbgl_pageConfirmationDescription_t info = {.cancelText = cancelText ,
3480
- .centeredInfo .text1 = message ,
3481
- .centeredInfo .text2 = subMessage ,
3482
- .centeredInfo .text3 = NULL ,
3483
- .centeredInfo .style = LARGE_CASE_INFO ,
3484
- .centeredInfo .icon = icon ,
3485
- .centeredInfo .offsetY = 0 ,
3486
- .confirmationText = confirmText ,
3487
- .confirmationToken = CHOICE_TOKEN ,
3488
- .tuneId = TUNE_TAP_CASUAL ,
3489
- .modal = false};
3477
+ nbgl_pageConfirmationDescription_t info = {0 };
3490
3478
// check params
3491
3479
if ((confirmText == NULL ) || (cancelText == NULL )) {
3492
3480
return ;
3493
3481
}
3482
+ reset_callbacks_and_context ();
3483
+
3484
+ info .cancelText = cancelText ;
3485
+ info .centeredInfo .text1 = message ;
3486
+ info .centeredInfo .text2 = subMessage ;
3487
+ info .centeredInfo .style = LARGE_CASE_INFO ;
3488
+ info .centeredInfo .icon = icon ;
3489
+ info .confirmationText = confirmText ;
3490
+ info .confirmationToken = CHOICE_TOKEN ;
3491
+ info .tuneId = TUNE_TAP_CASUAL ;
3492
+
3494
3493
onChoice = callback ;
3495
3494
pageContext = nbgl_pageDrawConfirmation (& pageCallback , & info );
3496
3495
nbgl_refreshSpecial (FULL_COLOR_PARTIAL_REFRESH );
@@ -3553,6 +3552,7 @@ void nbgl_useCaseAction(const nbgl_icon_details_t *icon,
3553
3552
{
3554
3553
nbgl_pageContent_t content = {0 };
3555
3554
3555
+ reset_callbacks_and_context ();
3556
3556
// memorize callback
3557
3557
onAction = callback ;
3558
3558
@@ -3585,8 +3585,6 @@ void nbgl_useCaseReviewStart(const nbgl_icon_details_t *icon,
3585
3585
nbgl_callback_t continueCallback ,
3586
3586
nbgl_callback_t rejectCallback )
3587
3587
{
3588
- reset_callbacks ();
3589
-
3590
3588
nbgl_pageInfoDescription_t info = {.footerText = rejectText ,
3591
3589
.footerToken = QUIT_TOKEN ,
3592
3590
.tapActionText = NULL ,
@@ -3595,14 +3593,17 @@ void nbgl_useCaseReviewStart(const nbgl_icon_details_t *icon,
3595
3593
.topRightStyle = NO_BUTTON_STYLE ,
3596
3594
.actionButtonText = NULL ,
3597
3595
.tuneId = TUNE_TAP_CASUAL };
3598
- info .centeredInfo .icon = icon ;
3599
- info .centeredInfo .text1 = reviewTitle ;
3600
- info .centeredInfo .text2 = reviewSubTitle ;
3601
- info .centeredInfo .text3 = "Swipe to review" ;
3602
- info .centeredInfo .style = LARGE_CASE_GRAY_INFO ;
3603
- info .centeredInfo .offsetY = 0 ;
3604
- onQuit = rejectCallback ;
3605
- onContinue = continueCallback ;
3596
+
3597
+ reset_callbacks_and_context ();
3598
+
3599
+ info .centeredInfo .icon = icon ;
3600
+ info .centeredInfo .text1 = reviewTitle ;
3601
+ info .centeredInfo .text2 = reviewSubTitle ;
3602
+ info .centeredInfo .text3 = "Swipe to review" ;
3603
+ info .centeredInfo .style = LARGE_CASE_GRAY_INFO ;
3604
+ info .centeredInfo .offsetY = 0 ;
3605
+ onQuit = rejectCallback ;
3606
+ onContinue = continueCallback ;
3606
3607
3607
3608
#ifdef HAVE_PIEZO_SOUND
3608
3609
// Play notification sound
@@ -3624,7 +3625,7 @@ void nbgl_useCaseRegularReview(uint8_t initPage,
3624
3625
nbgl_navCallback_t navCallback ,
3625
3626
nbgl_choiceCallback_t choiceCallback )
3626
3627
{
3627
- reset_callbacks ();
3628
+ reset_callbacks_and_context ();
3628
3629
3629
3630
// memorize context
3630
3631
onChoice = choiceCallback ;
@@ -3659,8 +3660,7 @@ void nbgl_useCaseStaticReview(const nbgl_contentTagValueList_t *tagValueList,
3659
3660
{
3660
3661
uint8_t offset = 0 ;
3661
3662
3662
- reset_callbacks ();
3663
- memset (& genericContext , 0 , sizeof (genericContext ));
3663
+ reset_callbacks_and_context ();
3664
3664
3665
3665
// memorize context
3666
3666
onChoice = callback ;
@@ -3716,8 +3716,7 @@ void nbgl_useCaseStaticReviewLight(const nbgl_contentTagValueList_t *tagValueLis
3716
3716
{
3717
3717
uint8_t offset = 0 ;
3718
3718
3719
- reset_callbacks ();
3720
- memset (& genericContext , 0 , sizeof (genericContext ));
3719
+ reset_callbacks_and_context ();
3721
3720
3722
3721
// memorize context
3723
3722
onChoice = callback ;
@@ -3860,7 +3859,9 @@ void nbgl_useCaseAdvancedReview(nbgl_operationType_t operationType,
3860
3859
const nbgl_warning_t * warning ,
3861
3860
nbgl_choiceCallback_t choiceCallback )
3862
3861
{
3862
+ reset_callbacks_and_context ();
3863
3863
memset (& reviewWithWarnCtx , 0 , sizeof (reviewWithWarnCtx ));
3864
+
3864
3865
// memorize tipBox because it can be in the call stack of the caller
3865
3866
if (tipBox != NULL ) {
3866
3867
memcpy (& activeTipBox , tipBox , sizeof (activeTipBox ));
@@ -3970,8 +3971,7 @@ void nbgl_useCaseGenericReview(const nbgl_genericContents_t *contents,
3970
3971
const char * rejectText ,
3971
3972
nbgl_callback_t rejectCallback )
3972
3973
{
3973
- reset_callbacks ();
3974
- memset (& genericContext , 0 , sizeof (genericContext ));
3974
+ reset_callbacks_and_context ();
3975
3975
3976
3976
// memorize context
3977
3977
onQuit = rejectCallback ;
@@ -4217,8 +4217,7 @@ void nbgl_useCaseAddressConfirmationExt(const char *addres
4217
4217
nbgl_choiceCallback_t callback ,
4218
4218
const nbgl_contentTagValueList_t * tagValueList )
4219
4219
{
4220
- reset_callbacks ();
4221
- memset (& genericContext , 0 , sizeof (genericContext ));
4220
+ reset_callbacks_and_context ();
4222
4221
memset (& addressConfirmationContext , 0 , sizeof (addressConfirmationContext ));
4223
4222
4224
4223
// save context
@@ -4268,8 +4267,8 @@ void nbgl_useCaseAddressReview(const char *address,
4268
4267
const char * reviewSubTitle ,
4269
4268
nbgl_choiceCallback_t choiceCallback )
4270
4269
{
4271
- reset_callbacks ();
4272
- memset ( & genericContext , 0 , sizeof ( genericContext ));
4270
+ reset_callbacks_and_context ();
4271
+
4273
4272
// release a potential modal
4274
4273
if (addressConfirmationContext .modalLayout ) {
4275
4274
nbgl_layoutRelease (addressConfirmationContext .modalLayout );
0 commit comments