flipbip_scene_settings.c 3.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. #include "../flipbip.h"
  2. #include <lib/toolbox/value_index.h>
  3. // From: lib/crypto
  4. #include <memzero.h>
  5. #define TEXT_LABEL_ON "ON"
  6. #define TEXT_LABEL_OFF "OFF"
  7. const char* const bip39_strength_text[3] = {
  8. "12",
  9. "18",
  10. "24",
  11. };
  12. const uint32_t bip39_strength_value[3] = {
  13. FlipBipStrength128,
  14. FlipBipStrength192,
  15. FlipBipStrength256,
  16. };
  17. const char* const passphrase_text[2] = {
  18. TEXT_LABEL_OFF,
  19. TEXT_LABEL_ON,
  20. };
  21. const uint32_t passphrase_value[2] = {
  22. FlipBipPassphraseOff,
  23. FlipBipPassphraseOn,
  24. };
  25. static void flipbip_scene_settings_set_bip39_strength(VariableItem* item) {
  26. FlipBip* app = variable_item_get_context(item);
  27. uint8_t index = variable_item_get_current_value_index(item);
  28. variable_item_set_current_value_text(item, bip39_strength_text[index]);
  29. app->bip39_strength = bip39_strength_value[index];
  30. }
  31. static void flipbip_scene_settings_set_passphrase(VariableItem* item) {
  32. FlipBip* app = variable_item_get_context(item);
  33. uint8_t index = variable_item_get_current_value_index(item);
  34. variable_item_set_current_value_text(item, passphrase_text[index]);
  35. app->passphrase = passphrase_value[index];
  36. if(app->passphrase == FlipBipPassphraseOn) {
  37. app->input_state = FlipBipTextInputPassphrase;
  38. text_input_set_header_text(app->text_input, "Enter BIP39 passphrase");
  39. view_dispatcher_switch_to_view(app->view_dispatcher, FlipBipViewIdTextInput);
  40. } else {
  41. memzero(app->passphrase_text, TEXT_BUFFER_SIZE);
  42. }
  43. }
  44. void flipbip_scene_settings_submenu_callback(void* context, uint32_t index) {
  45. FlipBip* app = context;
  46. view_dispatcher_send_custom_event(app->view_dispatcher, index);
  47. }
  48. void flipbip_scene_settings_on_enter(void* context) {
  49. FlipBip* app = context;
  50. VariableItem* item;
  51. uint8_t value_index;
  52. // BIP39 strength
  53. item = variable_item_list_add(
  54. app->variable_item_list, "BIP39 Words:", 3, flipbip_scene_settings_set_bip39_strength, app);
  55. value_index = value_index_uint32(app->bip39_strength, bip39_strength_value, 3);
  56. variable_item_set_current_value_index(item, value_index);
  57. variable_item_set_current_value_text(item, bip39_strength_text[value_index]);
  58. // Passphrase
  59. item = variable_item_list_add(
  60. app->variable_item_list,
  61. "BIP39 Passphrase:",
  62. 2,
  63. flipbip_scene_settings_set_passphrase,
  64. app);
  65. value_index = value_index_uint32(app->passphrase, passphrase_value, 2);
  66. variable_item_set_current_value_index(item, value_index);
  67. variable_item_set_current_value_text(item, passphrase_text[value_index]);
  68. view_dispatcher_switch_to_view(app->view_dispatcher, FlipBipViewIdSettings);
  69. }
  70. bool flipbip_scene_settings_on_event(void* context, SceneManagerEvent event) {
  71. FlipBip* app = context;
  72. UNUSED(app);
  73. bool consumed = false;
  74. if(event.type == SceneManagerEventTypeCustom) {
  75. }
  76. return consumed;
  77. }
  78. void flipbip_scene_settings_on_exit(void* context) {
  79. FlipBip* app = context;
  80. variable_item_list_set_selected_item(app->variable_item_list, 0);
  81. variable_item_list_reset(app->variable_item_list);
  82. }