Преглед изворни кода

[FL-1748] NFC, iButton edit fix (#680)

* nfc: fix edit UID without confirmation
* ibutton: fix key edit
* nfc: fix nfc uid edition
* nfc: fix structure type name
gornekich пре 4 година
родитељ
комит
4b7d9b79a9

+ 3 - 8
applications/ibutton/scene/ibutton-scene-add-value.cpp

@@ -8,14 +8,9 @@ void iButtonSceneAddValue::on_enter(iButtonApp* app) {
     iButtonAppViewManager* view_manager = app->get_view_manager();
     ByteInput* byte_input = view_manager->get_byte_input();
     auto callback = cbc::obtain_connector(this, &iButtonSceneAddValue::byte_input_callback);
-
+    memcpy(this->new_key_data, app->get_key()->get_data(), app->get_key()->get_type_data_size());
     byte_input_set_result_callback(
-        byte_input,
-        callback,
-        NULL,
-        app,
-        app->get_key()->get_data(),
-        app->get_key()->get_type_data_size());
+        byte_input, callback, NULL, app, this->new_key_data, app->get_key()->get_type_data_size());
     byte_input_set_header_text(byte_input, "Enter the key");
 
     view_manager->switch_to(iButtonAppViewManager::Type::iButtonAppViewByteInput);
@@ -45,6 +40,6 @@ void iButtonSceneAddValue::byte_input_callback(void* context) {
     iButtonEvent event;
 
     event.type = iButtonEvent::Type::EventTypeByteEditResult;
-
+    memcpy(app->get_key()->get_data(), this->new_key_data, app->get_key()->get_type_data_size());
     app->get_view_manager()->send_event(&event);
 }

+ 2 - 0
applications/ibutton/scene/ibutton-scene-add-value.h

@@ -1,5 +1,6 @@
 #pragma once
 #include "ibutton-scene-generic.h"
+#include "../ibutton-key.h"
 
 class iButtonSceneAddValue : public iButtonScene {
 public:
@@ -9,4 +10,5 @@ public:
 
 private:
     void byte_input_callback(void* context);
+    uint8_t new_key_data[IBUTTON_KEY_DATA_SIZE] = {};
 };

+ 1 - 0
applications/nfc/nfc_i.h

@@ -35,6 +35,7 @@ struct Nfc {
     NotificationApp* notifications;
     SceneManager* scene_manager;
     NfcDevice dev;
+    NfcDeviceCommonData dev_edit_data;
 
     char text_store[NFC_TEXT_STORE_SIZE + 1];
     string_t text_box_store;

+ 3 - 0
applications/nfc/scenes/nfc_scene_save_name.c

@@ -40,6 +40,9 @@ const bool nfc_scene_save_name_on_event(void* context, SceneManagerEvent event)
             if(nfc->dev.dev_name) {
                 nfc_device_delete(&nfc->dev);
             }
+            if(scene_manager_has_previous_scene(nfc->scene_manager, NfcSceneSetUid)) {
+                nfc->dev.dev_data.nfc_data = nfc->dev_edit_data;
+            }
             memcpy(&nfc->dev.dev_name, nfc->text_store, strlen(nfc->text_store));
             if(nfc_device_save(&nfc->dev, nfc->text_store)) {
                 scene_manager_next_scene(nfc->scene_manager, NfcSceneSaveSuccess);

+ 3 - 2
applications/nfc/scenes/nfc_scene_set_uid.c

@@ -14,13 +14,14 @@ const void nfc_scene_set_uid_on_enter(void* context) {
     // Setup view
     ByteInput* byte_input = nfc->byte_input;
     byte_input_set_header_text(byte_input, "Enter uid in hex");
+    nfc->dev_edit_data = nfc->dev.dev_data.nfc_data;
     byte_input_set_result_callback(
         byte_input,
         nfc_scene_set_uid_byte_input_callback,
         NULL,
         nfc,
-        nfc->dev.dev_data.nfc_data.uid,
-        nfc->dev.dev_data.nfc_data.uid_len);
+        nfc->dev_edit_data.uid,
+        nfc->dev_edit_data.uid_len);
     view_dispatcher_switch_to_view(nfc->view_dispatcher, NfcViewByteInput);
 }