Skip to content

Releases: fardroid/Simple-LG-launcher

1.10.0

Choose a tag to compare

@fardroid fardroid released this 29 Oct 09:57
761a100
  • Cards in columns (lib/boardlayout.ts): the clock and the weather, then the calendar or the news, with the quote of the day under the calendar or the news. With both the calendar and the news on, three columns of 560 px; the clock puts the date under the time there and shrinks its digits only when the time would not fit. A card alone in its column takes the whole height (the calendar and the news without the quote, the quote alone). With the news and the quote off, everything stands exactly where it did. ↑ from the app row goes to the column above the selected tile; ↑ from a card with nothing above it goes to the next column on the right (the weather still leads to the calendar).
  • News (Settings → Widgets → News): headlines from Google News for a chosen country (52 editions; in the launcher's language when the country has an edition in it, else in the country's own). Until one is chosen, the TV's country when it has an edition in the launcher's language, otherwise that language's own country, so all thirteen languages get news in them and from up to eight RSS or Atom feeds of your own. RSS 2.0, RSS 1.0 and Atom are read, in any encoding the feed declares (windows-1251 too); the feeds are joined newest first, without repeats, and only the last two days are kept. On the card ↑ ↓ choose a headline, ← → turn the pages (they turn by themselves every 20 s while the remote is elsewhere), and OK shows the headline over the screen with its description and a QR code of its link (qrcode-generator, MIT). Most sites send no CORS headers, so on a TV the feeds come through the Homebrew Channel: curl or wget saves them to a file, which is read back in pieces.
  • Quote of the day (Settings → Widgets): from Wikiquote, in the launcher's language. The editors' quote of the day from the main page where there is one (en, es, pl, zh, ko, tr, pt, uk; the Italian one from its feed); otherwise, and on a day left empty, a quote picked by the date from the page of one of about 400 writers, poets, thinkers and scientists born before 1920 (a Wikidata query, kept for a month). Wikimedia lets the web view read both, so it works without root. The text is set as large as the card allows.
  • ← → between the cards. On the weather they choose the day and, past the first or the last, go on to the card beside; on the news they turn the pages and go on past the first or the last; on the calendar's events they go on at once. The calendar has two steps: ↑ above its first event goes to its head (the date and the arrows, lit up), where ← → change the day, ↓ goes back to the events and ↑ opens the month. In the month ← → again go to the cards beside, ↑ goes to its head, where ← → turn the months, and ↓ from the month's days goes back to the day.
  • All the day's events on the calendar card, in a list that scrolls an event at a time with ↑ ↓ (or the wheel); it fades out at an edge with more beyond it.
  • In three columns the weather card shows five days instead of seven, so the names and temperatures keep their room.
  • The pointer on the home screen: pointing at the weather, the calendar or the news gives the card the focus (a day or a headline is chosen too), and pointing back at the apps returns it. With the pointer resting near an end of the app row, the row glides on by itself, faster the nearer the end, and stays where it stopped.
  • Wallpaper gallery: Settings → Wallpaper → Picture shows the places, folders and pictures as tiles, five across, each picture with its preview (← → ↑ ↓, or the pointer). The TV has nothing that shrinks a JPEG, so the launcher makes the previews itself, one at a time and nearest to the highlight first, and keeps them while it stays loaded (lib/thumbs.ts). Photos from a camera or phone carry a small preview of their own in their first bytes, so only that much of the file is read.
  • Several pictures for the wallpaper: in the gallery OK ticks pictures (in any folders), as the apps are ticked in Settings, and leaving the gallery shows them: one picture, or a slideshow of the ticked ones (with the same interval and shuffle as a folder). The default background and a folder's Slideshow tile are still chosen at once.
  • The weather's hourly curve is drawn at the card's own width.

1.9.5

Choose a tag to compare

