diff --git a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c index 59ac287fc..0fc1e1e9c 100644 --- a/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c +++ b/applications/main/xtreme_app/scenes/xtreme_app_scene_interface_lockscreen.c @@ -10,6 +10,14 @@ void xtreme_app_scene_interface_lockscreen_var_item_list_callback(void* context, view_dispatcher_send_custom_event(app->view_dispatcher, index); } +static void xtreme_app_scene_interface_lockscreen_bad_pins_format_changed(VariableItem* item) { + XtremeApp* app = variable_item_get_context(item); + bool value = variable_item_get_current_value_index(item); + variable_item_set_current_value_text(item, value ? "ON" : "OFF"); + XTREME_SETTINGS()->bad_pins_format = value; + app->save_settings = true; +} + static void xtreme_app_scene_interface_lockscreen_show_time_changed(VariableItem* item) { XtremeApp* app = variable_item_get_context(item); bool value = variable_item_get_current_value_index(item); @@ -56,6 +64,15 @@ void xtreme_app_scene_interface_lockscreen_on_enter(void* context) { VariableItemList* var_item_list = app->var_item_list; VariableItem* item; + item = variable_item_list_add( + var_item_list, + "Format on 10 bad PINs", + 2, + xtreme_app_scene_interface_lockscreen_bad_pins_format_changed, + app); + variable_item_set_current_value_index(item, xtreme_settings->bad_pins_format); + variable_item_set_current_value_text(item, xtreme_settings->bad_pins_format ? "ON" : "OFF"); + item = variable_item_list_add( var_item_list, "Show Time", diff --git a/applications/services/desktop/helpers/pin_lock.c b/applications/services/desktop/helpers/pin_lock.c index decd98320..73e688bf5 100644 --- a/applications/services/desktop/helpers/pin_lock.c +++ b/applications/services/desktop/helpers/pin_lock.c @@ -10,6 +10,7 @@ #include "../desktop_i.h" #include #include +#include static const NotificationSequence sequence_pin_fail = { &message_display_backlight_on, @@ -98,6 +99,16 @@ bool desktop_pin_lock_verify(const PinCode* pin_set, const PinCode* pin_entered) result = true; } else { uint32_t pin_fails = furi_hal_rtc_get_pin_fails(); + if(pin_fails >= 9 && XTREME_SETTINGS()->bad_pins_format) { + furi_hal_rtc_set_pin_fails(0); + furi_hal_rtc_set_flag(FuriHalRtcFlagFactoryReset); + Storage* storage = furi_record_open(RECORD_STORAGE); + storage_simply_remove(storage, INT_PATH(".cnt.u2f")); + storage_simply_remove(storage, INT_PATH(".key.u2f")); + storage_sd_format(storage); + furi_record_close(RECORD_STORAGE); + power_reboot(PowerBootModeNormal); + } furi_hal_rtc_set_pin_fails(pin_fails + 1); result = false; } diff --git a/applications/services/xtreme/settings.c b/applications/services/xtreme/settings.c index fa4ba1813..c135ddc43 100644 --- a/applications/services/xtreme/settings.c +++ b/applications/services/xtreme/settings.c @@ -25,6 +25,7 @@ void XTREME_SETTINGS_LOAD() { xtreme_settings->unlock_anims = false; // OFF xtreme_settings->fallback_anim = true; // ON xtreme_settings->wii_menu = true; // ON + xtreme_settings->bad_pins_format = false; // OFF xtreme_settings->lockscreen_time = true; // ON xtreme_settings->lockscreen_seconds = false; // OFF xtreme_settings->lockscreen_date = true; // ON @@ -65,6 +66,8 @@ void XTREME_SETTINGS_LOAD() { flipper_format_rewind(file); flipper_format_read_bool(file, "wii_menu", &xtreme_settings->wii_menu, 1); flipper_format_rewind(file); + flipper_format_read_bool(file, "bad_pins_format", &xtreme_settings->bad_pins_format, 1); + flipper_format_rewind(file); flipper_format_read_bool(file, "lockscreen_time", &xtreme_settings->lockscreen_time, 1); flipper_format_rewind(file); flipper_format_read_bool(file, "lockscreen_seconds", &xtreme_settings->lockscreen_seconds, 1); @@ -118,6 +121,7 @@ void XTREME_SETTINGS_SAVE() { flipper_format_write_bool(file, "unlock_anims", &xtreme_settings->unlock_anims, 1); flipper_format_write_bool(file, "fallback_anim", &xtreme_settings->fallback_anim, 1); flipper_format_write_bool(file, "wii_menu", &xtreme_settings->wii_menu, 1); + flipper_format_write_bool(file, "bad_pins_format", &xtreme_settings->bad_pins_format, 1); flipper_format_write_bool(file, "lockscreen_time", &xtreme_settings->lockscreen_time, 1); flipper_format_write_bool(file, "lockscreen_seconds", &xtreme_settings->lockscreen_seconds, 1); flipper_format_write_bool(file, "lockscreen_date", &xtreme_settings->lockscreen_date, 1); diff --git a/applications/services/xtreme/settings.h b/applications/services/xtreme/settings.h index a5f0b4688..87fb44f75 100644 --- a/applications/services/xtreme/settings.h +++ b/applications/services/xtreme/settings.h @@ -23,6 +23,7 @@ typedef struct { bool unlock_anims; bool fallback_anim; bool wii_menu; + bool bad_pins_format; bool lockscreen_time; bool lockscreen_seconds; bool lockscreen_date;