Parcourir la source

Change Explore/Friends view to DialogEx

jblanked il y a 1 an
Parent
commit
f6478d5a3e

+ 0 - 8
alloc/flip_social_alloc.c

@@ -212,14 +212,6 @@ FlipSocialApp *flip_social_app_alloc()
     {
         return NULL;
     }
-    if (!easy_flipper_set_view(&app->view_process_explore, FlipSocialViewLoggedInExploreProccess, flip_social_callback_draw_explore, NULL, flip_social_callback_to_explore_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_view(&app->view_process_friends, FlipSocialViewLoggedInFriendsProcess, flip_social_callback_draw_friends, NULL, flip_social_callback_to_friends_logged_in, &app->view_dispatcher, app))
-    {
-        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;

+ 114 - 3
callback/flip_social_callback.c

@@ -317,6 +317,25 @@ uint32_t flip_social_callback_to_submenu_logged_out(void *context)
     return FlipSocialViewLoggedOutSubmenu;
 }
 
+static void flip_social_free_explore_dialog()
+{
+    if (app_instance->dialog_explore)
+    {
+        dialog_ex_free(app_instance->dialog_explore);
+        app_instance->dialog_explore = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewExploreDialog);
+    }
+}
+static void flip_social_free_friends_dialog()
+{
+    if (app_instance->dialog_friends)
+    {
+        dialog_ex_free(app_instance->dialog_friends);
+        app_instance->dialog_friends = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewFriendsDialog);
+    }
+}
+
 /**
  * @brief Navigation callback to go back to the submenu Logged in.
  * @param context The context - unused
@@ -337,6 +356,8 @@ uint32_t flip_social_callback_to_submenu_logged_in(void *context)
     }
     // free the about widget if it exists
     free_about_widget(true);
+    flip_social_free_explore_dialog();
+    flip_social_free_friends_dialog();
     return FlipSocialViewLoggedInSubmenu;
 }
 
@@ -432,7 +453,10 @@ uint32_t flip_social_callback_to_explore_logged_in(void *context)
     flip_social_dialog_stop = false;
     last_explore_response = "";
     flip_social_dialog_shown = false;
-    flip_social_explore->index = 0;
+    if (flip_social_explore)
+    {
+        flip_social_explore->index = 0;
+    }
     action = ActionNone;
     return FlipSocialViewLoggedInExploreSubmenu;
 }
@@ -495,6 +519,47 @@ uint32_t flip_social_callback_exit_app(void *context)
     return VIEW_NONE; // Return VIEW_NONE to exit the app
 }
 
+static void explore_dialog_callback(DialogExResult result, void *context)
+{
+    furi_assert(context);
+    FlipSocialApp *app = (FlipSocialApp *)context;
+    if (result == DialogExResultLeft) // Remove
+    {
+        // remove friend
+        char remove_payload[128];
+        snprintf(remove_payload, sizeof(remove_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_explore->usernames[flip_social_explore->index]);
+        auth_headers_alloc();
+        flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/remove-friend/", auth_headers, remove_payload);
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInExploreSubmenu);
+        flip_social_free_explore_dialog();
+    }
+    else if (result == DialogExResultRight)
+    {
+        // add friend
+        char add_payload[128];
+        snprintf(add_payload, sizeof(add_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_explore->usernames[flip_social_explore->index]);
+        auth_headers_alloc();
+        flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/add-friend/", auth_headers, add_payload);
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInExploreSubmenu);
+        flip_social_free_explore_dialog();
+    }
+}
+static void friends_dialog_callback(DialogExResult result, void *context)
+{
+    furi_assert(context);
+    FlipSocialApp *app = (FlipSocialApp *)context;
+    if (result == DialogExResultLeft) // Remove
+    {
+        // remove friend
+        char remove_payload[128];
+        snprintf(remove_payload, sizeof(remove_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_friends->usernames[flip_social_friends->index]);
+        auth_headers_alloc();
+        flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/remove-friend/", auth_headers, remove_payload);
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInFriendsSubmenu);
+        flip_social_free_friends_dialog();
+    }
+}
+
 /**
  * @brief Handle ALL submenu item selections.
  * @param context The context - FlipSocialApp object.
@@ -669,7 +734,30 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
                 return;
             }
             flip_social_explore->index = index - FlipSocialSubmenuExploreIndexStartIndex;
-            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInExploreProccess);
+            flip_social_free_explore_dialog();
+            if (!app->dialog_explore)
+            {
+                if (!easy_flipper_set_dialog_ex(
+                        &app->dialog_explore,
+                        FlipSocialViewExploreDialog,
+                        "User Options",
+                        0,
+                        0,
+                        flip_social_explore->usernames[flip_social_explore->index],
+                        0,
+                        10,
+                        "Remove",
+                        "Add",
+                        NULL,
+                        explore_dialog_callback,
+                        flip_social_callback_to_explore_logged_in,
+                        &app->view_dispatcher,
+                        app))
+                {
+                    return;
+                }
+            }
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewExploreDialog);
         }
 
         // handle the friends selection
@@ -681,7 +769,30 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
                 return;
             }
             flip_social_friends->index = index - FlipSocialSubmenuLoggedInIndexFriendsStart;
-            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInFriendsProcess);
+            flip_social_free_friends_dialog();
+            if (!app->dialog_friends)
+            {
+                if (!easy_flipper_set_dialog_ex(
+                        &app->dialog_friends,
+                        FlipSocialViewFriendsDialog,
+                        "User Options",
+                        0,
+                        0,
+                        flip_social_friends->usernames[flip_social_friends->index],
+                        0,
+                        10,
+                        "Remove",
+                        "",
+                        NULL,
+                        friends_dialog_callback,
+                        flip_social_callback_to_friends_logged_in,
+                        &app->view_dispatcher,
+                        app))
+                {
+                    return;
+                }
+            }
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewFriendsDialog);
         }
 
         // handle the messages selection

+ 0 - 177
draw/flip_social_draw.c

@@ -509,183 +509,6 @@ void flip_social_callback_draw_feed(Canvas *canvas, void *model)
     }
 }
 
-// function to draw the dialog canvas
-void flip_social_canvas_draw_explore(Canvas *canvas, char *user_username, char *content)
-{
-    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, content, 0, 12);
-
-    canvas_set_font(canvas, FontSecondary);
-    canvas_draw_icon(canvas, 0, 53, &I_ButtonLeft_4x7);
-    canvas_draw_str_aligned(canvas, 9, 54, AlignLeft, AlignTop, "Remove");
-    canvas_draw_icon(canvas, 98, 53, &I_ButtonRight_4x7);
-    canvas_draw_str_aligned(canvas, 107, 54, AlignLeft, AlignTop, "Add");
-
-    if (strlen(content) > 0)
-    {
-        last_explore_response = content;
-    }
-}
-
-// Callback function to handle the explore dialog
-void flip_social_callback_draw_explore(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);
-        auth_headers_alloc();
-    }
-    flip_social_canvas_draw_explore(canvas, flip_social_explore->usernames[flip_social_explore->index], last_explore_response);
-
-    // handle action
-    switch (action)
-    {
-    case ActionNext:
-        // add friend
-        char add_payload[128];
-        snprintf(add_payload, sizeof(add_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_explore->usernames[flip_social_explore->index]);
-        flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/add-friend/", auth_headers, add_payload);
-        canvas_clear(canvas);
-        flip_social_canvas_draw_explore(canvas, flip_social_explore->usernames[flip_social_explore->index], "Added!");
-        action = ActionNone;
-        break;
-    case ActionPrev:
-        // remove friend
-        char remove_payload[128];
-        snprintf(remove_payload, sizeof(remove_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_explore->usernames[flip_social_explore->index]);
-        flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/remove-friend/", auth_headers, remove_payload);
-        canvas_clear(canvas);
-        flip_social_canvas_draw_explore(canvas, flip_social_explore->usernames[flip_social_explore->index], "Removed!");
-        action = ActionNone;
-        break;
-    case ActionBack:
-        canvas_clear(canvas);
-        flip_social_dialog_stop = true;
-        last_explore_response = "";
-        flip_social_dialog_shown = false;
-        flip_social_explore->index = 0;
-        action = ActionNone;
-        break;
-    default:
-        break;
-    }
-
-    if (flip_social_dialog_stop)
-    {
-        furi_pubsub_unsubscribe(app_instance->input_event_queue, app_instance->input_event);
-        flip_social_dialog_shown = false;
-        flip_social_dialog_stop = false;
-        action = ActionNone;
-    }
-}
-
-// Callback function to handle the friends dialog
-void flip_social_callback_draw_friends(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);
-        auth_headers_alloc();
-    }
-    flip_social_canvas_draw_explore(canvas, flip_social_friends->usernames[flip_social_friends->index], last_explore_response);
-
-    // handle action
-    switch (action)
-    {
-    case ActionNext:
-        // add friend
-        char add_payload[128];
-        snprintf(add_payload, sizeof(add_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_friends->usernames[flip_social_friends->index]);
-        if (flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/add-friend/", auth_headers, add_payload))
-        {
-            canvas_clear(canvas);
-            flip_social_canvas_draw_explore(canvas, flip_social_friends->usernames[flip_social_friends->index], "Added!");
-
-            // add the friend to the friends list
-            flip_social_friends->usernames[flip_social_friends->count] = flip_social_friends->usernames[flip_social_friends->index];
-            flip_social_friends->count++;
-            if (!flip_social_update_friends())
-            {
-                FURI_LOG_E(TAG, "Failed to update friends");
-            }
-        }
-        action = ActionNone;
-        break;
-    case ActionPrev:
-        // remove friend
-        char remove_payload[128];
-        snprintf(remove_payload, sizeof(remove_payload), "{\"username\":\"%s\",\"friend\":\"%s\"}", app_instance->login_username_logged_in, flip_social_friends->usernames[flip_social_friends->index]);
-        if (flipper_http_post_request_with_headers("https://www.flipsocial.net/api/user/remove-friend/", auth_headers, remove_payload))
-        {
-            canvas_clear(canvas);
-            flip_social_canvas_draw_explore(canvas, flip_social_friends->usernames[flip_social_friends->index], "Removed!");
-
-            // remove the friend from the friends list
-            for (int i = flip_social_friends->index; i < flip_social_friends->count - 1; i++)
-            {
-                flip_social_friends->usernames[i] = flip_social_friends->usernames[i + 1];
-            }
-            flip_social_friends->count--;
-            if (!flip_social_update_friends())
-            {
-                FURI_LOG_E(TAG, "Failed to update friends");
-            }
-        }
-        action = ActionNone;
-        break;
-    case ActionBack:
-        canvas_clear(canvas);
-        flip_social_dialog_stop = true;
-        last_explore_response = "";
-        flip_social_dialog_shown = false;
-        flip_social_friends->index = 0;
-        action = ActionNone;
-        break;
-    default:
-        break;
-    }
-
-    if (flip_social_dialog_stop)
-    {
-        furi_pubsub_unsubscribe(app_instance->input_event_queue, app_instance->input_event);
-        flip_social_dialog_shown = false;
-        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);

+ 0 - 9
draw/flip_social_draw.h

@@ -30,15 +30,6 @@ 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);
 
-// function to draw the dialog canvas
-void flip_social_canvas_draw_explore(Canvas *canvas, char *user_username, char *content);
-
-// Callback function to handle the explore dialog
-void flip_social_callback_draw_explore(Canvas *canvas, void *model);
-
-// Callback function to handle the friends dialog
-void flip_social_callback_draw_friends(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);

+ 1 - 1
explore/flip_social_explore.c

@@ -83,7 +83,7 @@ bool flip_social_get_explore(void)
     return true;
 }
 
-bool flip_social_parse_json_explore(void)
+bool flip_social_parse_json_explore()
 {
     // load the received data from the saved file
     FuriString *user_data = flipper_http_load_from_file(fhttp.file_path);

+ 0 - 10
flip_social.c

@@ -182,16 +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_explore)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInExploreProccess);
-        view_free(app->view_process_explore);
-    }
-    if (app->view_process_friends)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInFriendsProcess);
-        view_free(app->view_process_friends);
-    }
     if (app->view_process_messages)
     {
         view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesProcess);

+ 6 - 5
flip_social.h

@@ -9,7 +9,7 @@
 #include <flip_social_icons.h>
 #define TAG "FlipSocial"
 
-#define MAX_PRE_SAVED_MESSAGES 25 // Maximum number of pre-saved messages
+#define MAX_PRE_SAVED_MESSAGES 20 // Maximum number of pre-saved messages
 #define MAX_MESSAGE_LENGTH 100    // Maximum length of a message in the feed
 #define MAX_EXPLORE_USERS 100     // Maximum number of users to explore
 #define MAX_USER_LENGTH 32        // Maximum length of a username
@@ -141,9 +141,7 @@ typedef enum
     FlipSocialViewLoggedInSignOut, // The view after clicking the sign out button
     //
     FlipSocialViewLoggedInExploreSubmenu,  // The view after clicking the explore button
-    FlipSocialViewLoggedInExploreProccess, // The view after clicking on a user in the explore screen
     FlipSocialViewLoggedInFriendsSubmenu,  // The view after clicking the friends button on the profile screen
-    FlipSocialViewLoggedInFriendsProcess,  // The view after clicking on a friend in the friends 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
     //
@@ -151,6 +149,9 @@ typedef enum
     //
     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
 } FlipSocialView;
 
 // Define the application structure
@@ -172,8 +173,6 @@ typedef struct
 
     View *view_process_feed;     // Dialog for the feed screen
     View *view_process_compose;  // Dialog for the compose screen (delete or send)
-    View *view_process_explore;  // Dialog for the explore screen (view user profile - add or delete friend)
-    View *view_process_friends;  // Dialog for the friends screen (view user profile - add or delete friend)
     View *view_process_messages; // Dialog for the messages screen (next, previous, send message)
 
     VariableItemList *variable_item_list_logged_out_wifi_settings; // The wifi settings menu
@@ -286,6 +285,8 @@ typedef struct
     uint32_t message_user_choice_logged_in_temp_buffer_size; // Size of the message to send to the selected user temporary buffer
 
     Loading *loading; // The loading screen
+    DialogEx *dialog_explore;
+    DialogEx *dialog_friends;
 } FlipSocialApp;
 
 void flip_social_app_free(FlipSocialApp *app);