@fardroid fardroid released this 29 Oct 07:43
b459022
  • Switching the official way on could fail and undo itself. It restarted the app manager first and then checked that Home opens the launcher, giving it 8 seconds; a launcher that has to start from scratch on a busy TV took longer, so the way was switched back off. Home is now checked before the restart, with 20 seconds.
  • After the app manager is restarted at start-up, the launcher is opened by its own id: just after a restart the app manager still opens LG Home when asked for the Home app.
  • Switching to the official way takes about 8 seconds instead of 25 to 30: the launcher is kept in front of the LG Home that the restarted app manager brings up in the background. A second switch pressed meanwhile was refused as still running.
  • Switching to the official way takes about 8 seconds instead of 25 to 30: keeping the launcher in front of the LG Home that the restarted app manager brings up is done in the background (a second switch pressed meanwhile was refused as still running). It stops as soon as the way is switched off, so it never opens the launcher over another choice.
  • The official way's description in Settings is shorter: it ran off the bottom of the screen.
  • With LG's start with Home off, the TV starts as if it were switched on into an input: no webOS logo at start-up.

1.9.4

Choose a tag to compare

@fardroid fardroid released this 29 Oct 00:06
0204d6c
  • The official way, reworked: the TV wakes up straight into the launcher. Choosing the launcher as the TV's Home app (setDefaultApp) covers the Home button and Back out of the last app, but waking from standby does not ask for it: the TV's start-up opens LG Home by name while LG's start with Home is on, and its last input otherwise. So the official way now also switches start with Home off and names the launcher as the TV's last input (lastInputApp, physicalLastInputApp; the trick of openhome-webos). Opening an HDMI input names that input again, so the launcher names itself once more when it comes to the front and a few seconds after it goes to the back. Both settings are kept as they were and put back when the official way is switched off.
  • Kept loaded through standby. When the TV goes to standby its app manager closes every app but those in com.webos.applicationManager.keepAliveApps (LG Home is one), so the launcher had to start from scratch after waking: 3 to 5 seconds of black. The official way mounts a copy of each config file that sets that list, with the launcher added, has the config service read them again and restarts the app manager. The launcher is now back about a second after waking. The copies live in RAM, so the boot link mounts them again at every start and restarts the app manager once: after a full restart the launcher shows up about a minute after switching on, after a short black screen. After an update, the first load of the launcher does the same once (the launcher closes and opens again).
  • The wake-up guard of 1.9.3 (tools/wakeguard.py) is gone. A TV updated from 1.9.3 has it stopped and removed the first time the launcher loads.
  • Settings → Home screen → How the launcher opens: the official way's description now says what it changes on the TV, and its pros and cons.

1.9.3

Choose a tag to compare

@fardroid fardroid released this 28 Oct 13:49
e745571
  • Official way: waking the TV. The TV's start-up opens LG Home by name when it wakes from standby, whatever app is Home, and the Home key does nothing over it. A small guard (tools/wakeguard.py, started with the official way and at every full start) opens the launcher when the TV wakes up with LG Home in front. An app the TV woke up into (a console on HDMI, an app button on the remote) is left alone. LG's "start with Home" is left as it is.
  • Updating keeps the official way up to date. Its scripts are copied out of the app (so they can give LG Home back if the app is uninstalled), and those copies did not change with an update. Each time the launcher is loaded it now refreshes them from the installed version and starts the guard (defaulthome.sh refresh; nothing happens when the official way is off). TVs updated from 1.9.2 get the guard this way, without switching anything.
  • The weather and the calendar try again 15 s, 30 s and 1 minute after a failed fetch (it was 2 minutes), and at once when the TV's network comes back: right after the TV starts, they waited with empty cards.

1.9.2

Choose a tag to compare

