Parcourir la source

Optimized back button behavior

Sandro Kalatozishvili il y a 2 ans
Parent
commit
2921c9ed34

BIN
assets/Hold_Text_17x4.png


+ 4 - 4
views/xremote_common_view.c

@@ -120,10 +120,10 @@ void xremote_canvas_draw_icon(Canvas* canvas, uint8_t x, uint8_t y, XRemoteIcon
     else if (icon == XRemoteIconBack)
     else if (icon == XRemoteIconBack)
     {
     {
         canvas_draw_triangle(canvas, x - 4, y - 2, 5, 3, CanvasDirectionRightToLeft);
         canvas_draw_triangle(canvas, x - 4, y - 2, 5, 3, CanvasDirectionRightToLeft);
-        canvas_draw_line(canvas, x + 1, y - 2, x - 5, y - 2);
-        canvas_draw_line(canvas, x + 1, y + 3, x - 3, y + 3);
-        canvas_draw_line(canvas, x + 3, y + 1, x + 2, y + 2);
-        canvas_draw_line(canvas, x + 3, y, x + 2, y - 1);
+        canvas_draw_line(canvas, x + 2, y + 1, x + 1, y + 2);
+        canvas_draw_line(canvas, x + 2, y, x + 1, y - 1);
+        canvas_draw_line(canvas, x, y - 2, x - 5, y - 2);
+        canvas_draw_line(canvas, x, y + 3, x - 3, y + 3);
     }
     }
     else if (icon == XRemoteIconArrowUp)
     else if (icon == XRemoteIconArrowUp)
     {
     {

+ 17 - 6
views/xremote_navigation_view.c

@@ -21,11 +21,10 @@ static void xremote_navigation_view_draw_callback(Canvas* canvas, void* context)
     xremote_canvas_draw_button(canvas, model->left_pressed, 2, 51, XRemoteIconArrowLeft);
     xremote_canvas_draw_button(canvas, model->left_pressed, 2, 51, XRemoteIconArrowLeft);
     xremote_canvas_draw_button(canvas, model->right_pressed, 44, 51, XRemoteIconArrowRight);
     xremote_canvas_draw_button(canvas, model->right_pressed, 44, 51, XRemoteIconArrowRight);
     xremote_canvas_draw_button(canvas, model->ok_pressed, 23, 51, XRemoteIconOk);
     xremote_canvas_draw_button(canvas, model->ok_pressed, 23, 51, XRemoteIconOk);
+    xremote_canvas_draw_button(canvas, model->back_pressed, 2, 95, XRemoteIconBack);
 
 
-    if (app_ctx && app_ctx->app_settings->exit_behavior == XRemoteAppExitHold)
-        xremote_canvas_draw_button_wide(canvas, model->back_pressed, 0, 95, "Back", XRemoteIconBack);
-    else
-        xremote_canvas_draw_button_wide(canvas, model->back_pressed, 0, 95, "Hold", XRemoteIconBack);
+    if (app_ctx->app_settings->exit_behavior == XRemoteAppExitPress)
+        canvas_draw_icon(canvas, 22, 107, &I_Hold_Text_17x4);
 
 
     xremote_canvas_draw_exit_footer(canvas, xremote_app_context_get_exit_str(app_ctx));
     xremote_canvas_draw_exit_footer(canvas, xremote_app_context_get_exit_str(app_ctx));
 }
 }
@@ -36,7 +35,9 @@ static void xremote_navigation_view_process(XRemoteView* view, InputEvent* event
         xremote_view_get_view(view),
         xremote_view_get_view(view),
         XRemoteViewModel* model,
         XRemoteViewModel* model,
         {
         {
-            model->context = xremote_view_get_app_context(view);
+            XRemoteAppContext* app_ctx = xremote_view_get_app_context(view);
+            XRemoteAppExit exit = app_ctx->app_settings->exit_behavior;
+            model->context = app_ctx;
 
 
             if (event->type == InputTypePress)
             if (event->type == InputTypePress)
             {
             {
@@ -65,7 +66,17 @@ static void xremote_navigation_view_process(XRemoteView* view, InputEvent* event
                     model->ok_pressed = true;
                     model->ok_pressed = true;
                     xremote_view_send_ir(view, XREMOTE_COMMAND_OK);
                     xremote_view_send_ir(view, XREMOTE_COMMAND_OK);
                 }
                 }
-                else if (event->key == InputKeyBack)
+            }
+            else if (event->type == InputTypeShort &&
+                    event->key == InputKeyBack &&
+                    exit == XRemoteAppExitHold)
+            {
+                model->back_pressed = true;
+                xremote_view_send_ir(view, XREMOTE_COMMAND_BACK);
+            }
+            else if (event->type == InputTypeLong)
+            {
+                if (event->key == InputKeyBack && exit == XRemoteAppExitPress)
                 {
                 {
                     model->back_pressed = true;
                     model->back_pressed = true;
                     xremote_view_send_ir(view, XREMOTE_COMMAND_BACK);
                     xremote_view_send_ir(view, XREMOTE_COMMAND_BACK);

+ 17 - 11
views/xremote_player_view.c

@@ -21,16 +21,10 @@ static void xremote_player_view_draw_callback(Canvas* canvas, void* context)
     xremote_canvas_draw_button(canvas, model->ok_pressed, 23, 51, XRemoteIconPlayPause);
     xremote_canvas_draw_button(canvas, model->ok_pressed, 23, 51, XRemoteIconPlayPause);
     xremote_canvas_draw_button(canvas, model->left_pressed, 2, 51, XRemoteIconFastBackward);
     xremote_canvas_draw_button(canvas, model->left_pressed, 2, 51, XRemoteIconFastBackward);
     xremote_canvas_draw_button(canvas, model->right_pressed, 44, 51, XRemoteIconFastForward);
     xremote_canvas_draw_button(canvas, model->right_pressed, 44, 51, XRemoteIconFastForward);
+    xremote_canvas_draw_button(canvas, model->back_pressed, 2, 95, XRemoteIconStop);
 
 
-    if (app_ctx->app_settings->exit_behavior == XRemoteAppExitHold)
-    {
-        xremote_canvas_draw_button(canvas, model->back_pressed, 2, 95, XRemoteIconStop);
-    }
-    else
-    {
-        xremote_canvas_draw_button_wide(canvas, model->back_pressed, 2, 95, "Hold", XRemoteIconStop);
-        xremote_canvas_draw_icon(canvas, 50, 102, XRemoteIconBack);
-    }
+    if (app_ctx->app_settings->exit_behavior == XRemoteAppExitPress)
+        canvas_draw_icon(canvas, 22, 107, &I_Hold_Text_17x4);
 
 
     xremote_canvas_draw_exit_footer(canvas, xremote_app_context_get_exit_str(app_ctx));
     xremote_canvas_draw_exit_footer(canvas, xremote_app_context_get_exit_str(app_ctx));
 }
 }
@@ -41,7 +35,9 @@ static void xremote_player_view_process(XRemoteView* view, InputEvent* event)
         xremote_view_get_view(view),
         xremote_view_get_view(view),
         XRemoteViewModel* model,
         XRemoteViewModel* model,
         {
         {
-            model->context = xremote_view_get_app_context(view);
+            XRemoteAppContext* app_ctx = xremote_view_get_app_context(view);
+            XRemoteAppExit exit = app_ctx->app_settings->exit_behavior;
+            model->context = app_ctx;
 
 
             if (event->type == InputTypePress)
             if (event->type == InputTypePress)
             {
             {
@@ -70,7 +66,17 @@ static void xremote_player_view_process(XRemoteView* view, InputEvent* event)
                     model->ok_pressed = true;
                     model->ok_pressed = true;
                     xremote_view_send_ir(view, XREMOTE_COMMAND_PLAY_PAUSE);
                     xremote_view_send_ir(view, XREMOTE_COMMAND_PLAY_PAUSE);
                 }
                 }
-                else if (event->key == InputKeyBack)
+            }
+            else if (event->type == InputTypeShort &&
+                    event->key == InputKeyBack &&
+                    exit == XRemoteAppExitHold)
+            {
+                model->back_pressed = true;
+                xremote_view_send_ir(view, XREMOTE_COMMAND_STOP);
+            }
+            else if (event->type == InputTypeLong)
+            {
+                if (event->key == InputKeyBack && exit == XRemoteAppExitPress)
                 {
                 {
                     model->back_pressed = true;
                     model->back_pressed = true;
                     xremote_view_send_ir(view, XREMOTE_COMMAND_STOP);
                     xremote_view_send_ir(view, XREMOTE_COMMAND_STOP);

+ 1 - 1
xremote.h

@@ -10,6 +10,6 @@
 
 
 #define XREMOTE_VERSION_MAJOR  0
 #define XREMOTE_VERSION_MAJOR  0
 #define XREMOTE_VERSION_MINOR  9
 #define XREMOTE_VERSION_MINOR  9
-#define XREMOTE_BUILD_NUMBER   19
+#define XREMOTE_BUILD_NUMBER   20
 
 
 void xremote_get_version(char *version, size_t length);
 void xremote_get_version(char *version, size_t length);

+ 1 - 1
xremote_app.c

@@ -16,7 +16,7 @@ XRemoteAppSettings* xremote_app_settings_alloc()
 {
 {
     XRemoteAppSettings* settings = malloc(sizeof(XRemoteAppSettings));
     XRemoteAppSettings* settings = malloc(sizeof(XRemoteAppSettings));
     settings->orientation = ViewOrientationHorizontal;
     settings->orientation = ViewOrientationHorizontal;
-    settings->exit_behavior = XRemoteAppExitHold;
+    settings->exit_behavior = XRemoteAppExitPress;
     settings->repeat_count = 1;
     settings->repeat_count = 1;
     return settings;
     return settings;
 }
 }