Просмотр исходного кода

Consolidate text input and organize alloc/free

jblanked 1 год назад
Родитель
Сommit
7bb95f81d0
9 измененных файлов с 531 добавлено и 462 удалено
  1. 220 0
      alloc/alloc.c
  2. 8 0
      alloc/alloc.h
  3. 0 68
      alloc/flip_social_alloc.c
  4. 154 0
      alloc/free.c
  5. 16 0
      alloc/free.h
  6. 125 252
      callback/flip_social_callback.c
  7. 5 4
      callback/flip_social_callback.h
  8. 0 117
      flip_social.c
  9. 3 21
      flip_social.h

+ 220 - 0
alloc/alloc.c

@@ -0,0 +1,220 @@
+#include <alloc/alloc.h>
+void auth_headers_alloc(void)
+{
+    if (!app_instance)
+    {
+        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\"}");
+        return;
+    }
+
+    if (app_instance->login_username_logged_out && app_instance->login_password_logged_out && strlen(app_instance->login_username_logged_out) > 0 && strlen(app_instance->login_password_logged_out) > 0)
+    {
+        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\",\"username\":\"%s\",\"password\":\"%s\"}", app_instance->login_username_logged_out, app_instance->login_password_logged_out);
+    }
+    else if (app_instance->login_username_logged_in && app_instance->change_password_logged_in && strlen(app_instance->login_username_logged_in) > 0 && strlen(app_instance->change_password_logged_in) > 0)
+    {
+        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\",\"username\":\"%s\",\"password\":\"%s\"}", app_instance->login_username_logged_in, app_instance->change_password_logged_in);
+    }
+    else
+    {
+        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\"}");
+    }
+}
+
+FlipSocialFeedMini *flip_feed_info_alloc(void)
+{
+    FlipSocialFeedMini *feed_info = (FlipSocialFeedMini *)malloc(sizeof(FlipSocialFeedMini));
+    if (!feed_info)
+    {
+        FURI_LOG_E(TAG, "Failed to allocate memory for feed_info");
+        return NULL;
+    }
+    feed_info->count = 0;
+    feed_info->index = 0;
+    return feed_info;
+}
+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 ? "Prev" : NULL,
+                flip_social_messages->index != flip_social_messages->count - 1 ? "Next" : NULL,
+                "Create",
+                messages_dialog_callback,
+                flip_social_callback_to_messages_logged_in,
+                &app_instance->view_dispatcher,
+                app_instance))
+        {
+            return false;
+        }
+        return true;
+    }
+    return false;
+}
+
+bool feed_dialog_alloc()
+{
+    if (!flip_feed_item)
+    {
+        FURI_LOG_E(TAG, "Feed item is NULL");
+        return false;
+    }
+    flip_social_free_feed_dialog();
+    if (!app_instance->dialog_feed)
+    {
+        char updated_message[MAX_MESSAGE_LENGTH + 10];
+        snprintf(updated_message, MAX_MESSAGE_LENGTH + 10, "%s (%u %s)", flip_feed_item->message, flip_feed_item->flips, flip_feed_item->flips == 1 ? "flip" : "flips");
+        char *real_message = updated_user_message(updated_message);
+        if (!real_message)
+        {
+            FURI_LOG_E(TAG, "Failed to update the user message");
+            return false;
+        }
+        if (!easy_flipper_set_dialog_ex(
+                &app_instance->dialog_feed,
+                FlipSocialViewFeedDialog,
+                flip_feed_item->username,
+                0,
+                0,
+                updated_message,
+                0,
+                10,
+                flip_feed_info->index != 0 ? "Prev" : NULL,
+                flip_feed_info->index != flip_feed_info->count - 1 ? "Next" : NULL,
+                flip_feed_item->is_flipped ? "Unflip" : "Flip",
+                feed_dialog_callback,
+                flip_social_callback_to_submenu_logged_in,
+                &app_instance->view_dispatcher,
+                app_instance))
+        {
+            free(real_message);
+            return false;
+        }
+        free(real_message);
+        return true;
+    }
+    return false;
+}
+bool alloc_text_input(uint32_t view_id)
+{
+    if (!app_instance)
+    {
+        return false;
+    }
+    if (!app_instance->text_input)
+    {
+        switch (view_id)
+        {
+        case FlipSocialViewLoggedOutWifiSettingsSSIDInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter SSID", app_instance->wifi_ssid_logged_out_temp_buffer, app_instance->wifi_ssid_logged_out_temp_buffer_size, flip_social_logged_out_wifi_settings_ssid_updated, flip_social_callback_to_wifi_settings_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutWifiSettingsPasswordInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Password", app_instance->wifi_password_logged_out_temp_buffer, app_instance->wifi_password_logged_out_temp_buffer_size, flip_social_logged_out_wifi_settings_password_updated, flip_social_callback_to_wifi_settings_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutLoginUsernameInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Username", app_instance->login_username_logged_out_temp_buffer, app_instance->login_username_logged_out_temp_buffer_size, flip_social_logged_out_login_username_updated, flip_social_callback_to_login_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutLoginPasswordInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Password", app_instance->login_password_logged_out_temp_buffer, app_instance->login_password_logged_out_temp_buffer_size, flip_social_logged_out_login_password_updated, flip_social_callback_to_login_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutRegisterUsernameInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Username", app_instance->register_username_logged_out_temp_buffer, app_instance->register_username_logged_out_temp_buffer_size, flip_social_logged_out_register_username_updated, flip_social_callback_to_register_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutRegisterPasswordInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Password", app_instance->register_password_logged_out_temp_buffer, app_instance->register_password_logged_out_temp_buffer_size, flip_social_logged_out_register_password_updated, flip_social_callback_to_register_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedOutRegisterPassword2Input:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Confirm Password", app_instance->register_password_2_logged_out_temp_buffer, app_instance->register_password_2_logged_out_temp_buffer_size, flip_social_logged_out_register_password_2_updated, flip_social_callback_to_register_logged_out, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInChangePasswordInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Password", app_instance->change_password_logged_in_temp_buffer, app_instance->change_password_logged_in_temp_buffer_size, flip_social_logged_in_profile_change_password_updated, flip_social_callback_to_profile_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInChangeBioInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Bio", app_instance->change_bio_logged_in_temp_buffer, app_instance->change_bio_logged_in_temp_buffer_size, flip_social_logged_in_profile_change_bio_updated, flip_social_callback_to_profile_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInComposeAddPreSaveInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Pre-Save Message", app_instance->compose_pre_save_logged_in_temp_buffer, app_instance->compose_pre_save_logged_in_temp_buffer_size, flip_social_logged_in_compose_pre_save_updated, flip_social_callback_to_compose_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInWifiSettingsSSIDInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter SSID", app_instance->wifi_ssid_logged_in_temp_buffer, app_instance->wifi_ssid_logged_in_temp_buffer_size, flip_social_logged_in_wifi_settings_ssid_updated, flip_social_callback_to_wifi_settings_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInWifiSettingsPasswordInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Password", app_instance->wifi_password_logged_in_temp_buffer, app_instance->wifi_password_logged_in_temp_buffer_size, flip_social_logged_in_wifi_settings_password_updated, flip_social_callback_to_wifi_settings_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInMessagesNewMessageInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Message", app_instance->messages_new_message_logged_in_temp_buffer, app_instance->messages_new_message_logged_in_temp_buffer_size, flip_social_logged_in_messages_new_message_updated, flip_social_callback_to_messages_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Message", app_instance->message_user_choice_logged_in_temp_buffer, app_instance->message_user_choice_logged_in_temp_buffer_size, flip_social_logged_in_messages_user_choice_message_updated, flip_social_callback_to_messages_user_choices, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInExploreInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Username or Keyword", app_instance->explore_logged_in_temp_buffer, app_instance->explore_logged_in_temp_buffer_size, flip_social_logged_in_explore_updated, flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        case FlipSocialViewLoggedInMessageUsersInput:
+            if (!easy_flipper_set_uart_text_input(&app_instance->text_input, FlipSocialViewTextInput, "Enter Username or Keyword", app_instance->message_users_logged_in_temp_buffer, app_instance->message_users_logged_in_temp_buffer_size, flip_social_logged_in_message_users_updated, flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher, app_instance))
+            {
+                return false;
+            }
+            break;
+        }
+    }
+    return true;
+}

