mirror of
https://github.com/Next-Flip/Momentum-Firmware.git
synced 2026-05-14 14:48:35 -07:00
removed namechanger & namechangersrv
these programs were causing boot loops on certain users & don't currently work. i will be working on fixing these programs, however they will not be included again until fully fixed.
This commit is contained in:
@@ -1,13 +0,0 @@
|
|||||||
App(
|
|
||||||
appid="NameChanger",
|
|
||||||
name="Name Changer",
|
|
||||||
apptype=FlipperAppType.EXTERNAL,
|
|
||||||
entry_point="namechanger_app",
|
|
||||||
cdefines=["APP_NAMECHANGER"],
|
|
||||||
requires=["gui","storage"],
|
|
||||||
stack_size=2 * 1024,
|
|
||||||
order=90,
|
|
||||||
fap_icon="namechanger_10px.png",
|
|
||||||
fap_category="Tools",
|
|
||||||
fap_icon_assets="icons",
|
|
||||||
)
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 3.8 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 2.4 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 4.5 KiB |
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,275 +0,0 @@
|
|||||||
#include "namechanger.h"
|
|
||||||
#include "scenes/namechanger_scene.h"
|
|
||||||
|
|
||||||
#include <toolbox/path.h>
|
|
||||||
#include <flipper_format/flipper_format.h>
|
|
||||||
|
|
||||||
bool namechanger_custom_event_callback(void* context, uint32_t event) {
|
|
||||||
furi_assert(context);
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
return scene_manager_handle_custom_event(namechanger->scene_manager, event);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_back_event_callback(void* context) {
|
|
||||||
furi_assert(context);
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
return scene_manager_handle_back_event(namechanger->scene_manager);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_make_app_folder(NameChanger* namechanger) {
|
|
||||||
bool created = false;
|
|
||||||
FURI_LOG_I(TAG, "folder1");
|
|
||||||
|
|
||||||
FuriString* folderpath = furi_string_alloc();
|
|
||||||
furi_string_set(folderpath, "/ext/dolphin");
|
|
||||||
FURI_LOG_I(TAG, "folder2");
|
|
||||||
|
|
||||||
//Make dir if doesn't exist
|
|
||||||
if(!storage_simply_mkdir(namechanger->storage, furi_string_get_cstr(folderpath))) {
|
|
||||||
FURI_LOG_I(TAG, "folder3");
|
|
||||||
furi_string_set_str(namechanger->error, "Cannot create\napp folder.");
|
|
||||||
} else {
|
|
||||||
FURI_LOG_I(TAG, "folder4");
|
|
||||||
created = true;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "folder5");
|
|
||||||
furi_string_free(folderpath);
|
|
||||||
FURI_LOG_I(TAG, "folder6");
|
|
||||||
return created;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_name_read_write(NameChanger* namechanger, char* name, uint8_t mode) {
|
|
||||||
FuriString* file_path = furi_string_alloc();
|
|
||||||
furi_string_set(file_path, "/ext/dolphin/name.txt");
|
|
||||||
FURI_LOG_I(TAG, "name1");
|
|
||||||
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
if(mode == 2) {
|
|
||||||
FURI_LOG_I(TAG, "name2");
|
|
||||||
UNUSED(name);
|
|
||||||
FlipperFormat* file = flipper_format_file_alloc(namechanger->storage);
|
|
||||||
//read
|
|
||||||
FuriString* data = furi_string_alloc();
|
|
||||||
FURI_LOG_I(TAG, "name3");
|
|
||||||
|
|
||||||
do {
|
|
||||||
FURI_LOG_I(TAG, "name4");
|
|
||||||
if(!flipper_format_file_open_existing(file, furi_string_get_cstr(file_path))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name4a");
|
|
||||||
|
|
||||||
// header
|
|
||||||
uint32_t version;
|
|
||||||
|
|
||||||
if(!flipper_format_read_header(file, data, &version)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name4b");
|
|
||||||
|
|
||||||
if(furi_string_cmp_str(data, NAMECHANGER_HEADER) != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name4c");
|
|
||||||
|
|
||||||
if(version != 1) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name4d");
|
|
||||||
|
|
||||||
// get Name
|
|
||||||
if(!flipper_format_read_string(file, "Name", data)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name4e");
|
|
||||||
|
|
||||||
result = true;
|
|
||||||
FURI_LOG_I(TAG, "name5");
|
|
||||||
} while(false);
|
|
||||||
|
|
||||||
flipper_format_free(file);
|
|
||||||
FURI_LOG_I(TAG, "name6");
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
FURI_LOG_I(TAG, "name7");
|
|
||||||
FURI_LOG_E(TAG, "Cannot load data from file.");
|
|
||||||
namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr());
|
|
||||||
} else {
|
|
||||||
FURI_LOG_I(TAG, "name8");
|
|
||||||
furi_string_trim(data);
|
|
||||||
|
|
||||||
if(!furi_string_size(data)) {
|
|
||||||
FURI_LOG_I(TAG, "name9");
|
|
||||||
namechanger_text_store_set(namechanger, "%s", furi_hal_version_get_name_ptr());
|
|
||||||
} else {
|
|
||||||
FURI_LOG_I(TAG, "name10");
|
|
||||||
char newname[8];
|
|
||||||
snprintf(newname, 8, "%s", furi_string_get_cstr(data));
|
|
||||||
namechanger_text_store_set(namechanger, "%s", newname);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name11");
|
|
||||||
|
|
||||||
furi_string_free(data);
|
|
||||||
} else if(mode == 3) {
|
|
||||||
FURI_LOG_I(TAG, "name12");
|
|
||||||
//save
|
|
||||||
FlipperFormat* file = flipper_format_file_alloc(namechanger->storage);
|
|
||||||
|
|
||||||
do {
|
|
||||||
FURI_LOG_I(TAG, "name13");
|
|
||||||
// Open file for write
|
|
||||||
if(!flipper_format_file_open_always(file, furi_string_get_cstr(file_path))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write header
|
|
||||||
if(!flipper_format_write_header_cstr(file, NAMECHANGER_HEADER, 1)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write comments
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file, "Changing the value below will change your FlipperZero device name.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file,
|
|
||||||
"Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file, "It cannot contain any other characters.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//If name is eraseerase (set by Revert) - then don't write any name
|
|
||||||
//otherwise, write name as set in the variable
|
|
||||||
if(strcmp(name, "eraseerase") == 0) {
|
|
||||||
if(!flipper_format_write_string_cstr(file, "Name", "")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
if(!flipper_format_write_string_cstr(file, "Name", name)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
FURI_LOG_I(TAG, "name14");
|
|
||||||
result = true;
|
|
||||||
} while(false);
|
|
||||||
|
|
||||||
flipper_format_free(file);
|
|
||||||
FURI_LOG_I(TAG, "name15");
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
FURI_LOG_I(TAG, "name16");
|
|
||||||
FURI_LOG_E(TAG, "Cannot save name file.");
|
|
||||||
furi_string_set_str(namechanger->error, "Cannot save\nname file.");
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
FURI_LOG_I(TAG, "name17");
|
|
||||||
FURI_LOG_E(TAG, "Something broke.");
|
|
||||||
furi_string_set_str(namechanger->error, "Something broke.");
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "name18");
|
|
||||||
|
|
||||||
return result;
|
|
||||||
}
|
|
||||||
|
|
||||||
NameChanger* namechanger_alloc() {
|
|
||||||
NameChanger* namechanger = malloc(sizeof(namechanger));
|
|
||||||
|
|
||||||
namechanger->scene_manager = scene_manager_alloc(&namechanger_scene_handlers, namechanger);
|
|
||||||
|
|
||||||
namechanger->view_dispatcher = view_dispatcher_alloc();
|
|
||||||
view_dispatcher_enable_queue(namechanger->view_dispatcher);
|
|
||||||
view_dispatcher_set_event_callback_context(namechanger->view_dispatcher, namechanger);
|
|
||||||
view_dispatcher_set_custom_event_callback(
|
|
||||||
namechanger->view_dispatcher, namechanger_custom_event_callback);
|
|
||||||
view_dispatcher_set_navigation_event_callback(
|
|
||||||
namechanger->view_dispatcher, namechanger_back_event_callback);
|
|
||||||
|
|
||||||
namechanger->gui = furi_record_open(RECORD_GUI);
|
|
||||||
namechanger->storage = furi_record_open(RECORD_STORAGE);
|
|
||||||
|
|
||||||
namechanger->submenu = submenu_alloc();
|
|
||||||
view_dispatcher_add_view(
|
|
||||||
namechanger->view_dispatcher,
|
|
||||||
NameChangerViewSubmenu,
|
|
||||||
submenu_get_view(namechanger->submenu));
|
|
||||||
|
|
||||||
namechanger->text_input = text_input_alloc();
|
|
||||||
view_dispatcher_add_view(
|
|
||||||
namechanger->view_dispatcher,
|
|
||||||
NameChangerViewTextInput,
|
|
||||||
text_input_get_view(namechanger->text_input));
|
|
||||||
|
|
||||||
namechanger->popup = popup_alloc();
|
|
||||||
view_dispatcher_add_view(
|
|
||||||
namechanger->view_dispatcher, NameChangerViewPopup, popup_get_view(namechanger->popup));
|
|
||||||
|
|
||||||
namechanger->widget = widget_alloc();
|
|
||||||
view_dispatcher_add_view(
|
|
||||||
namechanger->view_dispatcher, NameChangerViewWidget, widget_get_view(namechanger->widget));
|
|
||||||
|
|
||||||
return namechanger;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_free(NameChanger* namechanger) {
|
|
||||||
furi_assert(namechanger);
|
|
||||||
|
|
||||||
view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewWidget);
|
|
||||||
widget_free(namechanger->widget);
|
|
||||||
view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewPopup);
|
|
||||||
popup_free(namechanger->popup);
|
|
||||||
|
|
||||||
view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewTextInput);
|
|
||||||
text_input_free(namechanger->text_input);
|
|
||||||
|
|
||||||
view_dispatcher_remove_view(namechanger->view_dispatcher, NameChangerViewSubmenu);
|
|
||||||
submenu_free(namechanger->submenu);
|
|
||||||
|
|
||||||
view_dispatcher_free(namechanger->view_dispatcher);
|
|
||||||
scene_manager_free(namechanger->scene_manager);
|
|
||||||
|
|
||||||
furi_string_free(namechanger->error);
|
|
||||||
|
|
||||||
furi_record_close(RECORD_STORAGE);
|
|
||||||
|
|
||||||
furi_record_close(RECORD_GUI);
|
|
||||||
|
|
||||||
free(namechanger);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...) {
|
|
||||||
va_list args;
|
|
||||||
va_start(args, text);
|
|
||||||
|
|
||||||
vsnprintf(namechanger->text_store, NAMECHANGER_TEXT_STORE_SIZE, text, args);
|
|
||||||
|
|
||||||
va_end(args);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_text_store_clear(NameChanger* namechanger) {
|
|
||||||
memset(namechanger->text_store, 0, NAMECHANGER_TEXT_STORE_SIZE);
|
|
||||||
}
|
|
||||||
|
|
||||||
int32_t namechanger_app() {
|
|
||||||
NameChanger* namechanger = namechanger_alloc();
|
|
||||||
|
|
||||||
namechanger->error = furi_string_alloc();
|
|
||||||
furi_string_set(namechanger->error, "Default");
|
|
||||||
|
|
||||||
view_dispatcher_attach_to_gui(
|
|
||||||
namechanger->view_dispatcher, namechanger->gui, ViewDispatcherTypeFullscreen);
|
|
||||||
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneStart);
|
|
||||||
|
|
||||||
view_dispatcher_run(namechanger->view_dispatcher);
|
|
||||||
|
|
||||||
namechanger_free(namechanger);
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <furi_hal.h>
|
|
||||||
#include <gui/gui.h>
|
|
||||||
#include <gui/view.h>
|
|
||||||
#include <gui/view_dispatcher.h>
|
|
||||||
#include <gui/scene_manager.h>
|
|
||||||
#include <storage/storage.h>
|
|
||||||
|
|
||||||
#include <NameChanger_icons.h>
|
|
||||||
|
|
||||||
#include <gui/modules/submenu.h>
|
|
||||||
#include <gui/modules/popup.h>
|
|
||||||
#include <gui/modules/text_input.h>
|
|
||||||
#include <gui/modules/widget.h>
|
|
||||||
|
|
||||||
#include "namechanger_custom_event.h"
|
|
||||||
#include "scenes/namechanger_scene.h"
|
|
||||||
|
|
||||||
#define NAMECHANGER_TEXT_STORE_SIZE 9
|
|
||||||
#define NAMECHANGER_HEADER "Flipper Name File"
|
|
||||||
|
|
||||||
#define TAG "NameChanger"
|
|
||||||
|
|
||||||
typedef struct {
|
|
||||||
SceneManager* scene_manager;
|
|
||||||
ViewDispatcher* view_dispatcher;
|
|
||||||
|
|
||||||
Gui* gui;
|
|
||||||
Storage* storage;
|
|
||||||
|
|
||||||
char text_store[NAMECHANGER_TEXT_STORE_SIZE + 1];
|
|
||||||
FuriString* error;
|
|
||||||
|
|
||||||
Submenu* submenu;
|
|
||||||
TextInput* text_input;
|
|
||||||
Popup* popup;
|
|
||||||
Widget* widget;
|
|
||||||
} NameChanger;
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
NameChangerViewSubmenu,
|
|
||||||
NameChangerViewTextInput,
|
|
||||||
NameChangerViewPopup,
|
|
||||||
NameChangerViewWidget,
|
|
||||||
} NameChangerView;
|
|
||||||
|
|
||||||
bool namechanger_make_app_folder(NameChanger* namechanger);
|
|
||||||
bool namechanger_name_read_write(NameChanger* namechanger, char* name, uint8_t mode);
|
|
||||||
void namechanger_text_store_set(NameChanger* namechanger, const char* text, ...);
|
|
||||||
void namechanger_text_store_clear(NameChanger* namechanger);
|
|
||||||
Binary file not shown.
|
Before Width: | Height: | Size: 1.6 KiB |
@@ -1,7 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
enum NameChangerCustomEvent {
|
|
||||||
NameChangerCustomEventBack,
|
|
||||||
NameChangerCustomEventTextEditResult,
|
|
||||||
NameChangerCustomEventError,
|
|
||||||
};
|
|
||||||
@@ -1,30 +0,0 @@
|
|||||||
#include "namechanger_scene.h"
|
|
||||||
|
|
||||||
// Generate scene on_enter handlers array
|
|
||||||
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_enter,
|
|
||||||
void (*const namechanger_on_enter_handlers[])(void*) = {
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
};
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
// Generate scene on_event handlers array
|
|
||||||
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_event,
|
|
||||||
bool (*const namechanger_on_event_handlers[])(void* context, SceneManagerEvent event) = {
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
};
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
// Generate scene on_exit handlers array
|
|
||||||
#define ADD_SCENE(prefix, name, id) prefix##_scene_##name##_on_exit,
|
|
||||||
void (*const namechanger_on_exit_handlers[])(void* context) = {
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
};
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
// Initialize scene handlers configuration structure
|
|
||||||
const SceneManagerHandlers namechanger_scene_handlers = {
|
|
||||||
.on_enter_handlers = namechanger_on_enter_handlers,
|
|
||||||
.on_event_handlers = namechanger_on_event_handlers,
|
|
||||||
.on_exit_handlers = namechanger_on_exit_handlers,
|
|
||||||
.scene_num = NameChangerSceneNum,
|
|
||||||
};
|
|
||||||
@@ -1,29 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <gui/scene_manager.h>
|
|
||||||
|
|
||||||
// Generate scene id and total number
|
|
||||||
#define ADD_SCENE(prefix, name, id) NameChangerScene##id,
|
|
||||||
typedef enum {
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
NameChangerSceneNum,
|
|
||||||
} NameChangerScene;
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
extern const SceneManagerHandlers namechanger_scene_handlers;
|
|
||||||
|
|
||||||
// Generate scene on_enter handlers declaration
|
|
||||||
#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_enter(void*);
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
// Generate scene on_event handlers declaration
|
|
||||||
#define ADD_SCENE(prefix, name, id) \
|
|
||||||
bool prefix##_scene_##name##_on_event(void* context, SceneManagerEvent event);
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
#undef ADD_SCENE
|
|
||||||
|
|
||||||
// Generate scene on_exit handlers declaration
|
|
||||||
#define ADD_SCENE(prefix, name, id) void prefix##_scene_##name##_on_exit(void* context);
|
|
||||||
#include "namechanger_scene_config.h"
|
|
||||||
#undef ADD_SCENE
|
|
||||||
@@ -1,64 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
static void namechanger_scene_change_text_input_callback(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
|
|
||||||
view_dispatcher_send_custom_event(
|
|
||||||
namechanger->view_dispatcher, NameChangerCustomEventTextEditResult);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_change_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
TextInput* text_input = namechanger->text_input;
|
|
||||||
|
|
||||||
if(namechanger_name_read_write(namechanger, NULL, 2)) {
|
|
||||||
text_input_set_header_text(text_input, "Set Flipper Name");
|
|
||||||
|
|
||||||
text_input_set_result_callback(
|
|
||||||
text_input,
|
|
||||||
namechanger_scene_change_text_input_callback,
|
|
||||||
namechanger,
|
|
||||||
namechanger->text_store,
|
|
||||||
NAMECHANGER_TEXT_STORE_SIZE,
|
|
||||||
true);
|
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewTextInput);
|
|
||||||
} else {
|
|
||||||
view_dispatcher_send_custom_event(
|
|
||||||
namechanger->view_dispatcher, NameChangerCustomEventError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_change_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
consumed = true;
|
|
||||||
if(event.event == NameChangerCustomEventTextEditResult) {
|
|
||||||
if(namechanger_make_app_folder(namechanger)) {
|
|
||||||
if(namechanger_name_read_write(namechanger, namechanger->text_store, 3)) {
|
|
||||||
scene_manager_next_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneChangeSuccess);
|
|
||||||
} else {
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneError);
|
|
||||||
}
|
|
||||||
} else {
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneError);
|
|
||||||
}
|
|
||||||
} else if(event.event == NameChangerCustomEventError) {
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneError);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_change_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
TextInput* text_input = namechanger->text_input;
|
|
||||||
|
|
||||||
text_input_reset(text_input);
|
|
||||||
}
|
|
||||||
@@ -1,51 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
static void namechanger_scene_change_success_popup_callback(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
view_dispatcher_send_custom_event(namechanger->view_dispatcher, NameChangerCustomEventBack);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_change_success_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_icon(popup, 32, 5, &I_DolphinNice_96x59);
|
|
||||||
popup_set_header(popup, "Saved!", 5, 5, AlignLeft, AlignTop);
|
|
||||||
popup_set_text(popup, "Rebooting...", 5, 17, AlignLeft, AlignTop);
|
|
||||||
|
|
||||||
popup_set_callback(popup, namechanger_scene_change_success_popup_callback);
|
|
||||||
popup_set_context(popup, namechanger);
|
|
||||||
popup_set_timeout(popup, 5000);
|
|
||||||
popup_enable_timeout(popup);
|
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewPopup);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_change_success_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
consumed = true;
|
|
||||||
if(event.event == NameChangerCustomEventBack) {
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneChange);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_change_success_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
|
||||||
popup_set_icon(popup, 0, 0, NULL);
|
|
||||||
|
|
||||||
popup_disable_timeout(popup);
|
|
||||||
popup_set_context(popup, NULL);
|
|
||||||
popup_set_callback(popup, NULL);
|
|
||||||
|
|
||||||
furi_hal_power_reset();
|
|
||||||
}
|
|
||||||
@@ -1,6 +0,0 @@
|
|||||||
ADD_SCENE(namechanger, start, Start)
|
|
||||||
ADD_SCENE(namechanger, change, Change)
|
|
||||||
ADD_SCENE(namechanger, change_success, ChangeSuccess)
|
|
||||||
ADD_SCENE(namechanger, revert, Revert)
|
|
||||||
ADD_SCENE(namechanger, revert_success, RevertSuccess)
|
|
||||||
ADD_SCENE(namechanger, error, Error)
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
static void namechanger_scene_error_popup_callback(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
view_dispatcher_send_custom_event(namechanger->view_dispatcher, NameChangerCustomEventBack);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_error_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_icon(popup, 60, 12, &I_Cry_dolph_55x52);
|
|
||||||
popup_set_header(popup, "Error", 5, 7, AlignLeft, AlignTop);
|
|
||||||
|
|
||||||
popup_set_text(popup, furi_string_get_cstr(namechanger->error), 5, 20, AlignLeft, AlignTop);
|
|
||||||
|
|
||||||
popup_set_callback(popup, namechanger_scene_error_popup_callback);
|
|
||||||
popup_set_context(popup, namechanger);
|
|
||||||
popup_set_timeout(popup, 10000);
|
|
||||||
popup_enable_timeout(popup);
|
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewPopup);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_error_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
consumed = true;
|
|
||||||
if(event.event == NameChangerCustomEventBack) {
|
|
||||||
view_dispatcher_stop(namechanger->view_dispatcher);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_error_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
|
||||||
popup_set_icon(popup, 0, 0, NULL);
|
|
||||||
|
|
||||||
popup_disable_timeout(popup);
|
|
||||||
popup_set_context(popup, NULL);
|
|
||||||
popup_set_callback(popup, NULL);
|
|
||||||
}
|
|
||||||
@@ -1,68 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
static void
|
|
||||||
namechanger_scene_revert_widget_callback(GuiButtonType result, InputType type, void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
FURI_LOG_I(TAG, "revert1");
|
|
||||||
if(type == InputTypeShort) {
|
|
||||||
FURI_LOG_I(TAG, "revert2");
|
|
||||||
view_dispatcher_send_custom_event(namechanger->view_dispatcher, result);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_revert_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Widget* widget = namechanger->widget;
|
|
||||||
FURI_LOG_I(TAG, "revert3");
|
|
||||||
widget_add_text_box_element(
|
|
||||||
widget, 0, 0, 128, 25, AlignCenter, AlignCenter, "\e#Revert Name?\e#", false);
|
|
||||||
widget_add_icon_element(widget, 48, 20, &I_MarioBlock);
|
|
||||||
widget_add_button_element(
|
|
||||||
widget, GuiButtonTypeLeft, "Cancel", namechanger_scene_revert_widget_callback, namechanger);
|
|
||||||
FURI_LOG_I(TAG, "revert4");
|
|
||||||
widget_add_button_element(
|
|
||||||
widget,
|
|
||||||
GuiButtonTypeRight,
|
|
||||||
"Revert",
|
|
||||||
namechanger_scene_revert_widget_callback,
|
|
||||||
namechanger);
|
|
||||||
FURI_LOG_I(TAG, "revert5");
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewWidget);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_revert_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
FURI_LOG_I(TAG, "revert6");
|
|
||||||
if(event.type == SceneManagerEventTypeBack) {
|
|
||||||
consumed = true;
|
|
||||||
FURI_LOG_I(TAG, "revert7");
|
|
||||||
} else if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
consumed = true;
|
|
||||||
FURI_LOG_I(TAG, "revert8");
|
|
||||||
if(event.event == GuiButtonTypeRight) {
|
|
||||||
FURI_LOG_I(TAG, "revert9");
|
|
||||||
if(namechanger_name_read_write(namechanger, "eraseerase", 3)) {
|
|
||||||
FURI_LOG_I(TAG, "revert10");
|
|
||||||
scene_manager_next_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneRevertSuccess);
|
|
||||||
} else {
|
|
||||||
FURI_LOG_I(TAG, "revert11");
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneError);
|
|
||||||
}
|
|
||||||
} else if(event.event == GuiButtonTypeLeft) {
|
|
||||||
FURI_LOG_I(TAG, "revert12");
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneStart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
FURI_LOG_I(TAG, "revert13");
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_revert_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
FURI_LOG_I(TAG, "revert14");
|
|
||||||
widget_reset(namechanger->widget);
|
|
||||||
}
|
|
||||||
@@ -1,55 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
static void namechanger_scene_revert_success_popup_callback(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
view_dispatcher_send_custom_event(namechanger->view_dispatcher, NameChangerCustomEventBack);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_revert_success_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_icon(popup, 0, 2, &I_DolphinMafia_115x62);
|
|
||||||
popup_set_header(popup, "Reverted!", 70, 5, AlignLeft, AlignTop);
|
|
||||||
popup_set_text(popup, "Rebooting...", 70, 16, AlignLeft, AlignTop);
|
|
||||||
|
|
||||||
popup_set_callback(popup, namechanger_scene_revert_success_popup_callback);
|
|
||||||
popup_set_context(popup, namechanger);
|
|
||||||
popup_set_timeout(popup, 5000);
|
|
||||||
popup_enable_timeout(popup);
|
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewPopup);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_revert_success_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeBack) {
|
|
||||||
consumed = true;
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneStart);
|
|
||||||
} else if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
consumed = true;
|
|
||||||
if(event.event == NameChangerCustomEventBack) {
|
|
||||||
scene_manager_search_and_switch_to_previous_scene(
|
|
||||||
namechanger->scene_manager, NameChangerSceneStart);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_revert_success_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Popup* popup = namechanger->popup;
|
|
||||||
|
|
||||||
popup_set_text(popup, NULL, 0, 0, AlignCenter, AlignTop);
|
|
||||||
popup_set_icon(popup, 0, 0, NULL);
|
|
||||||
|
|
||||||
popup_disable_timeout(popup);
|
|
||||||
popup_set_context(popup, NULL);
|
|
||||||
popup_set_callback(popup, NULL);
|
|
||||||
|
|
||||||
furi_hal_power_reset();
|
|
||||||
}
|
|
||||||
@@ -1,58 +0,0 @@
|
|||||||
#include "../namechanger.h"
|
|
||||||
|
|
||||||
enum SubmenuIndex {
|
|
||||||
SubmenuIndexChange,
|
|
||||||
SubmenuIndexRevert,
|
|
||||||
};
|
|
||||||
|
|
||||||
void namechanger_scene_start_submenu_callback(void* context, uint32_t index) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
view_dispatcher_send_custom_event(namechanger->view_dispatcher, index);
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_start_on_enter(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
Submenu* submenu = namechanger->submenu;
|
|
||||||
|
|
||||||
submenu_add_item(
|
|
||||||
submenu,
|
|
||||||
"Change",
|
|
||||||
SubmenuIndexChange,
|
|
||||||
namechanger_scene_start_submenu_callback,
|
|
||||||
namechanger);
|
|
||||||
|
|
||||||
submenu_add_item(
|
|
||||||
submenu,
|
|
||||||
"Revert",
|
|
||||||
SubmenuIndexRevert,
|
|
||||||
namechanger_scene_start_submenu_callback,
|
|
||||||
namechanger);
|
|
||||||
|
|
||||||
submenu_set_selected_item(
|
|
||||||
submenu, scene_manager_get_scene_state(namechanger->scene_manager, NameChangerSceneStart));
|
|
||||||
|
|
||||||
view_dispatcher_switch_to_view(namechanger->view_dispatcher, NameChangerViewSubmenu);
|
|
||||||
}
|
|
||||||
|
|
||||||
bool namechanger_scene_start_on_event(void* context, SceneManagerEvent event) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
bool consumed = false;
|
|
||||||
|
|
||||||
if(event.type == SceneManagerEventTypeCustom) {
|
|
||||||
scene_manager_set_scene_state(
|
|
||||||
namechanger->scene_manager, NameChangerSceneStart, event.event);
|
|
||||||
consumed = true;
|
|
||||||
if(event.event == SubmenuIndexChange) {
|
|
||||||
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneChange);
|
|
||||||
}
|
|
||||||
if(event.event == SubmenuIndexRevert) {
|
|
||||||
scene_manager_next_scene(namechanger->scene_manager, NameChangerSceneRevert);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return consumed;
|
|
||||||
}
|
|
||||||
|
|
||||||
void namechanger_scene_start_on_exit(void* context) {
|
|
||||||
NameChanger* namechanger = context;
|
|
||||||
submenu_reset(namechanger->submenu);
|
|
||||||
}
|
|
||||||
@@ -12,6 +12,5 @@ App(
|
|||||||
"ibuttonsrv",
|
"ibuttonsrv",
|
||||||
"infraredsrv",
|
"infraredsrv",
|
||||||
"lfrfidsrv",
|
"lfrfidsrv",
|
||||||
"namechangersrv",
|
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
App(
|
|
||||||
appid="namechangersrv",
|
|
||||||
apptype=FlipperAppType.STARTUP,
|
|
||||||
entry_point="namechanger_on_system_start",
|
|
||||||
requires=["storage"],
|
|
||||||
order=130,
|
|
||||||
)
|
|
||||||
@@ -1,180 +0,0 @@
|
|||||||
#include "namechangersrv.h"
|
|
||||||
#include "m-string.h"
|
|
||||||
#include <toolbox/path.h>
|
|
||||||
#include <flipper_format/flipper_format.h>
|
|
||||||
|
|
||||||
void namechanger_on_system_start() {
|
|
||||||
Storage* storage = furi_record_open(RECORD_STORAGE);
|
|
||||||
FlipperFormat* file = flipper_format_file_alloc(storage);
|
|
||||||
|
|
||||||
FuriString* NAMEHEADER;
|
|
||||||
NAMEHEADER = furi_string_alloc_set("Flipper Name File");
|
|
||||||
|
|
||||||
FuriString* folderpath;
|
|
||||||
folderpath = furi_string_alloc_set("/ext/dolphin");
|
|
||||||
|
|
||||||
FuriString* filepath;
|
|
||||||
filepath = furi_string_alloc_set("/ext/dolphin/name.txt");
|
|
||||||
|
|
||||||
//Make dir if doesn't exist
|
|
||||||
if(storage_simply_mkdir(storage, furi_string_get_cstr(folderpath))) {
|
|
||||||
bool result = false;
|
|
||||||
|
|
||||||
FuriString* data;
|
|
||||||
data = furi_string_alloc();
|
|
||||||
|
|
||||||
do {
|
|
||||||
if(!flipper_format_file_open_existing(file, furi_string_get_cstr(filepath))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// header
|
|
||||||
uint32_t version;
|
|
||||||
|
|
||||||
if(!flipper_format_read_header(file, data, &version)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(furi_string_cmp_str(data, furi_string_get_cstr(NAMEHEADER)) != 0) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(version != 1) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// get Name
|
|
||||||
if(!flipper_format_read_string(file, "Name", data)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
result = true;
|
|
||||||
} while(false);
|
|
||||||
|
|
||||||
flipper_format_free(file);
|
|
||||||
|
|
||||||
if(!result) {
|
|
||||||
//file not good - write new one
|
|
||||||
FlipperFormat* file = flipper_format_file_alloc(storage);
|
|
||||||
|
|
||||||
bool res = false;
|
|
||||||
|
|
||||||
FuriString* name;
|
|
||||||
name = furi_string_alloc_set(furi_hal_version_get_name_ptr());
|
|
||||||
|
|
||||||
do {
|
|
||||||
// Open file for write
|
|
||||||
if(!flipper_format_file_open_always(file, furi_string_get_cstr(filepath))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write header
|
|
||||||
if(!flipper_format_write_header_cstr(file, furi_string_get_cstr(NAMEHEADER), 1)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write comments
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file,
|
|
||||||
"Changing the value below will change your FlipperZero device name.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file,
|
|
||||||
"Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file, "It can contain other characters but use at your own risk.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Write name
|
|
||||||
if(!flipper_format_write_string_cstr(file, "Name", furi_string_get_cstr(name))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = true;
|
|
||||||
} while(false);
|
|
||||||
|
|
||||||
flipper_format_free(file);
|
|
||||||
|
|
||||||
if(!res) {
|
|
||||||
FURI_LOG_E(TAG, "Save failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
furi_string_free(name);
|
|
||||||
} else {
|
|
||||||
furi_string_trim(data);
|
|
||||||
FURI_LOG_I(TAG, "data: %s", furi_string_get_cstr(data));
|
|
||||||
|
|
||||||
if(!furi_string_size(data)) {
|
|
||||||
//Empty file - get default name and write to file.
|
|
||||||
FlipperFormat* file = flipper_format_file_alloc(storage);
|
|
||||||
|
|
||||||
bool res = false;
|
|
||||||
|
|
||||||
FuriString* name;
|
|
||||||
name = furi_string_alloc_set(furi_hal_version_get_name_ptr());
|
|
||||||
|
|
||||||
do {
|
|
||||||
// Open file for write
|
|
||||||
if(!flipper_format_file_open_always(file, furi_string_get_cstr(filepath))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write header
|
|
||||||
if(!flipper_format_write_header_cstr(
|
|
||||||
file, furi_string_get_cstr(NAMEHEADER), 1)) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Write comments
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file,
|
|
||||||
"Changing the value below will change your FlipperZero device name.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file,
|
|
||||||
"Note: This is limited to 8 characters using the following: a-z, A-Z, 0-9, and _")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!flipper_format_write_comment_cstr(
|
|
||||||
file, "It cannot contain any other characters.")) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
//Write name
|
|
||||||
if(!flipper_format_write_string_cstr(
|
|
||||||
file, "Name", furi_string_get_cstr(name))) {
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
res = true;
|
|
||||||
} while(false);
|
|
||||||
|
|
||||||
flipper_format_free(file);
|
|
||||||
|
|
||||||
if(!res) {
|
|
||||||
FURI_LOG_E(TAG, "Save failed.");
|
|
||||||
}
|
|
||||||
|
|
||||||
furi_string_free(name);
|
|
||||||
} else {
|
|
||||||
//set name from file
|
|
||||||
furi_hal_version_set_custom_name(furi_string_get_cstr(data));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
furi_string_free(data);
|
|
||||||
}
|
|
||||||
|
|
||||||
furi_string_free(filepath);
|
|
||||||
furi_string_free(folderpath);
|
|
||||||
furi_record_close(RECORD_STORAGE);
|
|
||||||
}
|
|
||||||
@@ -1,9 +0,0 @@
|
|||||||
#pragma once
|
|
||||||
|
|
||||||
#include <furi_hal.h>
|
|
||||||
#include <storage/storage.h>
|
|
||||||
|
|
||||||
#define NAMECHANGER_TEXT_STORE_SIZE 9
|
|
||||||
#define NAMECHANGER_HEADER "Flipper Name File"
|
|
||||||
|
|
||||||
#define TAG "NameChangerSRV"
|
|
||||||
Reference in New Issue
Block a user