@fardroid fardroid released this 28 Oct 08:16
acb740a
  • Polish. Thanks to DriftEngineer, who translated it (pull request #4)! It comes with its own plural rule (1 zdjęcie, 3 zdjęcia, 5 zdjęć, 22 zdjęcia, but 21 zdjęć, not like Russian). The texts added in 1.9.2 were translated here; corrections are welcome.
  • How the launcher opens, chosen on the TV: Settings → Home screen → How the launcher opens lists four ways, each with how it works, its pros and its cons. OK twice switches; the way that is on is switched off and checked first, and a way that does not take is undone (tools/homemode.sh, packaged in the app's tools/ folder).
    • Official: webOS's own choice of Home app (appCategory: ["home"] and setDefaultApp, tools/defaulthome.sh; the method of Lumen's docs/native-home.md). Nothing mounted, and it lasts across a full restart. A boot link gives LG Home back if the launcher has been uninstalled.
    • Swap: tools/takeover.sh, as before. Helper: the Home key helper (version 18 stands down while the official way is on). Off.
  • Pixel shift (OLED) (Settings → Appearance: Auto, On or Off): the clock, the cards and the apps move a few whole pixels once a minute round a loop of eight places (Hearth's idea). It follows the clock's own once-a-minute redraw, so it costs no timer. Auto (the default) switches it on when the TV's model name starts with OLED (asked once, getSystemInfo modelName).
  • App names: all, the selected one only, or none (Settings → Appearance → App names). With the selected one only, the others keep their room, so nothing moves.
  • Sharper on the TV: nothing with text is scaled any more but the focused card (Settings rows, pickers; the selected app's icon still grows, its name stays at its size), and the app row, the dialog and the toast sit on whole pixels (no translate(-50%), rounded offsets). Text drawn at fractional positions or scales is soft through the TV's 2x scale-up of its 1080p picture.
  • Start-up picture (Settings → Wallpaper): what the TV shows for a moment while the launcher starts after being unloaded: the wallpaper (the default), the logo card or black. The picture (splash-wallpaper.jpg) is written into the installed app's folder (as Luma does); the wallpaper's copy is the one the launcher already keeps for its own fast start. The Swap's copy of LG Home now shows it too (takeover.sh: splashBackground instead of noSplashOnLaunch).
  • The frosted glass changes with the wallpaper: it starts to fade in the same frame as the picture (the plate sets its layer up while it renders, not after the next paint), and at start it comes from the cache with the picture instead of being worked out from it again a moment later. The plate's colour is drawn in the same two layers, so a light plate turns dark in the same fade instead of at once, and the new glass fades in over the old one (the sharp wallpaper no longer shows through half-way). The rim (the bright top edge) stays above both layers.
  • Frost (Settings → Appearance, under Frosted glass): how much the glass blurs the picture behind it, 100% (as before) down to 30%. A change remakes the glass of the picture on screen at once; the saved glass for the fast start is kept per setting.
  • The clock's digits are centred in their card by what the font really draws (measured on the canvas), not by where its line box puts them: the time and the date move together by whole pixels. Fonts with low digits (Cormorant, Roboto Mono, the TV's own) sat low before. Web views too old to measure text (Chrome 53) keep the layout as it was.
  • More of the screen on whole pixels: the clock's date (the time's width is rounded up), Settings' headings, rows, values, buttons and pickers (whole-pixel line heights; button and value widths rounded up by useSnapWidths) and the toast (an even width).
  • Updates reach a launcher that stayed loaded: each build writes its id to assets/version.txt; the launcher reads it whenever it goes to the background or is relaunched and loads itself again when another build is on disk (a rebuild of the same version too). Before, the TV kept the old version running (above all the Swap's copy behind the Home button) until it was fully restarted. An update from 1.9.1 or older still needs that one restart, as those versions don't check. npm run install:tv also closes the launcher and the Swap's copy, so the new version loads without restarting the TV; AGENTS.md says how to do the same after installing another way.
  • The official way works on a TV whose list of default apps names no Home app (as out of the box: LG Home is then Home); it was refused with "could not read the TV's default apps".
  • A switch of the way that fails turns the way that was on back on (it was left with none), and the Home key helper setting is changed only when a switch worked.
  • Tests run on macOS too (timeout falls back to perl).

1.9.1

Choose a tag to compare

@fardroid fardroid released this 27 Oct 09:40
  • Twelve languages. Spanish, French, German, Italian, Portuguese, Turkish, Ukrainian, Chinese (Simplified), Japanese and Korean join English and Russian. Same as the TV picks the TV's language when the launcher has it, English otherwise. Dates, month and weekday names come from the browser's own locale data; the city search answers in the chosen language.
  • The texts of the other languages are dictionaries in src/lib/locales/, keyed by the English text; a text missing from one shows in English. npm test checks that every tr() text has an entry in every language.