2121#include "segments/segment_layer.h"
2222#include "../util/thinking_layer.h"
2323#include "../util/style.h"
24+ #include "../util/action_menu_crimes.h"
2425#include "../vibes/haptic_feedback.h"
2526
2627#include <pebble.h>
@@ -49,6 +50,7 @@ struct SessionWindow {
4950 AppTimer * timeout_handle ;
5051 int timeout ;
5152 char * starting_prompt ;
53+ char * last_prompt_label ;
5254};
5355
5456static void prv_window_load (Window * window );
@@ -68,6 +70,7 @@ static void prv_refresh_timeout(SessionWindow* sw);
6870static void prv_timed_out (void * ctx );
6971static void prv_cancel_timeout (SessionWindow * sw );
7072static void prv_action_menu_query (ActionMenu * action_menu , const ActionMenuItem * action , void * context );
73+ static void prv_action_menu_input (ActionMenu * action_menu , const ActionMenuItem * action , void * context );
7174static void prv_action_menu_report_thread (ActionMenu * action_menu , const ActionMenuItem * action , void * context );
7275
7376void session_window_push (int timeout , char * starting_prompt ) {
@@ -373,28 +376,51 @@ static void prv_select_clicked(ClickRecognizerRef recognizer, void *context) {
373376}
374377
375378static void prv_destroy_action_menu (ActionMenu * action_menu , const ActionMenuItem * item , void * context ) {
379+ SessionWindow * sw = context ;
376380 action_menu_hierarchy_destroy (action_menu_get_root_level (action_menu ), NULL , NULL );
381+ if (sw -> last_prompt_label ) {
382+ free (sw -> last_prompt_label );
383+ sw -> last_prompt_label = NULL ;
384+ }
377385}
378386
379387static void prv_select_long_pressed (ClickRecognizerRef recognizer , void * context ) {
380388 SessionWindow * sw = context ;
381389 if (!conversation_is_idle (conversation_manager_get_conversation (sw -> manager ))) {
382390 return ;
383391 }
384- ActionMenuLevel * action_menu = action_menu_level_create (2 );
385- action_menu_level_add_action (action_menu , "Prompt" , prv_action_menu_query , sw );
386- action_menu_level_add_action (action_menu , "Report conversation" , prv_action_menu_report_thread , sw );
392+ ActionMenuLevel * action_menu = action_menu_level_create (5 );
393+ action_menu_level_add_action (action_menu , "\"Yes.\"" , prv_action_menu_input , "Yes." );
394+ action_menu_level_add_action (action_menu , "\"No.\"" , prv_action_menu_input , "No." );
395+ Conversation * conversation = conversation_manager_get_conversation (sw -> manager );
396+ ConversationEntry * entry = conversation_peek (conversation );
397+ EntryType type = conversation_entry_get_type (entry );
398+ int separator_index = 3 ;
399+ if (type == EntryTypeError ) {
400+ ConversationEntry * last_prompt = conversation_get_last_of_type (conversation , EntryTypePrompt );
401+ if (last_prompt != NULL ) {
402+ ConversationPrompt * prompt = conversation_entry_get_prompt (last_prompt );
403+ sw -> last_prompt_label = malloc (strlen (prompt -> prompt ) + 3 );
404+ snprintf (sw -> last_prompt_label , strlen (prompt -> prompt ) + 3 , "\"%s\"" , prompt -> prompt );
405+ action_menu_level_add_action (action_menu , sw -> last_prompt_label , prv_action_menu_input , prompt -> prompt );
406+ separator_index ++ ;
407+ }
408+ }
409+ action_menu_level_add_action (action_menu , "Dictate" , prv_action_menu_query , NULL );
410+ action_menu_level_set_separator_index (action_menu , separator_index );
411+ action_menu_level_add_action (action_menu , "Report conversation" , prv_action_menu_report_thread , NULL );
387412 ActionMenuConfig config = (ActionMenuConfig ) {
388413 .root_level = action_menu ,
389414 .colors = {
390415 .background = BRANDED_BACKGROUND_COLOUR ,
391416 .foreground = gcolor_legible_over (BRANDED_BACKGROUND_COLOUR ),
392417 },
393- .align = ActionMenuAlignCenter ,
418+ .align = ActionMenuAlignTop ,
394419 .context = sw ,
395420 .did_close = prv_destroy_action_menu ,
396421 };
397422 vibe_haptic_feedback ();
423+ sw -> query_time = time (NULL );
398424 action_menu_open (& config );
399425}
400426
@@ -403,6 +429,14 @@ static void prv_action_menu_query(ActionMenu *action_menu, const ActionMenuItem
403429 dictation_session_start (sw -> dictation );
404430}
405431
432+
433+ static void prv_action_menu_input (ActionMenu * action_menu , const ActionMenuItem * action , void * context ) {
434+ SessionWindow * sw = context ;
435+ const char * input = action_menu_item_get_action_data (action );
436+ conversation_manager_add_input (sw -> manager , input );
437+ sw -> query_time = time (NULL );
438+ }
439+
406440static void prv_action_menu_report_thread (ActionMenu * action_menu , const ActionMenuItem * action , void * context ) {
407441 SessionWindow * sw = context ;
408442 report_window_push (conversation_get_thread_id (conversation_manager_get_conversation (sw -> manager )));
0 commit comments