Explorar o código

Change Messages to DialogEx

jblanked hai 1 ano
pai
achega
7f333800ae

+ 0 - 5
alloc/flip_social_alloc.c

@@ -212,11 +212,6 @@ FlipSocialApp *flip_social_app_alloc()
     {
         return NULL;
     }
-    if (!easy_flipper_set_view(&app->view_process_messages, FlipSocialViewLoggedInMessagesProcess, flip_social_callback_draw_messages, NULL, flip_social_callback_to_messages_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-
     // Setup Variable Item List(s)
     if (!easy_flipper_set_variable_item_list(&app->variable_item_list_logged_out_wifi_settings, FlipSocialViewLoggedOutWifiSettings, flip_social_text_input_logged_out_wifi_settings_item_selected, flip_social_callback_to_submenu_logged_out, &app->view_dispatcher, app))
     {

+ 91 - 2
callback/flip_social_callback.c

@@ -335,6 +335,16 @@ static void flip_social_free_friends_dialog()
         view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewFriendsDialog);
     }
 }
+static void flip_social_free_messages_dialog()
+{
+    if (app_instance->dialog_messages)
+    {
+        dialog_ex_free(app_instance->dialog_messages);
+        app_instance->dialog_messages = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewMessagesDialog);
+        return;
+    }
+}
 
 /**
  * @brief Navigation callback to go back to the submenu Logged in.
@@ -358,6 +368,7 @@ uint32_t flip_social_callback_to_submenu_logged_in(void *context)
     free_about_widget(true);
     flip_social_free_explore_dialog();
     flip_social_free_friends_dialog();
+    flip_social_free_messages_dialog();
     return FlipSocialViewLoggedInSubmenu;
 }
 
@@ -559,6 +570,83 @@ static void friends_dialog_callback(DialogExResult result, void *context)
         flip_social_free_friends_dialog();
     }
 }
+static void messages_dialog_callback(DialogExResult result, void *context)
+{
+    furi_assert(context);
+    FlipSocialApp *app = (FlipSocialApp *)context;
+    if (result == DialogExResultLeft) // Previous message
+    {
+        if (flip_social_messages->index > 0)
+        {
+            flip_social_messages->index--;
+            dialog_ex_reset(app->dialog_messages);
+            dialog_ex_set_header(app->dialog_messages, flip_social_messages->usernames[flip_social_messages->index], 0, 0, AlignLeft, AlignTop);
+            dialog_ex_set_text(app->dialog_messages, flip_social_messages->messages[flip_social_messages->index], 0, 10, AlignLeft, AlignTop);
+            if (flip_social_messages->index != 0)
+            {
+                dialog_ex_set_left_button_text(app->dialog_messages, "Previous");
+            }
+            dialog_ex_set_right_button_text(app->dialog_messages, "Next");
+            // switch view, free dialog, re-alloc dialog, switch back to dialog
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesSubmenu);
+            flip_social_free_messages_dialog();
+            messages_dialog_alloc(false);
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewMessagesDialog);
+        }
+    }
+    else if (result == DialogExResultRight) // Next message
+    {
+        if (flip_social_messages->index < flip_social_messages->count - 1)
+        {
+            flip_social_messages->index++;
+            dialog_ex_reset(app->dialog_messages);
+            dialog_ex_set_header(app->dialog_messages, flip_social_messages->usernames[flip_social_messages->index], 0, 0, AlignLeft, AlignTop);
+            dialog_ex_set_text(app->dialog_messages, flip_social_messages->messages[flip_social_messages->index], 0, 10, AlignLeft, AlignTop);
+            dialog_ex_set_left_button_text(app->dialog_messages, "Previous");
+            if (flip_social_messages->index != flip_social_messages->count - 1)
+            {
+                dialog_ex_set_right_button_text(app->dialog_messages, "Next");
+            }
+            // switch view, free dialog, re-alloc dialog, switch back to dialog
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesSubmenu);
+            flip_social_free_messages_dialog();
+            messages_dialog_alloc(false);
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewMessagesDialog);
+        }
+    }
+}
+
+bool messages_dialog_alloc(bool free_first)
+{
+    if (free_first)
+    {
+        flip_social_free_messages_dialog();
+    }
+    if (!app_instance->dialog_messages)
+    {
+        if (!easy_flipper_set_dialog_ex(
+                &app_instance->dialog_messages,
+                FlipSocialViewMessagesDialog,
+                flip_social_messages->usernames[flip_social_messages->index],
+                0,
+                0,
+                flip_social_messages->messages[flip_social_messages->index],
+                0,
+                10,
+                flip_social_messages->index != 0 ? "Previous" : NULL,
+                flip_social_messages->index != flip_social_messages->count - 1 ? "Next" : NULL,
+                NULL,
+                messages_dialog_callback,
+                flip_social_callback_to_messages_logged_in,
+                &app_instance->view_dispatcher,
+                app_instance))
+        {
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
 
 /**
  * @brief Handle ALL submenu item selections.
@@ -807,9 +895,10 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
             flipper_http_loading_task(
                 flip_social_get_messages_with_user,    // get the messages with the selected user
                 flip_social_parse_json_messages,       // parse the messages
-                FlipSocialViewLoggedInMessagesProcess, // switch to the messages process if successful
+                FlipSocialViewMessagesDialog,          // switch to the messages process if successful
                 FlipSocialViewLoggedInMessagesSubmenu, // switch back to the messages submenu if failed
-                &app->view_dispatcher);                // view dispatcher
+                &app->view_dispatcher                  // view dispatcher
+            );
         }
 
         // handle the messages user choices selection

+ 2 - 0
callback/flip_social_callback.h

@@ -299,4 +299,6 @@ void flip_social_loader_free_model(View *view);
 
 bool flip_social_custom_event_callback(void *context, uint32_t index);
 
+bool messages_dialog_alloc(bool free_first);
+
 #endif

+ 0 - 111
draw/flip_social_draw.c

@@ -507,115 +507,4 @@ void flip_social_callback_draw_feed(Canvas *canvas, void *model)
         flip_social_dialog_stop = false;
         action = ActionNone;
     }
-}
-
-void flip_social_canvas_draw_user_message(Canvas *canvas, char *user_username, char *user_message, bool show_prev, bool show_next)
-{
-    canvas_set_color(canvas, ColorBlack);
-    canvas_set_font(canvas, FontPrimary);
-    canvas_draw_str_aligned(canvas, 64, 5, AlignCenter, AlignCenter, user_username);
-    canvas_set_font(canvas, FontSecondary);
-
-    draw_user_message(canvas, user_message, 0, 12);
-
-    canvas_set_font(canvas, FontSecondary);
-    if (show_prev)
-    {
-        canvas_draw_icon(canvas, 0, 53, &I_ButtonLeft_4x7);
-        canvas_draw_str_aligned(canvas, 9, 54, AlignLeft, AlignTop, "Prev");
-    }
-
-    canvas_draw_icon(canvas, 47, 53, &I_ButtonOK_7x7);
-    canvas_draw_str_aligned(canvas, 56, 54, AlignLeft, AlignTop, "Create");
-
-    if (show_next)
-    {
-        canvas_draw_icon(canvas, 98, 53, &I_ButtonRight_4x7);
-        canvas_draw_str_aligned(canvas, 107, 54, AlignLeft, AlignTop, "Next");
-    }
-}
-
-// Callback function to handle the messages dialog
-void flip_social_callback_draw_messages(Canvas *canvas, void *model)
-{
-    UNUSED(model);
-    if (!canvas)
-    {
-        FURI_LOG_E(TAG, "Canvas is NULL");
-        return;
-    }
-    if (!app_instance)
-    {
-        FURI_LOG_E(TAG, "FlipSocialApp is NULL");
-        return;
-    }
-
-    if (!flip_social_dialog_shown)
-    {
-        flip_social_dialog_shown = true;
-        app_instance->input_event_queue = furi_record_open(RECORD_INPUT_EVENTS);
-        app_instance->input_event = furi_pubsub_subscribe(app_instance->input_event_queue, on_input, NULL);
-    }
-
-    // handle action
-    switch (action)
-    {
-    case ActionNone:
-        flip_social_canvas_draw_user_message(canvas, flip_social_messages->usernames[flip_social_messages->index], flip_social_messages->messages[flip_social_messages->index], flip_social_messages->index > 0, flip_social_messages->index < flip_social_messages->count - 1);
-        action = ActionNone;
-        break;
-    case ActionNext:
-        // view next message (if any)
-        canvas_clear(canvas);
-        if (flip_social_messages->index < flip_social_messages->count - 1)
-        {
-            flip_social_messages->index++;
-        }
-        flip_social_canvas_draw_user_message(canvas, flip_social_messages->usernames[flip_social_messages->index], flip_social_messages->messages[flip_social_messages->index], flip_social_messages->index > 0, flip_social_messages->index < flip_social_messages->count - 1);
-        action = ActionNone;
-        break;
-    case ActionPrev:
-        // view previous message (if any)
-        canvas_clear(canvas);
-        if (flip_social_messages->index > 0)
-        {
-            flip_social_messages->index--;
-        }
-        flip_social_canvas_draw_user_message(canvas, flip_social_messages->usernames[flip_social_messages->index], flip_social_messages->messages[flip_social_messages->index], flip_social_messages->index > 0, flip_social_messages->index < flip_social_messages->count - 1);
-        action = ActionNone;
-        break;
-    case ActionBack:
-        //  go back to the previous view
-        flip_social_dialog_stop = true;
-        action = ActionNone;
-        break;
-    case ActionFlip:
-        // go to the input view
-        flip_social_dialog_stop = true;
-        flip_social_send_message = true;
-        action = ActionNone;
-        break;
-    default:
-        action = ActionNone;
-        break;
-    }
-
-    if (flip_social_dialog_stop && flip_social_dialog_shown)
-    {
-        furi_pubsub_unsubscribe(app_instance->input_event_queue, app_instance->input_event);
-        flip_social_dialog_shown = false;
-        flip_social_dialog_stop = false;
-        if (flip_social_send_message)
-        {
-            FURI_LOG_I(TAG, "Switching to new message input view");
-            action = ActionNone;
-            flip_social_send_message = false;
-            view_dispatcher_switch_to_view(app_instance->view_dispatcher, FlipSocialViewLoggedInMessagesNewMessageInput);
-        }
-        else
-        {
-            action = ActionNone;
-            view_dispatcher_switch_to_view(app_instance->view_dispatcher, FlipSocialViewLoggedInMessagesSubmenu);
-        }
-    }
 }

+ 0 - 4
draw/flip_social_draw.h

@@ -30,8 +30,4 @@ void flip_social_canvas_draw_message(Canvas *canvas, char *user_username, char *
 // Callback function to handle the feed dialog
 void flip_social_callback_draw_feed(Canvas *canvas, void *model);
 
-void flip_social_canvas_draw_user_message(Canvas *canvas, char *user_username, char *user_message, bool show_prev, bool show_next);
-// Callback function to handle the messages dialog
-void flip_social_callback_draw_messages(Canvas *canvas, void *model);
-
 #endif

+ 0 - 5
flip_social.c

@@ -182,11 +182,6 @@ void flip_social_app_free(FlipSocialApp *app)
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInProcessCompose);
         view_free(app->view_process_compose);
     }
-    if (app->view_process_messages)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesProcess);
-        view_free(app->view_process_messages);
-    }
 
     if (app->view_dispatcher)
         view_dispatcher_free(app->view_dispatcher);

+ 4 - 3
flip_social.h

@@ -143,15 +143,15 @@ typedef enum
     FlipSocialViewLoggedInExploreSubmenu,  // The view after clicking the explore button
     FlipSocialViewLoggedInFriendsSubmenu,  // The view after clicking the friends button on the profile screen
     FlipSocialViewLoggedInMessagesSubmenu, // The view after clicking the messages button on the profile screen
-    FlipSocialViewLoggedInMessagesProcess, // The view after clicking on a user in the messages screen
     //
     FlipSocialViewLoading, // The loading screen
     //
     FlipSocialViewWidgetResult, // The text box that displays the random fact
     FlipSocialViewLoader,       // The loader screen retrieves data from the internet
     //
-    FlipSocialViewExploreDialog, // The dialog for the explore screen
-    FlipSocialViewFriendsDialog, // The dialog for the friends screen
+    FlipSocialViewExploreDialog,  // The dialog for the explore screen
+    FlipSocialViewFriendsDialog,  // The dialog for the friends screen
+    FlipSocialViewMessagesDialog, // The dialog for the messages screen
 } FlipSocialView;
 
 // Define the application structure
@@ -287,6 +287,7 @@ typedef struct
     Loading *loading; // The loading screen
     DialogEx *dialog_explore;
     DialogEx *dialog_friends;
+    DialogEx *dialog_messages;
 } FlipSocialApp;
 
 void flip_social_app_free(FlipSocialApp *app);

+ 7 - 0
messages/flip_social_messages.c

@@ -457,6 +457,13 @@ bool flip_social_parse_json_messages()
         free(sender);
         free(content);
     }
+    if (!messages_dialog_alloc(true))
+    {
+        FURI_LOG_E(TAG, "Failed to allocate and set messages dialog.");
+        furi_string_free(message_data);
+        free(data_cstr);
+        return false;
+    }
     furi_string_free(message_data);
     free(data_cstr);
     return true;