Skip to content

Commit

Permalink
updating settings, UI cleanup
Browse files Browse the repository at this point in the history
  • Loading branch information
xtruan committed Mar 1, 2023
1 parent f889441 commit e924a45
Show file tree
Hide file tree
Showing 8 changed files with 118 additions and 29 deletions.
2 changes: 1 addition & 1 deletion application.fam
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ App(
name="Flip-BIP39",
apptype=FlipperAppType.PLUGIN,
entry_point="flipbip39_app",
cdefines=["APP_BOILERPLATE"],
cdefines=["APP_FLIPBIP39"],
requires=[
"gui",
],
Expand Down
3 changes: 0 additions & 3 deletions crypto/.gitmodules

This file was deleted.

1 change: 1 addition & 0 deletions flipbip39.c
Original file line number Diff line number Diff line change
Expand Up @@ -41,6 +41,7 @@ FlipBip39* flipbip39_app_alloc() {
app->haptic = 1;
app->speaker = 1;
app->led = 1;
app->bip39_strength = 256;

view_dispatcher_add_view(app->view_dispatcher, FlipBip39ViewIdMenu, submenu_get_view(app->submenu));
app->flipbip39_startscreen = flipbip39_startscreen_alloc();
Expand Down
6 changes: 6 additions & 0 deletions flipbip39.h
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,7 @@ typedef struct {
int haptic;
int speaker;
int led;
int bip39_strength;
} FlipBip39;

typedef enum {
Expand All @@ -52,3 +53,8 @@ typedef enum {
FlipBip39LedOff,
FlipBip39LedOn,
} FlipBip39LedState;

typedef enum {
FlipBip39Strength128 = 128,
FlipBip39Strength256 = 256,
} FlipBip39StrengthState;
4 changes: 2 additions & 2 deletions scenes/flipbip39_scene_menu.c
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ void flipbip39_scene_menu_submenu_callback(void* context, uint32_t index) {
void flipbip39_scene_menu_on_enter(void* context) {
FlipBip39* app = context;

submenu_add_item(app->submenu, "Scene 1", SubmenuIndexScene1, flipbip39_scene_menu_submenu_callback, app);
submenu_add_item(app->submenu, "Scene 2", SubmenuIndexScene2, flipbip39_scene_menu_submenu_callback, app);
submenu_add_item(app->submenu, "New BIP39 Mnemonic", SubmenuIndexScene1, flipbip39_scene_menu_submenu_callback, app);
//submenu_add_item(app->submenu, "Scene 2", SubmenuIndexScene2, flipbip39_scene_menu_submenu_callback, app);
submenu_add_item(app->submenu, "Settings", SubmenuIndexSettings, flipbip39_scene_menu_submenu_callback, app);

submenu_set_selected_item(app->submenu, scene_manager_get_scene_state(app->scene_manager, FlipBip39SceneMenu));
Expand Down
31 changes: 29 additions & 2 deletions scenes/flipbip39_scene_settings.c
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
#include <lib/toolbox/value_index.h>

enum SettingsIndex {
SettingsIndexHaptic = 10,
SettingsIndexBip39Strength = 10,
SettingsIndexHaptic,
SettingsIndexValue1,
SettingsIndexValue2,
};
Expand Down Expand Up @@ -34,10 +35,18 @@ const uint32_t led_value[2] = {
FlipBip39LedOn,
};

const char* const bip39_strength_text[2] = {
"24",
"12",
};
const uint32_t bip39_strength_value[2] = {
FlipBip39Strength256,
FlipBip39Strength128,
};

static void flipbip39_scene_settings_set_haptic(VariableItem* item) {
FlipBip39* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);

variable_item_set_current_value_text(item, haptic_text[index]);
app->haptic = haptic_value[index];
}
Expand All @@ -56,6 +65,13 @@ static void flipbip39_scene_settings_set_led(VariableItem* item) {
app->led = led_value[index];
}

static void flipbip39_scene_settings_set_bip39_strength(VariableItem* item) {
FlipBip39* app = variable_item_get_context(item);
uint8_t index = variable_item_get_current_value_index(item);
variable_item_set_current_value_text(item, bip39_strength_text[index]);
app->bip39_strength = bip39_strength_value[index];
}

void flipbip39_scene_settings_submenu_callback(void* context, uint32_t index) {
FlipBip39* app = context;
view_dispatcher_send_custom_event(app->view_dispatcher, index);
Expand All @@ -66,6 +82,17 @@ void flipbip39_scene_settings_on_enter(void* context) {
VariableItem* item;
uint8_t value_index;

// BIP39 strength
item = variable_item_list_add(
app->variable_item_list,
"BIP39 Words:",
2,
flipbip39_scene_settings_set_bip39_strength,
app);
value_index = value_index_uint32(app->bip39_strength, bip39_strength_value, 2);
variable_item_set_current_value_index(item, value_index);
variable_item_set_current_value_text(item, bip39_strength_text[value_index]);

// Vibro on/off
item = variable_item_list_add(
app->variable_item_list,
Expand Down
94 changes: 76 additions & 18 deletions views/flipbip39_scene_1.c
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@
#include <gui/elements.h>
#include <dolphin/dolphin.h>

#include <string.h>
#include "../crypto/bip32.h"
#include "../crypto/bip39.h"
#include "../crypto/ecdsa.h"
Expand All @@ -18,7 +19,12 @@ struct FlipBip39Scene1 {


typedef struct {
int some_value;
const char* mnemonic1;
const char* mnemonic2;
const char* mnemonic3;
const char* mnemonic4;
const char* mnemonic5;
const char* mnemonic6;
} FlipBip39Scene1Model;

void flipbip39_scene_1_set_callback(
Expand All @@ -32,18 +38,57 @@ void flipbip39_scene_1_set_callback(
}

void flipbip39_scene_1_draw(Canvas* canvas, FlipBip39Scene1Model* model) {
UNUSED(model);
//UNUSED(model);
canvas_clear(canvas);
canvas_set_color(canvas, ColorBlack);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 0, 10, AlignLeft, AlignTop, "This is Scene 1");
//canvas_set_font(canvas, FontPrimary);
//canvas_draw_str_aligned(canvas, 0, 10, AlignLeft, AlignTop, "This is Scene 1");

canvas_set_font(canvas, FontSecondary);
canvas_draw_str_aligned(canvas, 0, 22, AlignLeft, AlignTop, mnemonic_generate(128));
//canvas_draw_str_aligned(canvas, 0, 32, AlignLeft, AlignTop, "used as flipbip39");
canvas_draw_str_aligned(canvas, 1, 2, AlignLeft, AlignTop, model->mnemonic1);
canvas_draw_str_aligned(canvas, 1, 12, AlignLeft, AlignTop, model->mnemonic2);
canvas_draw_str_aligned(canvas, 1, 22, AlignLeft, AlignTop, model->mnemonic3);
canvas_draw_str_aligned(canvas, 1, 32, AlignLeft, AlignTop, model->mnemonic4);
canvas_draw_str_aligned(canvas, 1, 42, AlignLeft, AlignTop, model->mnemonic5);
canvas_draw_str_aligned(canvas, 1, 52, AlignLeft, AlignTop, model->mnemonic6);

}

static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model) {
model->some_value = 1;
static void flipbip39_scene_1_model_init(FlipBip39Scene1Model* const model, const int strength) {
// Generate a random mnemonic using trezor-crypto
const char* mnemonic = mnemonic_generate(strength);

// Delineate 6 sections of the mnemonic
char *str = malloc(strlen(mnemonic) + 1);
strcpy(str, mnemonic);
int word = 0;
for (size_t i = 0; i < strlen(str); i++) {
if (str[i] == ' ') {
word++;
if (word % 4 == 0) {
str[i] = ',';
}
}
}

// Split the mnemonic into 6 parts
char *ptr = strtok (str, ",");
int partnum = 0;
while(ptr != NULL)
{
char *part = malloc(strlen(ptr) + 1);
strcpy(part, ptr);
partnum++;

if (partnum == 1) model->mnemonic1 = part;
if (partnum == 2) model->mnemonic2 = part;
if (partnum == 3) model->mnemonic3 = part;
if (partnum == 4) model->mnemonic4 = part;
if (partnum == 5) model->mnemonic5 = part;
if (partnum == 6) model->mnemonic6 = part;

ptr = strtok(NULL, ",");
}
}

bool flipbip39_scene_1_input(InputEvent* event, void* context) {
Expand Down Expand Up @@ -88,11 +133,15 @@ void flipbip39_scene_1_exit(void* context) {
void flipbip39_scene_1_enter(void* context) {
furi_assert(context);
FlipBip39Scene1* instance = (FlipBip39Scene1*)context;

FlipBip39* app = instance->context;
int strength = app->bip39_strength;

with_view_model(
instance->view,
FlipBip39Scene1Model * model,
{
flipbip39_scene_1_model_init(model);
flipbip39_scene_1_model_init(model, strength);
},
true
);
Expand All @@ -108,14 +157,17 @@ FlipBip39Scene1* flipbip39_scene_1_alloc() {
view_set_enter_callback(instance->view, flipbip39_scene_1_enter);
view_set_exit_callback(instance->view, flipbip39_scene_1_exit);

with_view_model(
instance->view,
FlipBip39Scene1Model * model,
{
flipbip39_scene_1_model_init(model);
},
true
);
// FlipBip39* app = instance->view->context;
// int strength = app->bip39_strength;

// with_view_model(
// instance->view,
// FlipBip39Scene1Model * model,
// {
// flipbip39_scene_1_model_init(model, strength);
// },
// true
// );

return instance;
}
Expand All @@ -127,7 +179,13 @@ void flipbip39_scene_1_free(FlipBip39Scene1* instance) {
instance->view,
FlipBip39Scene1Model * model,
{
UNUSED(model);
//UNUSED(model);
free((void*)model->mnemonic1);
free((void*)model->mnemonic2);
free((void*)model->mnemonic3);
free((void*)model->mnemonic4);
free((void*)model->mnemonic5);
free((void*)model->mnemonic6);
},
true);
view_free(instance->view);
Expand Down
6 changes: 3 additions & 3 deletions views/flipbip39_startscreen.c
Original file line number Diff line number Diff line change
Expand Up @@ -30,10 +30,10 @@ void flipbip39_startscreen_draw(Canvas* canvas, FlipBip39StartscreenModel* model
canvas_clear(canvas);
canvas_set_color(canvas, ColorBlack);
canvas_set_font(canvas, FontPrimary);
canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Start Screen");
canvas_draw_str_aligned(canvas, 64, 10, AlignCenter, AlignTop, "Flip-BIP39");
canvas_set_font(canvas, FontSecondary);
canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Explain your app");
canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "on this screen");
canvas_draw_str_aligned(canvas, 64, 22, AlignCenter, AlignTop, "Crypto tools");
canvas_draw_str_aligned(canvas, 64, 32, AlignCenter, AlignTop, "for Flipper");
elements_button_center(canvas, "Start");
}

Expand Down

0 comments on commit e924a45

Please sign in to comment.