+ 8 - 0
alloc/alloc.h

@@ -0,0 +1,8 @@
+#pragma once
+#include <flip_social.h>
+#include <callback/flip_social_callback.h>
+#include <alloc/free.h>
+void auth_headers_alloc(void);
+FlipSocialFeedMini *flip_feed_info_alloc(void);
+bool messages_dialog_alloc(bool free_first);
+bool feed_dialog_alloc();

+ 0 - 68
alloc/flip_social_alloc.c

@@ -268,74 +268,6 @@ FlipSocialApp *flip_social_app_alloc()
     app->variable_item_logged_in_wifi_settings_ssid = variable_item_list_add(app->variable_item_list_logged_in_settings_wifi, "SSID", 1, NULL, app);
     app->variable_item_logged_in_wifi_settings_password = variable_item_list_add(app->variable_item_list_logged_in_settings_wifi, "Password", 1, NULL, app);
 
-    // Setup Text Input(s)
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_wifi_settings_ssid, FlipSocialViewLoggedOutWifiSettingsSSIDInput, "Enter SSID", app->wifi_ssid_logged_out_temp_buffer, app->wifi_ssid_logged_out_temp_buffer_size, flip_social_logged_out_wifi_settings_ssid_updated, flip_social_callback_to_wifi_settings_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_wifi_settings_password, FlipSocialViewLoggedOutWifiSettingsPasswordInput, "Enter Password", app->wifi_password_logged_out_temp_buffer, app->wifi_password_logged_out_temp_buffer_size, flip_social_logged_out_wifi_settings_password_updated, flip_social_callback_to_wifi_settings_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_login_username, FlipSocialViewLoggedOutLoginUsernameInput, "Enter Username", app->login_username_logged_out_temp_buffer, app->login_username_logged_out_temp_buffer_size, flip_social_logged_out_login_username_updated, flip_social_callback_to_login_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_login_password, FlipSocialViewLoggedOutLoginPasswordInput, "Enter Password", app->login_password_logged_out_temp_buffer, app->login_password_logged_out_temp_buffer_size, flip_social_logged_out_login_password_updated, flip_social_callback_to_login_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_register_username, FlipSocialViewLoggedOutRegisterUsernameInput, "Enter Username", app->register_username_logged_out_temp_buffer, app->register_username_logged_out_temp_buffer_size, flip_social_logged_out_register_username_updated, flip_social_callback_to_register_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_register_password, FlipSocialViewLoggedOutRegisterPasswordInput, "Enter Password", app->register_password_logged_out_temp_buffer, app->register_password_logged_out_temp_buffer_size, flip_social_logged_out_register_password_updated, flip_social_callback_to_register_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_out_register_password_2, FlipSocialViewLoggedOutRegisterPassword2Input, "Confirm Password", app->register_password_2_logged_out_temp_buffer, app->register_password_2_logged_out_temp_buffer_size, flip_social_logged_out_register_password_2_updated, flip_social_callback_to_register_logged_out, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    //
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_change_password, FlipSocialViewLoggedInChangePasswordInput, "Password", app->change_password_logged_in_temp_buffer, app->change_password_logged_in_temp_buffer_size, flip_social_logged_in_profile_change_password_updated, flip_social_callback_to_profile_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_change_bio, FlipSocialViewLoggedInChangeBioInput, "Bio", app->change_bio_logged_in_temp_buffer, app->change_bio_logged_in_temp_buffer_size, flip_social_logged_in_profile_change_bio_updated, flip_social_callback_to_profile_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_compose_pre_save_input, FlipSocialViewLoggedInComposeAddPreSaveInput, "Enter Pre-Save Message", app->compose_pre_save_logged_in_temp_buffer, app->compose_pre_save_logged_in_temp_buffer_size, flip_social_logged_in_compose_pre_save_updated, flip_social_callback_to_compose_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_wifi_settings_ssid, FlipSocialViewLoggedInWifiSettingsSSIDInput, "Enter SSID", app->wifi_ssid_logged_in_temp_buffer, app->wifi_ssid_logged_in_temp_buffer_size, flip_social_logged_in_wifi_settings_ssid_updated, flip_social_callback_to_wifi_settings_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_wifi_settings_password, FlipSocialViewLoggedInWifiSettingsPasswordInput, "Enter Password", app->wifi_password_logged_in_temp_buffer, app->wifi_password_logged_in_temp_buffer_size, flip_social_logged_in_wifi_settings_password_updated, flip_social_callback_to_wifi_settings_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    //
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_messages_new_message, FlipSocialViewLoggedInMessagesNewMessageInput, "Enter Message", app->messages_new_message_logged_in_temp_buffer, app->messages_new_message_logged_in_temp_buffer_size, flip_social_logged_in_messages_new_message_updated, flip_social_callback_to_messages_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_messages_new_message_user_choices, FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput, "Enter Message", app->message_user_choice_logged_in_temp_buffer, app->message_user_choice_logged_in_temp_buffer_size, flip_social_logged_in_messages_user_choice_message_updated, flip_social_callback_to_messages_user_choices, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_explore, FlipSocialViewLoggedInExploreInput, "Enter Username or Keyword", app->explore_logged_in_temp_buffer, app->explore_logged_in_temp_buffer_size, flip_social_logged_in_explore_updated, flip_social_callback_to_submenu_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-    if (!easy_flipper_set_uart_text_input(&app->text_input_logged_in_message_users, FlipSocialViewLoggedInMessageUsersInput, "Enter Username or Keyword", app->message_users_logged_in_temp_buffer, app->message_users_logged_in_temp_buffer_size, flip_social_logged_in_message_users_updated, flip_social_callback_to_submenu_logged_in, &app->view_dispatcher, app))
-    {
-        return NULL;
-    }
-
     // Load the settings
     if (!load_settings(app->wifi_ssid_logged_out,
                        app->wifi_ssid_logged_out_temp_buffer_size,

+ 154 - 0
alloc/free.c

@@ -0,0 +1,154 @@
+#include <alloc/free.h>
+void free_all()
+{
+    free_text_input();
+    flip_social_free_friends();
+    flip_social_free_messages();
+    flip_social_free_explore();
+    flip_social_free_feed_dialog();
+}
+void free_text_input()
+{
+    if (app_instance->text_input)
+    {
+        uart_text_input_free(app_instance->text_input);
+        app_instance->text_input = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewTextInput);
+    }
+}
+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);
+    }
+}
+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);
+    }
+}
+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;
+    }
+}
+void flip_social_free_compose_dialog()
+{
+    if (app_instance->dialog_compose)
+    {
+        dialog_ex_free(app_instance->dialog_compose);
+        app_instance->dialog_compose = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewComposeDialog);
+    }
+}
+void flip_social_free_feed_dialog()
+{
+    if (app_instance->dialog_feed)
+    {
+        dialog_ex_free(app_instance->dialog_feed);
+        app_instance->dialog_feed = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewFeedDialog);
+    }
+}
+
+bool about_widget_alloc(bool is_logged_in)
+{
+    if (!is_logged_in)
+    {
+        if (!app_instance->widget_logged_out_about)
+        {
+            return easy_flipper_set_widget(&app_instance->widget_logged_out_about, FlipSocialViewLoggedOutAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_submenu_logged_out, &app_instance->view_dispatcher);
+        }
+    }
+    else
+    {
+        if (!app_instance->widget_logged_in_about)
+        {
+            return easy_flipper_set_widget(&app_instance->widget_logged_in_about, FlipSocialViewLoggedInSettingsAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_settings_logged_in, &app_instance->view_dispatcher);
+        }
+    }
+    return true;
+}
+void free_about_widget(bool is_logged_in)
+{
+    if (is_logged_in && app_instance->widget_logged_in_about)
+    {
+        widget_free(app_instance->widget_logged_in_about);
+        app_instance->widget_logged_in_about = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
+    }
+    if (!is_logged_in && app_instance->widget_logged_out_about)
+    {
+        widget_free(app_instance->widget_logged_out_about);
+        app_instance->widget_logged_out_about = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedOutAbout);
+    }
+}
+bool pre_saved_messages_alloc(void)
+{
+    if (!app_instance)
+    {
+        return false;
+    }
+    if (!app_instance->submenu_compose)
+    {
+        if (!easy_flipper_set_submenu(&app_instance->submenu_compose, FlipSocialViewLoggedInCompose, "Create A Post", flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher))
+        {
+            return false;
+        }
+        submenu_reset(app_instance->submenu_compose);
+        submenu_add_item(app_instance->submenu_compose, "Add Pre-Save", FlipSocialSubmenuComposeIndexAddPreSave, flip_social_callback_submenu_choices, app_instance);
+
+        // Load the playlist
+        if (load_playlist(&app_instance->pre_saved_messages))
+        {
+            // Update the playlist submenu
+            for (uint32_t i = 0; i < app_instance->pre_saved_messages.count; i++)
+            {
+                if (app_instance->pre_saved_messages.messages[i][0] != '\0') // Check if the string is not empty
+                {
+                    submenu_add_item(app_instance->submenu_compose, app_instance->pre_saved_messages.messages[i], FlipSocialSubemnuComposeIndexStartIndex + i, flip_social_callback_submenu_choices, app_instance);
+                }
+            }
+        }
+    }
+    return true;
+}
+
+void free_pre_saved_messages(void)
+{
+    if (app_instance->submenu_compose)
+    {
+        submenu_free(app_instance->submenu_compose);
+        app_instance->submenu_compose = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInCompose);
+    }
+}
+
+void flip_social_free_friends(void)
+{
+    if (!flip_social_friends)
+    {
+        return;
+    }
+    free(flip_social_friends);
+    flip_social_friends = NULL;
+    if (app_instance->submenu_friends)
+    {
+        submenu_free(app_instance->submenu_friends);
+        app_instance->submenu_friends = NULL;
+        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInFriendsSubmenu);
+    }
+}

