diff --git a/lib/I18n/translations/belarusian.yaml b/lib/I18n/translations/belarusian.yaml index e4318605..366ee3d8 100644 --- a/lib/I18n/translations/belarusian.yaml +++ b/lib/I18n/translations/belarusian.yaml @@ -66,7 +66,6 @@ STR_SLEEP_COVER_MODE: "Рэжым вокладкі сну" STR_HIDE_BATTERY: "Схаваць % батарэі" STR_EXTRA_SPACING: "Дадат. інтэрвал абзаца" STR_TEXT_AA: "Згладжванне тэксту" -STR_SHORT_PWR_BTN: "Кароткае націсканне PWR" STR_ORIENTATION: "Арыентацыя чытання" STR_SIDE_BTN_LAYOUT: "Бакавыя кнопкі" STR_LONG_PRESS_SKIP: "Доўгае націсканне - змена раздзела" @@ -119,9 +118,6 @@ STR_CROP: "Абрэзаць" STR_NEVER: "Ніколі" STR_IN_READER: "У рэжыме чытання" STR_ALWAYS: "Заўсёды" -STR_IGNORE: "Ігнараваць" -STR_SLEEP: "Сон" -STR_PAGE_TURN: "Перагортванне" STR_PORTRAIT: "Партрэт" STR_LANDSCAPE_CW: "Ландшафт (CW)" STR_INVERTED: "Інверсія" diff --git a/lib/I18n/translations/catalan.yaml b/lib/I18n/translations/catalan.yaml index 614821a2..49d5b424 100644 --- a/lib/I18n/translations/catalan.yaml +++ b/lib/I18n/translations/catalan.yaml @@ -70,7 +70,6 @@ STR_IMAGES: "Imatges" STR_IMAGES_DISPLAY: "Mostrar" STR_IMAGES_PLACEHOLDER: "Text de mostra" STR_IMAGES_SUPPRESS: "Suprimir" -STR_SHORT_PWR_BTN: "Clic curt del botó d'engegada" STR_ORIENTATION: "Orientació de lectura" STR_SIDE_BTN_LAYOUT: "Disposició botons laterals" STR_LONG_PRESS_SKIP: "Pressió llarga omet el capítol" @@ -124,9 +123,6 @@ STR_CROP: "Retallar" STR_NEVER: "Mai" STR_IN_READER: "Al lector" STR_ALWAYS: "Sempre" -STR_IGNORE: "Ignora" -STR_SLEEP: "Dormir" -STR_PAGE_TURN: "Canvi de pàgina" STR_PORTRAIT: "Vertical" STR_LANDSCAPE_CW: "Horitzontal horari" STR_INVERTED: "Invertit" diff --git a/lib/I18n/translations/czech.yaml b/lib/I18n/translations/czech.yaml index b655a34f..c9f629ce 100644 --- a/lib/I18n/translations/czech.yaml +++ b/lib/I18n/translations/czech.yaml @@ -66,7 +66,6 @@ STR_SLEEP_COVER_MODE: "Obrazovka spánku Režim krytu" STR_HIDE_BATTERY: "Skrýt baterii %" STR_EXTRA_SPACING: "Extra mezery mezi odstavci" STR_TEXT_AA: "Vyhlazování textu" -STR_SHORT_PWR_BTN: "Krátké stisknutí tlačítka napájení" STR_ORIENTATION: "Orientace čtení" STR_SIDE_BTN_LAYOUT: "Rozvržení bočních tlačítek (čtečka)" STR_LONG_PRESS_SKIP: "Dlouhé stisknutí Přeskočit kapitolu" @@ -119,9 +118,6 @@ STR_CROP: "Oříznout" STR_NEVER: "Nikdy" STR_IN_READER: "Ve čtečce" STR_ALWAYS: "Vždy" -STR_IGNORE: "Ignorovat" -STR_SLEEP: "Spánek" -STR_PAGE_TURN: "Otáčení stránek" STR_PORTRAIT: "Na výšku" STR_LANDSCAPE_CW: "Na šířku po směru hod. ručiček" STR_INVERTED: "Invertovaný" diff --git a/lib/I18n/translations/danish.yaml b/lib/I18n/translations/danish.yaml index 807d9831..86b60de8 100644 --- a/lib/I18n/translations/danish.yaml +++ b/lib/I18n/translations/danish.yaml @@ -70,7 +70,6 @@ STR_IMAGES: "Billeder" STR_IMAGES_DISPLAY: "Vis" STR_IMAGES_PLACEHOLDER: "Pladsholder" STR_IMAGES_SUPPRESS: "Skjul" -STR_SHORT_PWR_BTN: "Kort tryk på tænd/sluk-knap" STR_ORIENTATION: "Læseretning" STR_SIDE_BTN_LAYOUT: "Knaplayout på siden (læser)" STR_LONG_PRESS_SKIP: "Langt tryk spring kapitel over" @@ -124,9 +123,6 @@ STR_CROP: "Beskær" STR_NEVER: "Aldrig" STR_IN_READER: "I læseren" STR_ALWAYS: "Altid" -STR_IGNORE: "Ignorer" -STR_SLEEP: "Hvile" -STR_PAGE_TURN: "Sideskift" STR_PORTRAIT: "Portræt" STR_LANDSCAPE_CW: "Liggende med uret" STR_INVERTED: "Inverteret" diff --git a/lib/I18n/translations/dutch.yaml b/lib/I18n/translations/dutch.yaml index 73f6b510..5e0e631f 100644 --- a/lib/I18n/translations/dutch.yaml +++ b/lib/I18n/translations/dutch.yaml @@ -96,7 +96,6 @@ STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Gediffuseerde Bayer" STR_CREATE_FALLBACK_FOR_INVALID_TOC: "Maak fallback voor ongeldige inhoudsopgave" -STR_SHORT_PWR_BTN: "Korte klik aan/uit-knop" STR_ORIENTATION: "Leesstand" STR_SIDE_BTN_LAYOUT: "Indeling zijknoppen (lezer)" STR_LONG_PRESS_SKIP: "Hoofdstuk overslaan (lang indrukken)" @@ -199,9 +198,6 @@ STR_CROP: "Bijsnijden" STR_NEVER: "Nooit" STR_IN_READER: "In lezer" STR_ALWAYS: "Altijd" -STR_IGNORE: "Negeren" -STR_SLEEP: "Slaap" -STR_PAGE_TURN: "Pagina omslaan" STR_PORTRAIT: "Staand" STR_LANDSCAPE_CW: "Liggend (rechtsom)" STR_INVERTED: "Omgekeerd" diff --git a/lib/I18n/translations/english.yaml b/lib/I18n/translations/english.yaml index cc4eaa80..89b2ac37 100644 --- a/lib/I18n/translations/english.yaml +++ b/lib/I18n/translations/english.yaml @@ -96,7 +96,6 @@ STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Diffused Bayer" STR_CREATE_FALLBACK_FOR_INVALID_TOC: "Create fallback for invalid TOC" -STR_SHORT_PWR_BTN: "Short Power Button Click" STR_ORIENTATION: "Reading Orientation" STR_SIDE_BTN_LAYOUT: "Side Button Layout (reader)" STR_LONG_PRESS_SKIP: "Long-press Chapter Skip" @@ -199,9 +198,6 @@ STR_CROP: "Crop" STR_NEVER: "Never" STR_IN_READER: "In Reader" STR_ALWAYS: "Always" -STR_IGNORE: "Ignore" -STR_SLEEP: "Sleep" -STR_PAGE_TURN: "Page Turn" STR_PORTRAIT: "Portrait" STR_LANDSCAPE_CW: "Landscape CW" STR_INVERTED: "Inverted" @@ -548,6 +544,7 @@ STR_CAPTIVE_PORTAL_HINT_1: "Network requires browser login. On another device," STR_CAPTIVE_PORTAL_HINT_2: "visit the URL below to authorize, then press OK." STR_CAPTIVE_PORTAL_DONE: "I'm authorized" STR_MENU_BTN_ACTIONS: "Button Actions" +STR_MENU_BTN_PHYSICAL: "Physical Buttons" STR_BTN_SHORT_PRESS: "Short Press" STR_BTN_DOUBLE_PRESS: "Double Press" STR_BTN_LONG_PRESS: "Long Press" @@ -561,6 +558,16 @@ STR_BTN_PAGE_BACK: "Page Back Button" STR_BTN_PAGE_FORWARD: "Page Forward Button" STR_BTN_POWER: "Power Button" STR_BTN_ACT_DEFAULT: "Default" +STR_BTN_DEF_IGNORE: "Default (ignore)" +STR_BTN_DEF_EXIT_READER: "Default (exit reader)" +STR_BTN_DEF_GO_HOME: "Default (go home)" +STR_BTN_DEF_READER_MENU: "Default (reader menu)" +STR_BTN_DEF_KOREADER_SYNC: "Default (KOReader sync)" +STR_BTN_DEF_PREV_PAGE: "Default (previous page)" +STR_BTN_DEF_NEXT_PAGE: "Default (next page)" +STR_BTN_DEF_CHAPTER_BACK: "Default (chapter back)" +STR_BTN_DEF_CHAPTER_FORWARD: "Default (chapter forward)" +STR_BTN_DEF_SLEEP: "Default (sleep)" STR_BTN_ACT_PAGE_FORWARD: "Next Page" STR_BTN_ACT_PAGE_BACK: "Previous Page" STR_BTN_ACT_PAGE_FORWARD_10: "Skip 10 Pages Forward" @@ -574,3 +581,6 @@ STR_BTN_ACT_STAR_PAGE: "Star Page" STR_BTN_ACT_FOOTNOTES: "Footnotes" STR_BTN_ACT_NEXT_SECTION: "Next Section / Chapter" STR_BTN_ACT_PREV_SECTION: "Previous Section / Chapter" +STR_BTN_ACT_EXIT_READER: "Exit Reader" +STR_BTN_ACT_READER_MENU: "Reader Menu" +STR_BTN_ACT_KOREADER_SYNC: "KOReader Sync" diff --git a/lib/I18n/translations/finnish.yaml b/lib/I18n/translations/finnish.yaml index e584d7a2..0c73b385 100644 --- a/lib/I18n/translations/finnish.yaml +++ b/lib/I18n/translations/finnish.yaml @@ -66,7 +66,6 @@ STR_SLEEP_COVER_MODE: "Lepotilanäytön kansitila" STR_HIDE_BATTERY: "Piilota akun %" STR_EXTRA_SPACING: "Kappaleiden lisäväli" STR_TEXT_AA: "Tekstin reunanpehmennys" -STR_SHORT_PWR_BTN: "Lyhyt virtapainikkeen painallus" STR_ORIENTATION: "Lukusuunta" STR_SIDE_BTN_LAYOUT: "Sivupainikkeiden asettelu (lukija)" STR_LONG_PRESS_SKIP: "Pitkä painallus: lukuhyppy" @@ -119,9 +118,6 @@ STR_CROP: "Rajaa" STR_NEVER: "Ei koskaan" STR_IN_READER: "Lukijassa" STR_ALWAYS: "Aina" -STR_IGNORE: "Ohita" -STR_SLEEP: "Lepotila" -STR_PAGE_TURN: "Sivunkääntö" STR_PORTRAIT: "Pysty" STR_LANDSCAPE_CW: "Vaaka myötäpäivään" STR_INVERTED: "Käännetty" diff --git a/lib/I18n/translations/french.yaml b/lib/I18n/translations/french.yaml index 1622549e..5b24dc33 100644 --- a/lib/I18n/translations/french.yaml +++ b/lib/I18n/translations/french.yaml @@ -91,7 +91,6 @@ STR_IMAGES: "Images" STR_IMAGES_DISPLAY: "Affichage" STR_IMAGES_PLACEHOLDER: "Espace réservé" STR_IMAGES_SUPPRESS: "Masquer" -STR_SHORT_PWR_BTN: "Appui court alim." STR_ORIENTATION: "Orientation de lecture" STR_SIDE_BTN_LAYOUT: "Boutons latéraux" STR_LONG_PRESS_SKIP: "Appui long saut de chapitre" @@ -147,9 +146,6 @@ STR_CROP: "Rogné" STR_NEVER: "Jamais" STR_IN_READER: "Dans le lecteur" STR_ALWAYS: "Toujours" -STR_IGNORE: "Ignorer" -STR_SLEEP: "Mise en veille" -STR_PAGE_TURN: "Page suivante" STR_PORTRAIT: "Portrait" STR_LANDSCAPE_CW: "Paysage" STR_INVERTED: "Inversé" diff --git a/lib/I18n/translations/german.yaml b/lib/I18n/translations/german.yaml index d388acf6..81de9fbd 100644 --- a/lib/I18n/translations/german.yaml +++ b/lib/I18n/translations/german.yaml @@ -79,7 +79,6 @@ STR_IMAGE_DITHERING: "Bild-Dithering" STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Diffundiertes Bayer" -STR_SHORT_PWR_BTN: "An-Taste kurz drücken" STR_ORIENTATION: "Leseausrichtung" STR_SIDE_BTN_LAYOUT: "Seitliche Tasten (Lesen)" STR_LONG_PRESS_SKIP: "Langes Drücken springt Kap." @@ -138,9 +137,6 @@ STR_CROP: "Zuschnitt" STR_NEVER: "Nie" STR_IN_READER: "Beim Lesen" STR_ALWAYS: "Immer" -STR_IGNORE: "Ignorieren" -STR_SLEEP: "Standby" -STR_PAGE_TURN: "Umblättern" STR_PORTRAIT: "Hochformat" STR_LANDSCAPE_CW: "Querformat rechts" STR_INVERTED: "Invertiert" diff --git a/lib/I18n/translations/hungarian.yaml b/lib/I18n/translations/hungarian.yaml index 70b0d8bf..95416711 100644 --- a/lib/I18n/translations/hungarian.yaml +++ b/lib/I18n/translations/hungarian.yaml @@ -70,7 +70,6 @@ STR_IMAGES: "Képek" STR_IMAGES_DISPLAY: "Megjelenítés" STR_IMAGES_PLACEHOLDER: "Helyőrző" STR_IMAGES_SUPPRESS: "Elnyomás" -STR_SHORT_PWR_BTN: "Rövid bekapcsológomb nyomás" STR_ORIENTATION: "Olvasási irány" STR_SIDE_BTN_LAYOUT: "Oldalsó gomb elrendezés (olvasó)" STR_LONG_PRESS_SKIP: "Hosszú nyomás - fejezet ugrás" @@ -124,9 +123,6 @@ STR_CROP: "Körbevágás" STR_NEVER: "Soha" STR_IN_READER: "Olvasóban" STR_ALWAYS: "Mindig" -STR_IGNORE: "Mellőzés" -STR_SLEEP: "Alvás" -STR_PAGE_TURN: "Lapozás" STR_PORTRAIT: "Álló" STR_LANDSCAPE_CW: "Fekvő jobbra" STR_INVERTED: "Fordított" diff --git a/lib/I18n/translations/italian.yaml b/lib/I18n/translations/italian.yaml index 4d531de3..eb9e4f00 100644 --- a/lib/I18n/translations/italian.yaml +++ b/lib/I18n/translations/italian.yaml @@ -91,7 +91,6 @@ STR_IMAGES: "Immagini" STR_IMAGES_DISPLAY: "Visualizza" STR_IMAGES_PLACEHOLDER: "Segnaposto" STR_IMAGES_SUPPRESS: "Nascondi" -STR_SHORT_PWR_BTN: "Pressione breve tasto accensione" STR_ORIENTATION: "Orientamento lettura" STR_SIDE_BTN_LAYOUT: "Pulsanti laterali (lettore)" STR_LONG_PRESS_SKIP: "Pressione lunga: salta capitolo" @@ -147,9 +146,6 @@ STR_CROP: "Ritaglia" STR_NEVER: "Mai" STR_IN_READER: "Nel lettore" STR_ALWAYS: "Sempre" -STR_IGNORE: "Ignora" -STR_SLEEP: "Sospendi" -STR_PAGE_TURN: "Cambio pagina" STR_PORTRAIT: "Verticale" STR_LANDSCAPE_CW: "Orizzontale ↻" STR_INVERTED: "Invertito" diff --git a/lib/I18n/translations/kazakh.yaml b/lib/I18n/translations/kazakh.yaml index 66c07712..623aa81e 100644 --- a/lib/I18n/translations/kazakh.yaml +++ b/lib/I18n/translations/kazakh.yaml @@ -65,7 +65,6 @@ STR_SLEEP_COVER_MODE: "Ұйқы экраны мұқаба режимі" STR_HIDE_BATTERY: "Батарея % жасыру" STR_EXTRA_SPACING: "Қосымша абзац аралығы" STR_TEXT_AA: "Мәтін сырғытпасы" -STR_SHORT_PWR_BTN: "Қуат түймесін қысқа басу" STR_ORIENTATION: "Оқу бағдары" STR_SIDE_BTN_LAYOUT: "Бүйірлік түймелер орналасуы (оқырман)" STR_LONG_PRESS_SKIP: "Ұзақ басу арқылы тарау өткізу" @@ -118,9 +117,6 @@ STR_CROP: "Кесу" STR_NEVER: "Ешқашан" STR_IN_READER: "Оқырманда" STR_ALWAYS: "Әрқашан" -STR_IGNORE: "Елемеу" -STR_SLEEP: "Ұйқы" -STR_PAGE_TURN: "Бет аудару" STR_PORTRAIT: "Тік бағдар" STR_LANDSCAPE_CW: "Көлденең (сағат бағытымен)" STR_INVERTED: "Төңкерілген" diff --git a/lib/I18n/translations/lithuanian.yaml b/lib/I18n/translations/lithuanian.yaml index bb26d143..891a4fb4 100644 --- a/lib/I18n/translations/lithuanian.yaml +++ b/lib/I18n/translations/lithuanian.yaml @@ -70,7 +70,6 @@ STR_IMAGES: "Paveikslėliai" STR_IMAGES_DISPLAY: "Rodyti" STR_IMAGES_PLACEHOLDER: "Vietaženklis" STR_IMAGES_SUPPRESS: "Slėpti" -STR_SHORT_PWR_BTN: "Trumpas įjungimo pasp." STR_ORIENTATION: "Orientacija" STR_SIDE_BTN_LAYOUT: "Šoniniai mygtukai" STR_LONG_PRESS_SKIP: "Praleisti skyrių (ilgai)" @@ -124,9 +123,6 @@ STR_CROP: "Kirpti" STR_NEVER: "Niekada" STR_IN_READER: "Skaitytuve" STR_ALWAYS: "Visada" -STR_IGNORE: "Nepaisyti" -STR_SLEEP: "Miegas" -STR_PAGE_TURN: "Versti psl." STR_PORTRAIT: "Stačias" STR_LANDSCAPE_CW: "Gulsčias (P)" STR_INVERTED: "Apverstas" diff --git a/lib/I18n/translations/polish.yaml b/lib/I18n/translations/polish.yaml index 1ef05908..6a948547 100644 --- a/lib/I18n/translations/polish.yaml +++ b/lib/I18n/translations/polish.yaml @@ -96,7 +96,6 @@ STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Dyfundowany Bayer" STR_CREATE_FALLBACK_FOR_INVALID_TOC: "Utwórz fallback dla nieprawidłowego spisu treści" -STR_SHORT_PWR_BTN: "Krótkie naciśnięcie zasilania" STR_ORIENTATION: "Układ czytania" STR_SIDE_BTN_LAYOUT: "Układ przycisków bocznych" STR_LONG_PRESS_SKIP: "Przytrzymaj aby przeskoczyć rozdział" @@ -199,9 +198,6 @@ STR_CROP: "Przytnij" STR_NEVER: "Nigdy" STR_IN_READER: "W czytniku" STR_ALWAYS: "Zawsze" -STR_IGNORE: "Ignoruj" -STR_SLEEP: "Uśpienie" -STR_PAGE_TURN: "Nast. str." STR_PORTRAIT: "Pionowo" STR_LANDSCAPE_CW: "Poziomo P" STR_INVERTED: "Odwrócony" diff --git a/lib/I18n/translations/portuguese_br.yaml b/lib/I18n/translations/portuguese_br.yaml index ca8bd7aa..ed483bcf 100644 --- a/lib/I18n/translations/portuguese_br.yaml +++ b/lib/I18n/translations/portuguese_br.yaml @@ -95,7 +95,6 @@ STR_IMAGE_DITHERING: "Dithering de imagem" STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Bayer difuso" -STR_SHORT_PWR_BTN: "Clique curto no botão de ligar" STR_ORIENTATION: "Orientação de leitura" STR_SIDE_BTN_LAYOUT: "Disposição dos botões laterais" STR_LONG_PRESS_SKIP: "Pular capítulo com pressão longa" @@ -151,9 +150,6 @@ STR_CROP: "Recortar" STR_NEVER: "Nunca" STR_IN_READER: "No leitor" STR_ALWAYS: "Sempre" -STR_IGNORE: "Ignorar" -STR_SLEEP: "Repouso" -STR_PAGE_TURN: "Virar página" STR_PORTRAIT: "Retrato" STR_LANDSCAPE_CW: "Paisagem H" STR_INVERTED: "Invertido" diff --git a/lib/I18n/translations/portuguese_pt.yaml b/lib/I18n/translations/portuguese_pt.yaml index 973a1e0b..f4c993bd 100644 --- a/lib/I18n/translations/portuguese_pt.yaml +++ b/lib/I18n/translations/portuguese_pt.yaml @@ -87,7 +87,6 @@ STR_TEXT_AA: "Suavização do texto" STR_TEXT_DARKNESS: "Escuridão do texto" STR_EXTRA_DARK: "Extra escuro" STR_MAX_DARK: "Máximo" -STR_SHORT_PWR_BTN: "Pressão curta do botão de energia" STR_ORIENTATION: "Orientação de leitura" STR_SIDE_BTN_LAYOUT: "Disposição dos botões laterais" STR_LONG_PRESS_SKIP: "Saltar capítulo com pressão longa" @@ -146,9 +145,6 @@ STR_CROP: "Recortar" STR_NEVER: "Nunca" STR_IN_READER: "No leitor" STR_ALWAYS: "Sempre" -STR_IGNORE: "Ignorar" -STR_SLEEP: "Repouso" -STR_PAGE_TURN: "Virar página" STR_PORTRAIT: "Retrato" STR_LANDSCAPE_CW: "Paisagem H" STR_INVERTED: "Invertido" diff --git a/lib/I18n/translations/romanian.yaml b/lib/I18n/translations/romanian.yaml index b41caa60..41e9a26a 100644 --- a/lib/I18n/translations/romanian.yaml +++ b/lib/I18n/translations/romanian.yaml @@ -70,7 +70,6 @@ STR_IMAGES: "Imagini" STR_IMAGES_DISPLAY: "Afişare" STR_IMAGES_PLACEHOLDER: "Substituent" STR_IMAGES_SUPPRESS: "Suprimare" -STR_SHORT_PWR_BTN: "Apăsare scurtă întrerupător" STR_ORIENTATION: "Orientare lectură" STR_SIDE_BTN_LAYOUT: "Aspect butoane laterale (lectură)" STR_LONG_PRESS_SKIP: "Sărire capitol la apăsare lungă" @@ -124,9 +123,6 @@ STR_CROP: "Decupat" STR_NEVER: "Niciodată" STR_IN_READER: "În lectură" STR_ALWAYS: "Întotdeauna" -STR_IGNORE: "Ignoră" -STR_SLEEP: "Repaus" -STR_PAGE_TURN: "Răsfoire pagină" STR_PORTRAIT: "Vertical" STR_LANDSCAPE_CW: "Orizontal dreapta" STR_INVERTED: "Invers" diff --git a/lib/I18n/translations/russian.yaml b/lib/I18n/translations/russian.yaml index 8268e2ee..7e464cac 100644 --- a/lib/I18n/translations/russian.yaml +++ b/lib/I18n/translations/russian.yaml @@ -88,7 +88,6 @@ STR_IMAGES: "Изображения" STR_IMAGES_DISPLAY: "Показать" STR_IMAGES_PLACEHOLDER: "Заглушки" STR_IMAGES_SUPPRESS: "Скрыть" -STR_SHORT_PWR_BTN: "Короткое нажатие PWR" STR_ORIENTATION: "Ориентация чтения" STR_SIDE_BTN_LAYOUT: "Боковые кнопки" STR_LONG_PRESS_SKIP: "Долгое нажатие - смена главы" @@ -144,9 +143,6 @@ STR_CROP: "Обрезать" STR_NEVER: "Никогда" STR_IN_READER: "В режиме чтения" STR_ALWAYS: "Всегда" -STR_IGNORE: "Игнорировать" -STR_SLEEP: "Сон" -STR_PAGE_TURN: "Перелистывание" STR_PORTRAIT: "Портрет" STR_LANDSCAPE_CW: "Ландшафт (CW)" STR_INVERTED: "Инверсия" diff --git a/lib/I18n/translations/slovenian.yaml b/lib/I18n/translations/slovenian.yaml index 5b9b753e..b3147081 100644 --- a/lib/I18n/translations/slovenian.yaml +++ b/lib/I18n/translations/slovenian.yaml @@ -84,7 +84,6 @@ STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Difuzni Bayer" STR_CREATE_FALLBACK_FOR_INVALID_TOC: "Ustvari rezervo za neveljavno kazalo" -STR_SHORT_PWR_BTN: "Kratek pritisk na gumb za vklop" STR_ORIENTATION: "Orientacija branja" STR_SIDE_BTN_LAYOUT: "Razpored stranskih gumbov" STR_LONG_PRESS_SKIP: "Dolgi pritisk za preskok poglavja" @@ -181,9 +180,6 @@ STR_CROP: "Obreži" STR_NEVER: "Nikoli" STR_IN_READER: "V bralniku" STR_ALWAYS: "Vedno" -STR_IGNORE: "Prezri" -STR_SLEEP: "Spanje" -STR_PAGE_TURN: "Obračanje strani" STR_PORTRAIT: "Pokončno" STR_LANDSCAPE_CW: "Ležeče (v smeri urinega kazalca)" STR_INVERTED: "Obrnjeno" diff --git a/lib/I18n/translations/spanish.yaml b/lib/I18n/translations/spanish.yaml index 047f689e..4b8d2321 100644 --- a/lib/I18n/translations/spanish.yaml +++ b/lib/I18n/translations/spanish.yaml @@ -85,7 +85,6 @@ STR_IMAGES: "Imágenes" STR_IMAGES_DISPLAY: "Mostrar" STR_IMAGES_PLACEHOLDER: "Reemplazar" STR_IMAGES_SUPPRESS: "Ocultar" -STR_SHORT_PWR_BTN: "Toque corto botón encendido" STR_ORIENTATION: "Orientación" STR_SIDE_BTN_LAYOUT: "Función botones laterales (lector)" STR_LONG_PRESS_SKIP: "Saltar capítulo (pulsación larga)" @@ -141,9 +140,6 @@ STR_CROP: "Recortar" STR_NEVER: "Nunca" STR_IN_READER: "En el lector" STR_ALWAYS: "Siempre" -STR_IGNORE: "Ignorar" -STR_SLEEP: "Suspender" -STR_PAGE_TURN: "Pasar página" STR_PORTRAIT: "Vertical" STR_LANDSCAPE_CW: "Horizontal (horario)" STR_INVERTED: "Invertido" diff --git a/lib/I18n/translations/swedish.yaml b/lib/I18n/translations/swedish.yaml index da6099a3..d366dfd1 100644 --- a/lib/I18n/translations/swedish.yaml +++ b/lib/I18n/translations/swedish.yaml @@ -96,7 +96,6 @@ STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Diffus Bayer" STR_CREATE_FALLBACK_FOR_INVALID_TOC: "Skapa fallback för ogiltig innehållsförteckning" -STR_SHORT_PWR_BTN: "Kort strömknappsklick" STR_ORIENTATION: "Läsrikting" STR_SIDE_BTN_LAYOUT: "Sidoknappslayout (Läsare)" STR_LONG_PRESS_SKIP: "Lång-tryck Kapitelskippning" @@ -199,9 +198,6 @@ STR_CROP: "Beskär" STR_NEVER: "Aldrig" STR_IN_READER: "I Eboksläsare" STR_ALWAYS: "Alltid" -STR_IGNORE: "Ignorera" -STR_SLEEP: "Vila" -STR_PAGE_TURN: "Sidvändning" STR_PORTRAIT: "Porträtt" STR_LANDSCAPE_CW: "Landskap medurs" STR_INVERTED: "Inverterad" diff --git a/lib/I18n/translations/turkish.yaml b/lib/I18n/translations/turkish.yaml index f23d2420..69e04311 100644 --- a/lib/I18n/translations/turkish.yaml +++ b/lib/I18n/translations/turkish.yaml @@ -65,7 +65,6 @@ STR_SLEEP_COVER_MODE: "Uyku Ekranı Kapak Modu" STR_HIDE_BATTERY: "Pil Yüzdesini Gizle" STR_EXTRA_SPACING: "Ekstra Paragraf Boşluğu" STR_TEXT_AA: "Metin Yumuşatma (AA)" -STR_SHORT_PWR_BTN: "Kısa Güç Tuşu Tıklaması" STR_ORIENTATION: "Okuma Yönü" STR_SIDE_BTN_LAYOUT: "Yan Tuş Dizilimi (okuyucu)" STR_LONG_PRESS_SKIP: "Uzun Basışla Bölüm Atla" @@ -120,9 +119,6 @@ STR_CROP: "Kırp" STR_NEVER: "Asla" STR_IN_READER: "Okuyucuda" STR_ALWAYS: "Her Zaman" -STR_IGNORE: "Yoksay" -STR_SLEEP: "Uyku" -STR_PAGE_TURN: "Sayfa Çevirme" STR_PORTRAIT: "Dikey" STR_LANDSCAPE_CW: "Yatay (Saat Yönü)" STR_INVERTED: "Ters" diff --git a/lib/I18n/translations/ukrainian.yaml b/lib/I18n/translations/ukrainian.yaml index ef942ccb..014744ef 100644 --- a/lib/I18n/translations/ukrainian.yaml +++ b/lib/I18n/translations/ukrainian.yaml @@ -95,7 +95,6 @@ STR_IMAGE_DITHERING: "Дітеринг зображення" STR_IMAGE_DITHER_BAYER: "Bayer" STR_IMAGE_DITHER_ATKINSON: "Atkinson" STR_IMAGE_DITHER_DIFFUSED_BAYER: "Дифузний Bayer" -STR_SHORT_PWR_BTN: "Коротке натискання кнопки живлення" STR_ORIENTATION: "Орієнтація читання" STR_SIDE_BTN_LAYOUT: "Розташування бічних кнопок (читач)" STR_LONG_PRESS_SKIP: "Пропуск розділу при довгому натисканні" @@ -151,9 +150,6 @@ STR_CROP: "Обрізати" STR_NEVER: "Ніколи" STR_IN_READER: "В читачі" STR_ALWAYS: "Завжди" -STR_IGNORE: "Ігнорувати" -STR_SLEEP: "Сон" -STR_PAGE_TURN: "Перегортання сторінки" STR_PORTRAIT: "Портрет" STR_LANDSCAPE_CW: "Альбомний за годинниковою" STR_INVERTED: "Перевернутий" diff --git a/src/ButtonEventManager.cpp b/src/ButtonEventManager.cpp index 16345b55..05f02516 100644 --- a/src/ButtonEventManager.cpp +++ b/src/ButtonEventManager.cpp @@ -2,11 +2,16 @@ #include "CrossPointSettings.h" -// Required for constexpr array definition in .cpp +// Required for constexpr array out-of-class definition (C++14). constexpr ButtonEventManager::Button ButtonEventManager::ALL_BUTTONS[ButtonEventManager::NUM_BUTTONS]; bool ButtonEventManager::hasDoubleAction(const Button button) { using BA = CrossPointSettings::BUTTON_ACTION; + // Up/Down share physical pins with PageBack/PageForward via sideButtonLayout. + // Their double-action settings must be consulted when checking the PageBack/PageForward FSMs + // so that the disambiguation delay is applied when either role has a double action. + const bool prevNext = static_cast(SETTINGS.sideButtonLayout) == + CrossPointSettings::SIDE_BUTTON_LAYOUT::PREV_NEXT; switch (button) { case Button::Back: return SETTINGS.btnDoubleBack != BA::BTN_DEFAULT; @@ -17,13 +22,16 @@ bool ButtonEventManager::hasDoubleAction(const Button button) { case Button::Right: return SETTINGS.btnDoubleRight != BA::BTN_DEFAULT; case Button::Up: - return SETTINGS.btnDoubleUp != BA::BTN_DEFAULT; case Button::Down: - return SETTINGS.btnDoubleDown != BA::BTN_DEFAULT; + return false; // Up/Down have no dedicated FSM; handled via PageBack/PageForward case Button::PageBack: - return SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT; + // PREV_NEXT: BTN_UP = PageBack; NEXT_PREV: BTN_DOWN = PageBack + return SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT || + (prevNext ? SETTINGS.btnDoubleUp : SETTINGS.btnDoubleDown) != BA::BTN_DEFAULT; case Button::PageForward: - return SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT; + // PREV_NEXT: BTN_DOWN = PageForward; NEXT_PREV: BTN_UP = PageForward + return SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT || + (prevNext ? SETTINGS.btnDoubleDown : SETTINGS.btnDoubleUp) != BA::BTN_DEFAULT; case Button::Power: return SETTINGS.btnDoublePower != BA::BTN_DEFAULT; } diff --git a/src/ButtonEventManager.h b/src/ButtonEventManager.h index f005e3e4..f32f8f00 100644 --- a/src/ButtonEventManager.h +++ b/src/ButtonEventManager.h @@ -26,8 +26,6 @@ class ButtonEventManager { public: using Button = MappedInputManager::Button; - static constexpr int NUM_BUTTONS = 9; // matches MappedInputManager::Button count - enum class PressType { Short, Double, Long }; struct ButtonEvent { @@ -56,9 +54,13 @@ class ButtonEventManager { static bool hasDoubleAction(Button button); private: + // Up and Down alias the same physical GPIO pins as PageBack/PageForward (via sideButtonLayout). + // Running separate FSMs for both would double-fire on every side button press. + // Up/Down are therefore excluded here; their configurable actions are resolved in main.cpp + // by treating a PageBack/PageForward event as the canonical side-button event. + static constexpr int NUM_BUTTONS = 7; static constexpr Button ALL_BUTTONS[NUM_BUTTONS] = { - Button::Back, Button::Confirm, Button::Left, Button::Right, Button::Up, - Button::Down, Button::PageBack, Button::PageForward, Button::Power, + Button::Back, Button::Confirm, Button::Left, Button::Right, Button::PageBack, Button::PageForward, Button::Power, }; enum class State { Idle, Pressed, ReleasedOnce, DoublePressed }; diff --git a/src/CrossPointSettings.cpp b/src/CrossPointSettings.cpp index 9245d1bc..84d4f452 100644 --- a/src/CrossPointSettings.cpp +++ b/src/CrossPointSettings.cpp @@ -140,7 +140,10 @@ bool CrossPointSettings::loadFromBinaryFile() { if (++settingsRead >= fileSettingsCount) break; serialization::readPod(inputFile, extraParagraphSpacing); if (++settingsRead >= fileSettingsCount) break; - readAndValidate(inputFile, shortPwrBtn, SHORT_PWRBTN_COUNT); + { + uint8_t ignored; + serialization::readPod(inputFile, ignored); + } // legacy shortPwrBtn field if (++settingsRead >= fileSettingsCount) break; readAndValidate(inputFile, statusBar, STATUS_BAR_MODE_COUNT); // legacy if (++settingsRead >= fileSettingsCount) break; diff --git a/src/CrossPointSettings.h b/src/CrossPointSettings.h index 65d42b08..eedc674c 100644 --- a/src/CrossPointSettings.h +++ b/src/CrossPointSettings.h @@ -127,17 +127,6 @@ class CrossPointSettings { REFRESH_FREQUENCY_COUNT }; - // Short power button press actions - enum SHORT_PWRBTN { - IGNORE = 0, - SLEEP = 1, - PAGE_TURN = 2, - FORCE_REFRESH = 3, - FOOTNOTES = 4, - STAR_PAGE = 5, - SHORT_PWRBTN_COUNT - }; - // Hide battery percentage enum HIDE_BATTERY_PERCENTAGE { HIDE_NEVER = 0, HIDE_READER = 1, HIDE_ALWAYS = 2, HIDE_BATTERY_PERCENTAGE_COUNT }; @@ -214,8 +203,6 @@ class CrossPointSettings { // Text darkness (0 = normal, 1 = dark, 2 = extra dark). Default 1 preserves // historical AA rendering (both grayscale shades drawn in the MSB pass). uint8_t textDarkness = DARKNESS_DARK; - // Short power button click behaviour - uint8_t shortPwrBtn = IGNORE; // EPUB reading orientation settings // 0 = portrait (default), 1 = landscape clockwise, 2 = inverted, 3 = landscape counter-clockwise uint8_t orientation = PORTRAIT; @@ -294,6 +281,9 @@ class CrossPointSettings { BTN_FOOTNOTES, BTN_NEXT_SECTION, BTN_PREV_SECTION, + BTN_EXIT_READER, + BTN_READER_MENU, + BTN_KOREADER_SYNC, BUTTON_ACTION_COUNT }; @@ -335,9 +325,7 @@ class CrossPointSettings { // Get singleton instance static CrossPointSettings& getInstance() { return instance; } - uint16_t getPowerButtonDuration() const { - return (shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::SLEEP) ? 10 : 400; - } + uint16_t getPowerButtonDuration() const { return 400; } int getReaderFontId() const; // If count_only is true, returns the number of settings items that would be written. diff --git a/src/SettingsList.h b/src/SettingsList.h index 68ad73e5..e6bd2834 100644 --- a/src/SettingsList.h +++ b/src/SettingsList.h @@ -132,123 +132,112 @@ inline const std::vector list = { // --- Controls --- SettingInfo::Enum(StrId::STR_SIDE_BTN_LAYOUT, &CrossPointSettings::sideButtonLayout, - {StrId::STR_PREV_NEXT, StrId::STR_NEXT_PREV}, "sideButtonLayout", StrId::STR_CAT_CONTROLS), - SettingInfo::Enum(StrId::STR_SHORT_PWR_BTN, &CrossPointSettings::shortPwrBtn, - {StrId::STR_IGNORE, StrId::STR_SLEEP, StrId::STR_PAGE_TURN, StrId::STR_FORCE_REFRESH, - StrId::STR_FOOTNOTES, StrId::STR_STAR_PAGE}, - "shortPwrBtn", StrId::STR_CAT_CONTROLS), + {StrId::STR_PREV_NEXT, StrId::STR_NEXT_PREV}, "sideButtonLayout", StrId::STR_CAT_CONTROLS) + .withSubcategory(StrId::STR_MENU_BTN_PHYSICAL), // --- Button Actions (short / double / long press per logical button) --- // All entries share the same ordered action-label list; the submenu groups them behind // a single placeholder row in the device UI. -#define BTN_ACTION_ENUM_VALUES \ - {StrId::STR_BTN_ACT_DEFAULT, StrId::STR_BTN_ACT_PAGE_FORWARD, StrId::STR_BTN_ACT_PAGE_BACK, \ - StrId::STR_BTN_ACT_PAGE_FORWARD_10, StrId::STR_BTN_ACT_PAGE_BACK_10, StrId::STR_BTN_ACT_GO_HOME, \ - StrId::STR_BTN_ACT_SLEEP, StrId::STR_BTN_ACT_FORCE_REFRESH, StrId::STR_BTN_ACT_OPEN_TOC, \ - StrId::STR_BTN_ACT_OPEN_BOOKMARKS, StrId::STR_BTN_ACT_STAR_PAGE, StrId::STR_BTN_ACT_FOOTNOTES, \ - StrId::STR_BTN_ACT_NEXT_SECTION, StrId::STR_BTN_ACT_PREV_SECTION} +// Shared action options (everything except the first "default" entry). +#define BTN_ACT_OPTIONS \ + StrId::STR_BTN_ACT_PAGE_FORWARD, StrId::STR_BTN_ACT_PAGE_BACK, StrId::STR_BTN_ACT_PAGE_FORWARD_10, \ + StrId::STR_BTN_ACT_PAGE_BACK_10, StrId::STR_BTN_ACT_GO_HOME, StrId::STR_BTN_ACT_SLEEP, \ + StrId::STR_BTN_ACT_FORCE_REFRESH, StrId::STR_BTN_ACT_OPEN_TOC, StrId::STR_BTN_ACT_OPEN_BOOKMARKS, \ + StrId::STR_BTN_ACT_STAR_PAGE, StrId::STR_BTN_ACT_FOOTNOTES, StrId::STR_BTN_ACT_NEXT_SECTION, \ + StrId::STR_BTN_ACT_PREV_SECTION, StrId::STR_BTN_ACT_EXIT_READER, StrId::STR_BTN_ACT_READER_MENU, \ + StrId::STR_BTN_ACT_KOREADER_SYNC - // Back button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortBack, BTN_ACTION_ENUM_VALUES, - "btnShortBack", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_BACK) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleBack, BTN_ACTION_ENUM_VALUES, - "btnDoubleBack", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongBack, BTN_ACTION_ENUM_VALUES, - "btnLongBack", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Confirm button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortConfirm, BTN_ACTION_ENUM_VALUES, - "btnShortConfirm", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_CONFIRM) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleConfirm, BTN_ACTION_ENUM_VALUES, - "btnDoubleConfirm", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongConfirm, BTN_ACTION_ENUM_VALUES, - "btnLongConfirm", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Left button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortLeft, BTN_ACTION_ENUM_VALUES, - "btnShortLeft", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_LEFT) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleLeft, BTN_ACTION_ENUM_VALUES, - "btnDoubleLeft", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongLeft, BTN_ACTION_ENUM_VALUES, - "btnLongLeft", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Right button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortRight, BTN_ACTION_ENUM_VALUES, - "btnShortRight", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_RIGHT) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleRight, BTN_ACTION_ENUM_VALUES, - "btnDoubleRight", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongRight, BTN_ACTION_ENUM_VALUES, - "btnLongRight", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Up button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortUp, BTN_ACTION_ENUM_VALUES, "btnShortUp", + // Back button: short=exit reader, double=ignore, long=go home + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortBack, + {StrId::STR_BTN_DEF_EXIT_READER, BTN_ACT_OPTIONS}, "btnShortBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_BACK), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleBack, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_BACK), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongBack, + {StrId::STR_BTN_DEF_GO_HOME, BTN_ACT_OPTIONS}, "btnLongBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_BACK), + // Confirm button: short=reader menu, double=ignore, long=KOReader sync + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortConfirm, + {StrId::STR_BTN_DEF_READER_MENU, BTN_ACT_OPTIONS}, "btnShortConfirm", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_CONFIRM), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleConfirm, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleConfirm", StrId::STR_CAT_CONTROLS), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongConfirm, + {StrId::STR_BTN_DEF_KOREADER_SYNC, BTN_ACT_OPTIONS}, "btnLongConfirm", StrId::STR_CAT_CONTROLS), + // Left button: short=previous page, double=ignore, long=chapter back + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortLeft, + {StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortLeft", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_LEFT), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleLeft, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleLeft", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_LEFT), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongLeft, + {StrId::STR_BTN_DEF_CHAPTER_BACK, BTN_ACT_OPTIONS}, "btnLongLeft", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_LEFT), + // Right button: short=next page, double=ignore, long=chapter forward + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortRight, + {StrId::STR_BTN_DEF_NEXT_PAGE, BTN_ACT_OPTIONS}, "btnShortRight", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_RIGHT), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleRight, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleRight", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_RIGHT), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongRight, + {StrId::STR_BTN_DEF_CHAPTER_FORWARD, BTN_ACT_OPTIONS}, "btnLongRight", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_RIGHT), + // Up button: short=previous page, double=ignore, long=chapter back + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortUp, + {StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortUp", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_UP), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleUp, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleUp", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_UP), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongUp, + {StrId::STR_BTN_DEF_CHAPTER_BACK, BTN_ACT_OPTIONS}, "btnLongUp", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_UP), + // Down button: short=next page, double=ignore, long=chapter forward + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortDown, + {StrId::STR_BTN_DEF_NEXT_PAGE, BTN_ACT_OPTIONS}, "btnShortDown", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_DOWN), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleDown, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoubleDown", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_DOWN), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongDown, + {StrId::STR_BTN_DEF_CHAPTER_FORWARD, BTN_ACT_OPTIONS}, "btnLongDown", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_DOWN), + // Page Back button: short=previous page, double=ignore, long=chapter back + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPageBack, + {StrId::STR_BTN_DEF_PREV_PAGE, BTN_ACT_OPTIONS}, "btnShortPageBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_PAGE_BACK), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePageBack, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoublePageBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_PAGE_BACK), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPageBack, + {StrId::STR_BTN_DEF_CHAPTER_BACK, BTN_ACT_OPTIONS}, "btnLongPageBack", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_PAGE_BACK), + // Page Forward button: short=next page, double=ignore, long=chapter forward + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPageForward, + {StrId::STR_BTN_DEF_NEXT_PAGE, BTN_ACT_OPTIONS}, "btnShortPageForward", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_PAGE_FORWARD), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePageForward, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoublePageForward", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_PAGE_FORWARD), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPageForward, + {StrId::STR_BTN_DEF_CHAPTER_FORWARD, BTN_ACT_OPTIONS}, "btnLongPageForward", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_UP) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleUp, BTN_ACTION_ENUM_VALUES, - "btnDoubleUp", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongUp, BTN_ACTION_ENUM_VALUES, "btnLongUp", - StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Down button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortDown, BTN_ACTION_ENUM_VALUES, - "btnShortDown", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_DOWN) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoubleDown, BTN_ACTION_ENUM_VALUES, - "btnDoubleDown", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongDown, BTN_ACTION_ENUM_VALUES, - "btnLongDown", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Page Back button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPageBack, BTN_ACTION_ENUM_VALUES, - "btnShortPageBack", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_PAGE_BACK) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePageBack, BTN_ACTION_ENUM_VALUES, - "btnDoublePageBack", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPageBack, BTN_ACTION_ENUM_VALUES, - "btnLongPageBack", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Page Forward button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPageForward, BTN_ACTION_ENUM_VALUES, - "btnShortPageForward", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_PAGE_FORWARD) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePageForward, BTN_ACTION_ENUM_VALUES, - "btnDoublePageForward", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPageForward, BTN_ACTION_ENUM_VALUES, - "btnLongPageForward", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - // Power button - SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPower, BTN_ACTION_ENUM_VALUES, - "btnShortPower", StrId::STR_CAT_CONTROLS) - .withSubcategory(StrId::STR_BTN_POWER) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePower, BTN_ACTION_ENUM_VALUES, - "btnDoublePower", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), - SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPower, BTN_ACTION_ENUM_VALUES, + .withSubmenu(StrId::STR_BTN_PAGE_FORWARD), + // Power button: short=ignore, double=ignore, long=sleep (via hold timer, not event system) + SettingInfo::Enum(StrId::STR_BTN_SHORT_PRESS, &CrossPointSettings::btnShortPower, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnShortPower", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_POWER), + SettingInfo::Enum(StrId::STR_BTN_DOUBLE_PRESS, &CrossPointSettings::btnDoublePower, + {StrId::STR_BTN_DEF_IGNORE, BTN_ACT_OPTIONS}, "btnDoublePower", StrId::STR_CAT_CONTROLS) + .withSubmenu(StrId::STR_BTN_POWER), + SettingInfo::Enum(StrId::STR_BTN_LONG_PRESS, &CrossPointSettings::btnLongPower, {StrId::STR_BTN_DEF_SLEEP}, "btnLongPower", StrId::STR_CAT_CONTROLS) - .withSubmenu(StrId::STR_MENU_BTN_ACTIONS), + .withSubmenu(StrId::STR_BTN_POWER), -#undef BTN_ACTION_ENUM_VALUES +#undef BTN_ACT_OPTIONS // --- System --- SettingInfo::Toggle(StrId::STR_SHOW_HIDDEN_FILES, &CrossPointSettings::showHiddenFiles, "showHiddenFiles", diff --git a/src/activities/reader/EpubReaderActivity.cpp b/src/activities/reader/EpubReaderActivity.cpp index 5abbaa56..d80e9729 100644 --- a/src/activities/reader/EpubReaderActivity.cpp +++ b/src/activities/reader/EpubReaderActivity.cpp @@ -295,37 +295,6 @@ void EpubReaderActivity::loop() { return; } - const bool screenshotChordReleased = gpio.wasReleased(HalGPIO::BTN_POWER) && gpio.wasReleased(HalGPIO::BTN_DOWN); - - // Handle short power button press for footnotes - if (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::FOOTNOTES && - mappedInput.wasReleased(MappedInputManager::Button::Power) && !screenshotChordReleased) { - if (currentPageFootnotes.size() == 1) { - navigateToHref(currentPageFootnotes[0].href, true); - } else if (currentPageFootnotes.size() > 1) { - ReaderUtils::enforceExitFullRefresh(renderer); - startActivityForResult(std::make_unique(renderer, mappedInput, currentPageFootnotes), - [this](const ActivityResult& result) { - if (!result.isCancelled) { - const auto& footnoteResult = std::get(result.data); - navigateToHref(footnoteResult.href, true); - } - requestUpdate(); - }); - } - return; - } - - // Star page toggle via short power button press - if (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::STAR_PAGE && - mappedInput.wasReleased(MappedInputManager::Button::Power)) { - if (section && section->currentPage >= 0 && section->currentPage < section->pageCount) { - bookmarkStore.toggle(static_cast(currentSpineIndex), static_cast(section->currentPage)); - requestUpdate(); - } - return; - } - auto [prevTriggered, nextTriggered] = ReaderUtils::detectPageTurn(mappedInput); if (!prevTriggered && !nextTriggered) { return; @@ -1905,6 +1874,46 @@ void EpubReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION requestUpdate(); break; } + case BA::BTN_EXIT_READER: + ReaderUtils::enforceExitFullRefresh(renderer); + finish(); + break; + case BA::BTN_READER_MENU: + if (epub) { + const int currentPage = section ? section->currentPage + 1 : 0; + const int totalPages = section ? section->pageCount : 0; + float bookProgress = 0.0f; + if (epub->getBookSize() > 0 && section && section->pageCount > 0) { + const float chapterProgress = + static_cast(section->currentPage) / static_cast(section->pageCount); + bookProgress = epub->calculateProgress(currentSpineIndex, chapterProgress) * 100.0f; + } + const int bookProgressPercent = clampPercent(static_cast(bookProgress + 0.5f)); + const bool isCurrentPageStarred = section && bookmarkStore.has(static_cast(currentSpineIndex), + static_cast(section->currentPage)); + ReaderUtils::enforceExitFullRefresh(renderer); + startActivityForResult( + std::make_unique( + renderer, mappedInput, epub->getTitle(), currentPage, totalPages, bookProgressPercent, + SETTINGS.orientation, !currentPageFootnotes.empty(), bookEmbeddedStyleOverride, + bookImageRenderingOverride, bookFontFamilyOverride, bookFontSizeOverride, SETTINGS.textDarkness, + !bookmarkStore.isEmpty(), isCurrentPageStarred), + [this](const ActivityResult& result) { + const auto& menu = std::get(result.data); + applyOrientation(menu.orientation); + applyTextDarkness(menu.textDarkness); + toggleAutoPageTurn(menu.pageTurnOption); + applyBookReaderOverrides(menu.embeddedStyleOverride, menu.imageRenderingOverride, menu.fontFamilyOverride, + menu.fontSizeOverride); + if (!result.isCancelled) { + onReaderMenuConfirm(static_cast(menu.action)); + } + }); + } + break; + case BA::BTN_KOREADER_SYNC: + launchKOReaderSync(SyncLaunchMode::COMPARE); + break; default: break; } diff --git a/src/activities/reader/MdReaderActivity.cpp b/src/activities/reader/MdReaderActivity.cpp index a2d1001d..98aaa51e 100644 --- a/src/activities/reader/MdReaderActivity.cpp +++ b/src/activities/reader/MdReaderActivity.cpp @@ -947,6 +947,10 @@ void MdReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION ac }); } break; + case BA::BTN_EXIT_READER: + ReaderUtils::enforceExitFullRefresh(renderer); + finish(); + break; default: break; } diff --git a/src/activities/reader/ReaderUtils.h b/src/activities/reader/ReaderUtils.h index af8c9bc7..da5da0b5 100644 --- a/src/activities/reader/ReaderUtils.h +++ b/src/activities/reader/ReaderUtils.h @@ -64,9 +64,7 @@ struct PageTurnResult { inline PageTurnResult detectPageTurn(const MappedInputManager& input) { const bool prev = input.wasReleased(MappedInputManager::Button::PageBack) || input.wasReleased(MappedInputManager::Button::Left); - const bool powerTurn = SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - input.wasReleased(MappedInputManager::Button::Power); - const bool next = input.wasReleased(MappedInputManager::Button::PageForward) || powerTurn || + const bool next = input.wasReleased(MappedInputManager::Button::PageForward) || input.wasReleased(MappedInputManager::Button::Right); return {prev, next}; } diff --git a/src/activities/reader/TxtReaderActivity.cpp b/src/activities/reader/TxtReaderActivity.cpp index 7e46540d..4e87e54d 100644 --- a/src/activities/reader/TxtReaderActivity.cpp +++ b/src/activities/reader/TxtReaderActivity.cpp @@ -155,16 +155,6 @@ void TxtReaderActivity::loop() { return; } - // Star page toggle via short power button press - if (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::STAR_PAGE && - mappedInput.wasReleased(MappedInputManager::Button::Power)) { - if (currentPage >= 0) { - bookmarkStore.toggle(0, static_cast(currentPage)); - } - requestUpdate(); - return; - } - // Open starred pages list via Confirm button if (mappedInput.wasReleased(MappedInputManager::Button::Confirm) && !bookmarkStore.isEmpty()) { ReaderUtils::enforceExitFullRefresh(renderer); @@ -826,6 +816,10 @@ void TxtReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION a clampPage(); requestUpdate(); break; + case BA::BTN_EXIT_READER: + ReaderUtils::enforceExitFullRefresh(renderer); + finish(); + break; default: break; } diff --git a/src/activities/reader/XtcReaderActivity.cpp b/src/activities/reader/XtcReaderActivity.cpp index cb83bf07..14b4e832 100644 --- a/src/activities/reader/XtcReaderActivity.cpp +++ b/src/activities/reader/XtcReaderActivity.cpp @@ -94,9 +94,7 @@ void XtcReaderActivity::loop() { const bool prevTriggered = mappedInput.wasReleased(MappedInputManager::Button::PageBack) || mappedInput.wasReleased(MappedInputManager::Button::Left); - const bool powerPageTurn = SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::PAGE_TURN && - mappedInput.wasReleased(MappedInputManager::Button::Power); - const bool nextTriggered = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || powerPageTurn || + const bool nextTriggered = mappedInput.wasReleased(MappedInputManager::Button::PageForward) || mappedInput.wasReleased(MappedInputManager::Button::Right); if (!prevTriggered && !nextTriggered) { @@ -469,6 +467,10 @@ void XtcReaderActivity::onButtonAction(const CrossPointSettings::BUTTON_ACTION a currentPage = (currentPage >= 10) ? currentPage - 10 : 0; requestUpdate(); break; + case BA::BTN_EXIT_READER: + ReaderUtils::enforceExitFullRefresh(renderer); + finish(); + break; default: break; } diff --git a/src/main.cpp b/src/main.cpp index cc93abe2..15296b51 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -370,14 +370,6 @@ void loop() { } } - // Refresh screen when power button is short-pressed with FORCE_REFRESH setting. - if (SETTINGS.shortPwrBtn == CrossPointSettings::SHORT_PWRBTN::FORCE_REFRESH && - mappedInputManager.wasReleased(MappedInputManager::Button::Power)) { - LOG_DBG("MAIN", "Manual screen refresh triggered"); - RenderLock lock; - renderer.displayBuffer(HalDisplay::HALF_REFRESH); - } - if (!gpio.isPressed(HalGPIO::BTN_POWER)) { powerHoldStart = 0; } @@ -395,6 +387,13 @@ void loop() { using B = MappedInputManager::Button; ButtonEventManager::ButtonEvent ev; while (buttonEventManager.consumeEvent(ev)) { + // Up/Down share physical pins with PageBack/PageForward via sideButtonLayout. + // ButtonEventManager only runs FSMs for PageBack/PageForward (not Up/Down) to avoid + // double-firing. Here we resolve Up/Down settings as aliases of the side-button events: + // with PREV_NEXT layout, PageBack = BTN_UP and PageForward = BTN_DOWN, so the + // btnShort/Double/LongUp/Down settings apply when PageBack/PageForward fires. + const bool prevNext = static_cast(SETTINGS.sideButtonLayout) == + CrossPointSettings::SIDE_BUTTON_LAYOUT::PREV_NEXT; auto actionFor = [&](B btn) -> uint8_t { switch (ev.type) { case ButtonEventManager::PressType::Short: @@ -408,13 +407,15 @@ void loop() { case B::Right: return SETTINGS.btnShortRight; case B::Up: - return SETTINGS.btnShortUp; + return BA::BTN_DEFAULT; // no dedicated FSM case B::Down: - return SETTINGS.btnShortDown; + return BA::BTN_DEFAULT; // no dedicated FSM case B::PageBack: - return SETTINGS.btnShortPageBack; + if (SETTINGS.btnShortPageBack != BA::BTN_DEFAULT) return SETTINGS.btnShortPageBack; + return prevNext ? SETTINGS.btnShortUp : SETTINGS.btnShortDown; case B::PageForward: - return SETTINGS.btnShortPageForward; + if (SETTINGS.btnShortPageForward != BA::BTN_DEFAULT) return SETTINGS.btnShortPageForward; + return prevNext ? SETTINGS.btnShortDown : SETTINGS.btnShortUp; case B::Power: return SETTINGS.btnShortPower; } @@ -430,13 +431,15 @@ void loop() { case B::Right: return SETTINGS.btnDoubleRight; case B::Up: - return SETTINGS.btnDoubleUp; + return BA::BTN_DEFAULT; // no dedicated FSM case B::Down: - return SETTINGS.btnDoubleDown; + return BA::BTN_DEFAULT; // no dedicated FSM case B::PageBack: - return SETTINGS.btnDoublePageBack; + if (SETTINGS.btnDoublePageBack != BA::BTN_DEFAULT) return SETTINGS.btnDoublePageBack; + return prevNext ? SETTINGS.btnDoubleUp : SETTINGS.btnDoubleDown; case B::PageForward: - return SETTINGS.btnDoublePageForward; + if (SETTINGS.btnDoublePageForward != BA::BTN_DEFAULT) return SETTINGS.btnDoublePageForward; + return prevNext ? SETTINGS.btnDoubleDown : SETTINGS.btnDoubleUp; case B::Power: return SETTINGS.btnDoublePower; } @@ -452,13 +455,15 @@ void loop() { case B::Right: return SETTINGS.btnLongRight; case B::Up: - return SETTINGS.btnLongUp; + return BA::BTN_DEFAULT; // no dedicated FSM case B::Down: - return SETTINGS.btnLongDown; + return BA::BTN_DEFAULT; // no dedicated FSM case B::PageBack: - return SETTINGS.btnLongPageBack; + if (SETTINGS.btnLongPageBack != BA::BTN_DEFAULT) return SETTINGS.btnLongPageBack; + return prevNext ? SETTINGS.btnLongUp : SETTINGS.btnLongDown; case B::PageForward: - return SETTINGS.btnLongPageForward; + if (SETTINGS.btnLongPageForward != BA::BTN_DEFAULT) return SETTINGS.btnLongPageForward; + return prevNext ? SETTINGS.btnLongDown : SETTINGS.btnLongUp; case B::Power: return SETTINGS.btnLongPower; } @@ -506,6 +511,21 @@ void loop() { case BA::BTN_FOOTNOTES: activityManager.dispatchButtonAction(BA::BTN_FOOTNOTES); break; + case BA::BTN_NEXT_SECTION: + activityManager.dispatchButtonAction(BA::BTN_NEXT_SECTION); + break; + case BA::BTN_PREV_SECTION: + activityManager.dispatchButtonAction(BA::BTN_PREV_SECTION); + break; + case BA::BTN_EXIT_READER: + activityManager.dispatchButtonAction(BA::BTN_EXIT_READER); + break; + case BA::BTN_READER_MENU: + activityManager.dispatchButtonAction(BA::BTN_READER_MENU); + break; + case BA::BTN_KOREADER_SYNC: + activityManager.dispatchButtonAction(BA::BTN_KOREADER_SYNC); + break; default: break; }