+ 16 - 0
alloc/free.h

@@ -0,0 +1,16 @@
+#pragma once
+#include <flip_social.h>
+#include <callback/flip_social_callback.h>
+void free_all();
+bool alloc_text_input(uint32_t view_id);
+void free_text_input();
+void flip_social_free_explore_dialog();
+void flip_social_free_friends_dialog();
+void flip_social_free_messages_dialog();
+void flip_social_free_compose_dialog();
+void flip_social_free_feed_dialog();
+bool about_widget_alloc(bool is_logged_in);
+void free_about_widget(bool is_logged_in);
+bool pre_saved_messages_alloc(void);
+void free_pre_saved_messages(void);
+void flip_social_free_friends(void);

+ 125 - 252
callback/flip_social_callback.c

@@ -10,104 +10,6 @@
 #define DEV_CRASH()
 #endif
 
-static bool about_widget_alloc(bool is_logged_in)
-{
-    if (!is_logged_in)
-    {
-        if (!app_instance->widget_logged_out_about)
-        {
-            return easy_flipper_set_widget(&app_instance->widget_logged_out_about, FlipSocialViewLoggedOutAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_submenu_logged_out, &app_instance->view_dispatcher);
-        }
-    }
-    else
-    {
-        if (!app_instance->widget_logged_in_about)
-        {
-            return easy_flipper_set_widget(&app_instance->widget_logged_in_about, FlipSocialViewLoggedInSettingsAbout, "Welcome to FlipSocial\n---\nThe social media app for\nFlipper Zero, created by\nJBlanked: www.flipsocial.net\n---\nPress BACK to return.", flip_social_callback_to_settings_logged_in, &app_instance->view_dispatcher);
-        }
-    }
-    return true;
-}
-static void free_about_widget(bool is_logged_in)
-{
-    if (is_logged_in && app_instance->widget_logged_in_about)
-    {
-        widget_free(app_instance->widget_logged_in_about);
-        app_instance->widget_logged_in_about = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
-    }
-    if (!is_logged_in && app_instance->widget_logged_out_about)
-    {
-        widget_free(app_instance->widget_logged_out_about);
-        app_instance->widget_logged_out_about = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedOutAbout);
-    }
-}
-static bool pre_saved_messages_alloc(void)
-{
-    if (!app_instance)
-    {
-        return false;
-    }
-    if (!app_instance->submenu_compose)
-    {
-        if (!easy_flipper_set_submenu(&app_instance->submenu_compose, FlipSocialViewLoggedInCompose, "Create A Post", flip_social_callback_to_submenu_logged_in, &app_instance->view_dispatcher))
-        {
-            return false;
-        }
-        submenu_reset(app_instance->submenu_compose);
-        submenu_add_item(app_instance->submenu_compose, "Add Pre-Save", FlipSocialSubmenuComposeIndexAddPreSave, flip_social_callback_submenu_choices, app_instance);
-
-        // Load the playlist
-        if (load_playlist(&app_instance->pre_saved_messages))
-        {
-            // Update the playlist submenu
-            for (uint32_t i = 0; i < app_instance->pre_saved_messages.count; i++)
-            {
-                if (app_instance->pre_saved_messages.messages[i][0] != '\0') // Check if the string is not empty
-                {
-                    submenu_add_item(app_instance->submenu_compose, app_instance->pre_saved_messages.messages[i], FlipSocialSubemnuComposeIndexStartIndex + i, flip_social_callback_submenu_choices, app_instance);
-                }
-            }
-        }
-    }
-    return true;
-}
-
-static void free_pre_saved_messages(void)
-{
-    if (app_instance->submenu_compose)
-    {
-        submenu_free(app_instance->submenu_compose);
-        app_instance->submenu_compose = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInCompose);
-    }
-    // for (uint32_t i = 0; i < app_instance->pre_saved_messages.count; i++)
-    // {
-    //     if (app_instance->pre_saved_messages.messages[i])
-    //     {
-    //         free(app_instance->pre_saved_messages.messages[i]);
-    //         app_instance->pre_saved_messages.messages[i] = NULL;
-    //     }
-    // }
-}
-
-static void flip_social_free_friends(void)
-{
-    if (!flip_social_friends)
-    {
-        return;
-    }
-    free(flip_social_friends);
-    flip_social_friends = NULL;
-    if (app_instance->submenu_friends)
-    {
-        submenu_free(app_instance->submenu_friends);
-        app_instance->submenu_friends = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewLoggedInFriendsSubmenu);
-    }
-}
-
 static void flip_social_request_error_draw(Canvas *canvas)
 {
     if (canvas == NULL)
@@ -334,53 +236,6 @@ 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);
-    }
-}
-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;
-    }
-}
-static void flip_social_free_compose_dialog()
-{
-    if (app_instance->dialog_compose)
-    {
-        dialog_ex_free(app_instance->dialog_compose);
-        app_instance->dialog_compose = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewComposeDialog);
-    }
-}
-static void flip_social_free_feed_dialog()
-{
-    if (app_instance->dialog_feed)
-    {
-        dialog_ex_free(app_instance->dialog_feed);
-        app_instance->dialog_feed = NULL;
-        view_dispatcher_remove_view(app_instance->view_dispatcher, FlipSocialViewFeedDialog);
-    }
-}
-
 /**
  * @brief Navigation callback to go back to the submenu Logged in.
  * @param context The context - unused
@@ -542,13 +397,6 @@ uint32_t flip_social_callback_to_messages_user_choices(void *context)
     return FlipSocialViewLoggedInMessagesUserChoices;
 }
 
-static void free_flip_social_group()
-{
-    flip_social_free_messages();
-    flip_social_free_explore();
-    flip_social_free_feed_dialog();
-}
-
 /**
  * @brief Navigation callback for exiting the application
  * @param context The context - unused
@@ -558,8 +406,8 @@ uint32_t flip_social_callback_exit_app(void *context)
 {
     // Exit the application
     UNUSED(context);
-    free_flip_social_group();
-    free_pre_saved_messages();
+    free_all();
+
     return VIEW_NONE; // Return VIEW_NONE to exit the app
 }
 
@@ -615,7 +463,7 @@ static void friends_dialog_callback(DialogExResult result, void *context)
         }
     }
 }
-static void messages_dialog_callback(DialogExResult result, void *context)
+void messages_dialog_callback(DialogExResult result, void *context)
 {
     furi_assert(context);
     FlipSocialApp *app = (FlipSocialApp *)context;
@@ -663,40 +511,14 @@ static void messages_dialog_callback(DialogExResult result, void *context)
     }
     else if (result == DialogExResultCenter) // new message
     {
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesNewMessageInput);
-    }
-}
-
-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 ? "Prev" : NULL,
-                flip_social_messages->index != flip_social_messages->count - 1 ? "Next" : NULL,
-                "Create",
-                messages_dialog_callback,
-                flip_social_callback_to_messages_logged_in,
-                &app_instance->view_dispatcher,
-                app_instance))
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedInMessagesNewMessageInput))
         {
-            return false;
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
         }
-        return true;
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
     }
-    return false;
 }
 
 static void compose_dialog_callback(DialogExResult result, void *context)
@@ -802,7 +624,7 @@ static void compose_dialog_callback(DialogExResult result, void *context)
         }
     }
 }
-static void feed_dialog_callback(DialogExResult result, void *context)
+void feed_dialog_callback(DialogExResult result, void *context)
 {
     furi_assert(context);
     FlipSocialApp *app = (FlipSocialApp *)context;
@@ -918,7 +740,7 @@ static void feed_dialog_callback(DialogExResult result, void *context)
     }
 }
 
-static char *updated_user_message(const char *user_message)
+char *updated_user_message(const char *user_message)
 {
     if (user_message == NULL)
     {
@@ -1001,49 +823,6 @@ static char *updated_user_message(const char *user_message)
     return updated_message;
 }
 
-bool feed_dialog_alloc()
-{
-    if (!flip_feed_item)
-    {
-        FURI_LOG_E(TAG, "Feed item is NULL");
-        return false;
-    }
-    flip_social_free_feed_dialog();
-    if (!app_instance->dialog_feed)
-    {
-        char updated_message[MAX_MESSAGE_LENGTH + 10];
-        snprintf(updated_message, MAX_MESSAGE_LENGTH + 10, "%s (%u %s)", flip_feed_item->message, flip_feed_item->flips, flip_feed_item->flips == 1 ? "flip" : "flips");
-        char *real_message = updated_user_message(updated_message);
-        if (!real_message)
-        {
-            FURI_LOG_E(TAG, "Failed to update the user message");
-            return false;
-        }
-        if (!easy_flipper_set_dialog_ex(
-                &app_instance->dialog_feed,
-                FlipSocialViewFeedDialog,
-                flip_feed_item->username,
-                0,
-                0,
-                updated_message,
-                0,
-                10,
-                flip_feed_info->index != 0 ? "Prev" : NULL,
-                flip_feed_info->index != flip_feed_info->count - 1 ? "Next" : NULL,
-                flip_feed_item->is_flipped ? "Unflip" : "Flip",
-                feed_dialog_callback,
-                flip_social_callback_to_submenu_logged_in,
-                &app_instance->view_dispatcher,
-                app_instance))
-        {
-            free(real_message);
-            return false;
-        }
-        free(real_message);
-        return true;
-    }
-    return false;
-}
 static bool flip_social_get_user_info()
 {
     if (!flipper_http_init(flipper_http_rx_callback, app_instance))
@@ -1136,7 +915,7 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInProfile);
         break;
     case FlipSocialSubmenuLoggedInIndexMessages:
-        free_flip_social_group();
+        free_all();
         flipper_http_loading_task(
             flip_social_get_message_users,         // get the message users
             flip_social_parse_json_message_users,  // parse the message users
@@ -1148,20 +927,24 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInMessageUsersInput);
         break;
     case FlipSocialSubmenuLoggedInIndexFeed:
-        free_flip_social_group();
+        free_all();
         if (!flip_social_load_initial_feed(true))
         {
             FURI_LOG_E(TAG, "Failed to load the initial feed");
             return;
         }
-        free_pre_saved_messages();
         break;
     case FlipSocialSubmenuExploreIndex:
-        free_flip_social_group();
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInExploreInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedInExploreInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case FlipSocialSubmenuLoggedInIndexCompose:
-        free_pre_saved_messages();
+        free_all();
         if (!pre_saved_messages_alloc())
         {
             FURI_LOG_E(TAG, "Failed to allocate pre-saved messages");
@@ -1173,7 +956,7 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSettings);
         break;
     case FlipSocialSubmenuLoggedInSignOutButton:
-        free_flip_social_group();
+        free_all();
         app->is_logged_in = "false";
 
         save_settings(app->wifi_ssid_logged_out, app->wifi_password_logged_out, app->login_username_logged_out, app->login_username_logged_in, app->login_password_logged_out, app->change_password_logged_in, app->change_bio_logged_in, app->is_logged_in);
@@ -1181,7 +964,13 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutSubmenu);
         break;
     case FlipSocialSubmenuComposeIndexAddPreSave:
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInComposeAddPreSaveInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedInComposeAddPreSaveInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     default:
         // Handle the pre-saved message selection (has a max of 25 items)
@@ -1357,7 +1146,13 @@ void flip_social_callback_submenu_choices(void *context, uint32_t index)
                 return;
             }
             flip_social_explore->index = index - FlipSocialSubmenuLoggedInIndexMessagesUserChoicesIndexStart;
-            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput);
+            free_all();
+            if (!alloc_text_input(FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput))
+            {
+                FURI_LOG_E(TAG, "Failed to allocate text input");
+                return;
+            }
+            view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         }
         else
         {
@@ -1475,10 +1270,24 @@ void flip_social_text_input_logged_out_wifi_settings_item_selected(void *context
     switch (index)
     {
     case 0: // Input SSID
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsSSIDInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsSSIDInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutWifiSettingsSSIDInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 1: // Input Password
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsPasswordInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsPasswordInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutWifiSettingsPasswordInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     default:
         FURI_LOG_E(TAG, "Unknown configuration item index");
@@ -1575,10 +1384,24 @@ void flip_social_text_input_logged_out_login_item_selected(void *context, uint32
     switch (index)
     {
     case 0: // Input Username
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginUsernameInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginUsernameInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutLoginUsernameInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 1: // Input Password
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginPasswordInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginPasswordInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutLoginPasswordInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 2: // Login Button
         flip_social_login_switch_to_view(app);
@@ -1690,13 +1513,34 @@ void flip_social_text_input_logged_out_register_item_selected(void *context, uin
     switch (index)
     {
     case 0: // Input Username
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterUsernameInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterUsernameInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutRegisterUsernameInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 1: // Input Password
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPasswordInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPasswordInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutRegisterPasswordInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 2: // Input Password 2
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPassword2Input);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPassword2Input);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedOutRegisterPassword2Input))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 3: // Register button
         flip_social_register_switch_to_view(app);
@@ -1815,10 +1659,23 @@ void flip_social_text_input_logged_in_wifi_settings_item_selected(void *context,
     switch (index)
     {
     case 0: // Input SSID
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsSSIDInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsSSIDInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedInWifiSettingsSSIDInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input for SSID");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 1: // Input Password
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsPasswordInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsPasswordInput);
+        free_all();
+        if (!alloc_text_input(FlipSocialViewLoggedInWifiSettingsPasswordInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input for Password");
+            return;
+        }
         break;
     default:
         FURI_LOG_E(TAG, "Unknown configuration item index");
@@ -2026,14 +1883,28 @@ void flip_social_text_input_logged_in_profile_item_selected(void *context, uint3
         // do nothing since username cannot be changed
         break;
     case 1: // Change Password
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInChangePasswordInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInChangePasswordInput);
+        free_text_input();
+        if (!alloc_text_input(FlipSocialViewLoggedInChangePasswordInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input for change password");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 2: // Change Bio
-        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInChangeBioInput);
+        // view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInChangeBioInput);
+        free_text_input();
+        if (!alloc_text_input(FlipSocialViewLoggedInChangeBioInput))
+        {
+            FURI_LOG_E(TAG, "Failed to allocate text input for change bio");
+            return;
+        }
+        view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewTextInput);
         break;
     case 3: // Friends
         flip_social_free_friends();
-        free_flip_social_group();
+        free_all();
         if (!app->submenu_friends)
         {
             if (!easy_flipper_set_submenu(&app->submenu_friends, FlipSocialViewLoggedInFriendsSubmenu, "Friends", flip_social_callback_to_profile_logged_in, &app->view_dispatcher))
@@ -2072,6 +1943,7 @@ void flip_social_text_input_logged_in_settings_item_selected(void *context, uint
     switch (index)
     {
     case 0: // About
+        free_all();
         if (!about_widget_alloc(true))
         {
             return;
@@ -2079,6 +1951,7 @@ void flip_social_text_input_logged_in_settings_item_selected(void *context, uint
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSettingsAbout);
         break;
     case 1: // Wifi
+        free_all();
         view_dispatcher_switch_to_view(app->view_dispatcher, FlipSocialViewLoggedInSettingsWifi);
         break;
     default:

+ 5 - 4
callback/flip_social_callback.h

@@ -7,6 +7,8 @@
 #include <explore/flip_social_explore.h>
 #include <feed/flip_social_feed.h>
 #include <flip_storage/flip_social_storage.h>
+#include <alloc/free.h>
+#include <alloc/alloc.h>
 
 /**
  * @brief Navigation callback to go back to the submenu Logged out.
@@ -296,9 +298,8 @@ void flip_social_loader_draw_callback(Canvas *canvas, void *model);
 void flip_social_loader_init(View *view);
 
 void flip_social_loader_free_model(View *view);
-
+char *updated_user_message(const char *user_message);
 bool flip_social_custom_event_callback(void *context, uint32_t index);
-
-bool messages_dialog_alloc(bool free_first);
-bool feed_dialog_alloc();
+void messages_dialog_callback(DialogExResult result, void *context);
+void feed_dialog_callback(DialogExResult result, void *context);
 #endif

+ 0 - 117
flip_social.c

@@ -90,88 +90,6 @@ void flip_social_app_free(FlipSocialApp *app)
         variable_item_list_free(app->variable_item_list_logged_in_settings_wifi);
     }
 
-    // Free Text Input(s)
-    if (app->text_input_logged_out_wifi_settings_ssid)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsSSIDInput);
-        uart_text_input_free(app->text_input_logged_out_wifi_settings_ssid);
-    }
-    if (app->text_input_logged_out_wifi_settings_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutWifiSettingsPasswordInput);
-        uart_text_input_free(app->text_input_logged_out_wifi_settings_password);
-    }
-    if (app->text_input_logged_out_login_username)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginUsernameInput);
-        uart_text_input_free(app->text_input_logged_out_login_username);
-    }
-    if (app->text_input_logged_out_login_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutLoginPasswordInput);
-        uart_text_input_free(app->text_input_logged_out_login_password);
-    }
-    if (app->text_input_logged_out_register_username)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterUsernameInput);
-        uart_text_input_free(app->text_input_logged_out_register_username);
-    }
-    if (app->text_input_logged_out_register_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPasswordInput);
-        uart_text_input_free(app->text_input_logged_out_register_password);
-    }
-    if (app->text_input_logged_out_register_password_2)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedOutRegisterPassword2Input);
-        uart_text_input_free(app->text_input_logged_out_register_password_2);
-    }
-    if (app->text_input_logged_in_change_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInChangePasswordInput);
-        uart_text_input_free(app->text_input_logged_in_change_password);
-    }
-    if (app->text_input_logged_in_change_bio)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInChangeBioInput);
-        uart_text_input_free(app->text_input_logged_in_change_bio);
-    }
-    if (app->text_input_logged_in_compose_pre_save_input)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInComposeAddPreSaveInput);
-        uart_text_input_free(app->text_input_logged_in_compose_pre_save_input);
-    }
-    if (app->text_input_logged_in_wifi_settings_ssid)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsSSIDInput);
-        uart_text_input_free(app->text_input_logged_in_wifi_settings_ssid);
-    }
-    if (app->text_input_logged_in_wifi_settings_password)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInWifiSettingsPasswordInput);
-        uart_text_input_free(app->text_input_logged_in_wifi_settings_password);
-    }
-    if (app->text_input_logged_in_messages_new_message)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesNewMessageInput);
-        uart_text_input_free(app->text_input_logged_in_messages_new_message);
-    }
-    if (app->text_input_logged_in_messages_new_message_user_choices)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessagesNewMessageUserChoicesInput);
-        uart_text_input_free(app->text_input_logged_in_messages_new_message_user_choices);
-    }
-    if (app->text_input_logged_in_explore)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInExploreInput);
-        uart_text_input_free(app->text_input_logged_in_explore);
-    }
-    if (app->text_input_logged_in_message_users)
-    {
-        view_dispatcher_remove_view(app->view_dispatcher, FlipSocialViewLoggedInMessageUsersInput);
-        uart_text_input_free(app->text_input_logged_in_message_users);
-    }
-
     // Free Widget(s)
     if (app->widget_result)
     {
@@ -269,41 +187,6 @@ void flip_social_app_free(FlipSocialApp *app)
         free(app_instance);
 }
 
-void auth_headers_alloc(void)
-{
-    if (!app_instance)
-    {
-        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\"}");
-        return;
-    }
-
-    if (app_instance->login_username_logged_out && app_instance->login_password_logged_out && strlen(app_instance->login_username_logged_out) > 0 && strlen(app_instance->login_password_logged_out) > 0)
-    {
-        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\",\"username\":\"%s\",\"password\":\"%s\"}", app_instance->login_username_logged_out, app_instance->login_password_logged_out);
-    }
-    else if (app_instance->login_username_logged_in && app_instance->change_password_logged_in && strlen(app_instance->login_username_logged_in) > 0 && strlen(app_instance->change_password_logged_in) > 0)
-    {
-        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\",\"username\":\"%s\",\"password\":\"%s\"}", app_instance->login_username_logged_in, app_instance->change_password_logged_in);
-    }
-    else
-    {
-        snprintf(auth_headers, sizeof(auth_headers), "{\"Content-Type\":\"application/json\"}");
-    }
-}
-
-FlipSocialFeedMini *flip_feed_info_alloc(void)
-{
-    FlipSocialFeedMini *feed_info = (FlipSocialFeedMini *)malloc(sizeof(FlipSocialFeedMini));
-    if (!feed_info)
-    {
-        FURI_LOG_E(TAG, "Failed to allocate memory for feed_info");
-        return NULL;
-    }
-    feed_info->count = 0;
-    feed_info->index = 0;
-    return feed_info;
-}
-
 void flip_feed_info_free(void)
 {
     if (!flip_feed_info)

+ 3 - 21
flip_social.h

@@ -158,6 +158,8 @@ typedef enum
     FlipSocialViewMessagesDialog, // The dialog for the messages screen
     FlipSocialViewComposeDialog,  // The dialog for the compose screen
     FlipSocialViewFeedDialog,     // The dialog for the feed screen
+    //
+    FlipSocialViewTextInput, // The text input screen
 } FlipSocialView;
 
 // Define the application structure
@@ -185,25 +187,7 @@ typedef struct
     VariableItemList *variable_item_list_logged_in_settings;      // The settings menu
     VariableItemList *variable_item_list_logged_in_settings_wifi; // The wifi settings menu
 
-    UART_TextInput *text_input_logged_out_wifi_settings_ssid;     // Text input for ssid input on wifi settings screen
-    UART_TextInput *text_input_logged_out_wifi_settings_password; // Text input for password input on wifi settings screen
-    UART_TextInput *text_input_logged_out_login_username;         // Text input for username input on login screen
-    UART_TextInput *text_input_logged_out_login_password;         // Text input for password input on login screen
-    UART_TextInput *text_input_logged_out_register_username;      // Text input for username input on register screen
-    UART_TextInput *text_input_logged_out_register_password;      // Text input for password input on register screen
-    UART_TextInput *text_input_logged_out_register_password_2;    // Text input for password 2 input on register screen
-    //
-    UART_TextInput *text_input_logged_in_change_password;        // Text input for password input on change password screen
-    UART_TextInput *text_input_logged_in_change_bio;             // Text input for bio input on profile screen
-    UART_TextInput *text_input_logged_in_compose_pre_save_input; // Text input for pre save input on compose screen
-    UART_TextInput *text_input_logged_in_wifi_settings_ssid;     // Text input for ssid input on wifi settings screen
-    UART_TextInput *text_input_logged_in_wifi_settings_password; // Text input for password input on wifi settings screen
-    //
-    UART_TextInput *text_input_logged_in_messages_new_message;              // Text input for new message input on messages screen
-    UART_TextInput *text_input_logged_in_messages_new_message_user_choices; //
-    //
-    UART_TextInput *text_input_logged_in_explore; // Text input for explore input on explore screen
-    UART_TextInput *text_input_logged_in_message_users;
+    UART_TextInput *text_input; // The text input
 
     VariableItem *variable_item_logged_out_wifi_settings_ssid;     // Reference to the ssid configuration item
     VariableItem *variable_item_logged_out_wifi_settings_password; // Reference to the password configuration item
@@ -331,7 +315,5 @@ extern bool flip_social_send_message;
 extern char *selected_message;
 extern char auth_headers[256];
 
-void auth_headers_alloc(void);
-FlipSocialFeedMini *flip_feed_info_alloc(void);
 void flip_feed_info_free(void);
 #endif