From 1aa4169955b00e64104bbd9c8ade8c8dd227ce07 Mon Sep 17 00:00:00 2001 From: Doug Nelson Date: Fri, 13 Sep 2024 13:25:08 -0500 Subject: [PATCH] Updated and new launchers plus UI fixes v4.0.5 What's New: - App launcher for KPN iTV (closes #506) - App launcher for coupang play (closes #510) What's Changed / Fixed: - Updated Amazon Fire launcher code for Ziggo Go (closes #507) - Stopped unwanted scrolling when double tapping (closes #508) - Updated launcher code for Jellyfin (closes #509) - Fixed an annoying tap highlight color issue - Ignore right clicks so they don't register as button holds What's Coming Up: - Work to add Homatics devices is underway (#41) Can't see these changes after updating? Visit this link: https://github.com/PRProd/HA-Firemote/wiki/Force-a-Refresh --- dist/HA-Firemote.js | 465 +++++++++++++++++++++++++++++++++++++- dist/launcher-buttons.js | 275 +++++++++++++++++++--- dist/supported-devices.js | 27 +++ 3 files changed, 719 insertions(+), 48 deletions(-) diff --git a/dist/HA-Firemote.js b/dist/HA-Firemote.js index 145c84d..a811f2d 100644 --- a/dist/HA-Firemote.js +++ b/dist/HA-Firemote.js @@ -1,9 +1,9 @@ -const HAFiremoteVersion = 'v4.0.4'; +const HAFiremoteVersion = 'v4.0.5'; import {LitElement, html, css, unsafeHTML, unsafeCSS, styleMap} from './lit/lit-all.min.js'; -import {launcherData, launcherCSS} from "./launcher-buttons.js?version=v4.0.4"; -import {rosettaStone} from './language-translations.js?version=v4.0.4'; -import {devices} from './supported-devices.js?version=v4.0.4'; +import {launcherData, launcherCSS} from "./launcher-buttons.js?version=v4.0.5"; +import {rosettaStone} from './language-translations.js?version=v4.0.5'; +import {devices} from './supported-devices.js?version=v4.0.5'; console.groupCollapsed("%c 🔥 FIREMOTE-CARD 🔥 %c "+HAFiremoteVersion+" installed ", "color: orange; font-weight: bold; background: black", "color: green; font-weight: bold;"), console.log("Readme:", "https://github.com/PRProd/HA-Firemote"), @@ -28,10 +28,12 @@ const devicemap = new Map(Object.entries(devices)); var appmap = new Map(Object.entries(launcherData)); const translationmap = new Map(Object.entries(rosettaStone)); + // Set the max number of app launcher buttons for each remote style const appButtonMax = { "AF4": 6, "AF5": 6, "AF6": 6, "AFJTV": 6, "AR1": 10, "AR2": 8, "AR3": 8, "CC1": 8, "CC2": 8, "CC3": 8, "NS2": 6, "ON1": 8, "ON2": 8, "RVRP": 10, "RHR": 10, "RTR": 8, - "RWR": 10, "RVR": 10, "RSR": 10, "XM1": 10, "XM2": 10, "AL1": appmap.size, "AL2": appmap.size,}; + "RWR": 10, "RVR": 10, "RSR": 10, "XM1": 10, "XM2": 10, "HO1": 4, "HO2": 4, "HO3": 4, + "AL1": appmap.size, "AL2": appmap.size,}; function deviceAttributeQuery(deviceAttribute, configvar){ @@ -457,6 +459,7 @@ class FiremoteCard extends LitElement { outline: 0; isolation: isolate; direction: ltr; + -webkit-tap-highlight-color: rgb(0 0 0 / 0%); } .hidden { @@ -2185,6 +2188,324 @@ class FiremoteCard extends LitElement { height: auto; } + /* Homatics styles */ + .homatics-remote-body { + align-content: start; + grid-row-gap: calc(var(--sz)* 1rem); + background: #ebebea; + border-color: #dcdcdc; + border-radius: calc(var(--sz)* 2.8rem); + min-height: calc(var(--sz)* 48.5rem); + padding: calc(var(--sz) * 1.1rem) calc(var(--sz) * 0.714rem) calc(var(--sz) * 2.143rem) calc(var(--sz) * 0.714rem); + box-shadow: 0 calc(var(--sz) * 0.214rem) calc(var(--sz) * 0.214rem) rgb(0 0 0 / 10%); + } + + .homatics-remote-body.HO2, .homatics-remote-body.HO3 { + background: #252525; + border-color: #2f2f2f; + } + + .HO1 .remote-button { + background: #fff; + color: rgb(106, 106, 106); + border: solid rgb(186 186 186) calc(var(--sz)* 0.0714rem); + box-shadow: rgb(0 0 0 / 15%) 0px calc(var(--sz)* 0.063rem) calc(var(--sz)* 0.188rem); + } + + .HO2 .remote-button, .HO3 .remote-button { + background: #2f2f2f; + border: solid rgb(15 15 15) calc(var(--sz)* 0.0714rem); + } + + .HO1 .remote-button:active { + box-shadow: inset rgb(0 0 0 / 42%) 0px calc(var(--sz)* 0.1rem) calc(var(--sz)* 0.188rem); + filter: brightness(0.94); + border: solid rgb(232 232 232) calc(var(--sz)* 0.0714rem); + } + + .HO2 .remote-button:active, .HO3 .remote-button:active { + border: solid rgb(10 10 10) calc(var(--sz)* 0.0714rem); + } + + .HO1 .litbutton > ha-icon { + color: #00979b !important; + } + + .homatics-remote-body .micHole { + background: black; + border-radius: 100%; + height: calc(var(--sz)* 0.3rem); + aspect-ratio: 1 / 1; + align-self: end; + justify-self: center; + } + + .homatics-remote-body #power-button, .homatics-remote-body #input-button { + height: calc(var(--sz)* 2.75rem); + width: calc(var(--sz)* 2.75rem); + } + + .homatics-remote-body #power-button { + justify-self: left; + } + + .remote-body.HO1 .remote-button > ha-icon, .remote-body.HO2 .remote-button > ha-icon { + color: rgb(106 106 106); + } + + .remote-body.HO3 .remote-button > ha-icon { + color: rgb(245 245 245); + } + + .homatics-remote-body .remote-button.dark { + background: linear-gradient(180deg, rgb(168 168 168) 26%, rgb(144 144 144) 50%, rgb(128 128 128) 75%); + } + + .homatics-remote-body .remote-button.dark > ha-icon { + color: #000; + } + + .remote-body.HO3 .remote-button.light > ha-icon { + color: #464646; + } + + .homatics-remote-body .micNLight { + display: grid; + align-content: space-between; + padding: calc(var(--sz) * 0.25rem) 0; + } + + .homatics-remote-body .activityLight { + background: #ff0000; + box-shadow: #ff0000 0 0 calc(var(--sz)* 0.6rem) calc(var(--sz)* 0.05rem); + border-radius: 100%; + height: calc(var(--sz)* 0.4rem); + aspect-ratio: 1 / 1; + opacity: 0; + } + + .homatics-remote-body.HO3 .activityLight { + background: #adff87; + box-shadow: lime 0 0 calc(var(--sz)* 0.6rem) calc(var(--sz)* 0.05rem); + } + + .homatics-remote-body #input-button { + justify-self: right; + } + + .homatics-remote-body #bookmark-button, .homatics-remote-body #settings-button { + align-self: end; + } + + .homatics-remote-body #keyboard-button { + height: calc(var(--sz)* 3.572rem); + width: calc(var(--sz)* 3.572rem); + margin-bottom: calc(var(--sz)* 1.1rem); + } + + .homatics-remote-body .directionButtonContainer { + box-shadow: rgb(0 0 0 / 73%) calc(var(--sz)* 0.025rem) calc(var(--sz)* 0.025rem) calc(var(--sz)* 0.025rem); + background: black; + } + + .homatics-remote-body .directionButtonContainer:has(#down-button:active) { + box-shadow: none; + } + + .homatics-remote-body .dpadContainer { + align-items: center; + justify-items: center; + position: relative; + margin-top: calc(var(--sz)* -1.5rem); + margin-bottom: calc(var(--sz)* -1.5rem); + isolation: isolate; + } + + .homatics-remote-body .directionButtonContainer { + box-shadow: rgb(0 0 0 / 73%) calc(var(--sz)* 0.025rem) calc(var(--sz)* 0.025rem) calc(var(--sz)* 0.025rem); + background: #cacaca; + border: calc(var(--sz)* 0.0714rem) solid #cacaca; + } + + .homatics-remote-body .dpadbutton, .homatics-remote-body .dpadbutton:active { + all: unset; + cursor: pointer; + width: calc(var(--sz)* 5.5714rem); + height: calc(var(--sz)* 5.5714rem); + outline: solid #a6a6a6 calc(var(--sz)* 0.0714rem); + } + + .homatics-remote-body .dpadbutton { + background: #adadad; + appearance: none; + -webkit-appearance: none; + -moz-appearance: none; + -webkit-tap-highlight-color: transparent; + } + + .HO3 .dpadbutton { + background: rgb(216 216 216); + outline: solid rgb(200 200 200) calc(var(--sz)* 0.0714rem); + } + + .homatics-remote-body .dpadbutton:active { + background: rgb(153 153 153); + box-shadow: inset #4f4f4f 0 0 calc(var(--sz)* 0.35rem) 0px; + transform: none; + filter: none; + overflow: hidden; + backdrop-filter: none; + appearance: none; + } + + .HO3 .dpadbutton:active { + background: rgb(200 200 200); + box-shadow: none; + outline: solid #989898 calc(var(--sz)* 0.0714rem); + } + + .homatics-remote-body .centerbutton { + background: linear-gradient(180deg, #c8c8c8 0%, rgba(255, 255, 255, 1) 100%); + border: solid #a1a1a1 calc(var(--sz)* 0.25rem); + width: calc(var(--sz)* 5.13rem); + height: calc(var(--sz)* 5.13rem); + margin: 0px; + position: absolute; + box-sizing: border-box; + isolation: isolate; + } + + .HO3 .centerbutton { + background: linear-gradient(0deg, rgb(48 48 48) 26%, rgb(39 39 39) 50%, rgb(33 33 33) 75%); + } + + .homatics-remote-body .centerbutton:active { + transform: none; + filter: brightness(0.92); + border: solid #b3b3b3 calc(var(--sz)* 0.29rem); + } + + .HO3 .centerbutton:active { + filter: brightness(0.8); + } + + .homatics-remote-body #home-button { + align-self: end; + margin-top: calc(var(--sz)* 1.1rem); + z-index: 10; /* Required for companion app to prevent accidental push of down button */ + } + + .homatics-remote-body .volumeChannelSection { + grid-column-start: 1; + grid-column-end: 4; + display: grid; + grid-template-columns: 33% 1fr 33%; + grid-template-areas: "vol-up mute ch-up" + "vol-down mute ch-down"; + grid-row-gap: 0; + width: 100%; + justify-items: center; + align-items: center; + } + + .homatics-remote-body #volume-up-button-container { + grid-area: vol-up; + margin-bottom: 0; + border-bottom: 0; + font-size: calc(var(--sz)* 2rem); + } + + .homatics-remote-body #voltext { + max-width: calc(var(--sz)* 1.5rem); + max-height: calc(var(--sz)* 1rem);; + position: absolute; + justify-self: center; + padding-left: calc(var(--sz)* 1.1rem); + pointer-events: none; + } + + .homatics-remote-body #voltext > * { + fill: rgb(106 106 106); + } + + .homatics-remote-body #channel-up-button { + grid-area: ch-up; + margin-bottom: 0; + border-bottom: 0; + } + + .homatics-remote-body #mute-button { + grid-area: mute; + height: calc(var(--sz)* 2.6rem); + width: calc(var(--sz)* 2.6rem); + } + + #soundeqtext { + grid-area: mute; + max-width: calc(var(--sz)* 3.5rem); + max-height: calc(var(--sz)* 0.7rem); + margin-top: calc(var(--sz)* 4.1rem); + fill: rgb(106 106 106); + } + + .homatics-remote-body #volume-down-button { + grid-area: vol-down; + border-top: 0; + font-size: calc(var(--sz)* 2rem); + } + + .homatics-remote-body #channel-down-button { + grid-area: ch-down; + border-top: 0; + } + + .homatics-remote-body #volume-up-button:active, .homatics-remote-body #channel-up-button:active { + filter: none; + background: linear-gradient(0deg, rgba(255, 255, 255, 1) 0%, rgba(240, 240, 240, 1) 95%); + border: solid rgb(186 186 186) calc(var(--sz)* 0.0714rem); + border-bottom: 0; + } + + .homatics-remote-body.HO3 #volume-up-button:active, .homatics-remote-body.HO3 #channel-up-button:active { + filter: none; + background: linear-gradient(0deg, rgb(46 46 46) 0%, rgb(38 38 38) 95%); + border-bottom: 0; + } + + .homatics-remote-body #volume-down-button:active, .homatics-remote-body #channel-down-button:active { + filter: none; + background: linear-gradient(0deg, rgba(240, 240, 240, 1) 0%, rgba(255, 255, 255, 1) 95%); + box-shadow: none; + border: solid rgb(186 186 186) calc(var(--sz)* 0.0714rem); + border-top: 0; + } + + .homatics-remote-body.HO3 #volume-down-button:active, .homatics-remote-body.ho3 #channel-down-button:active { + filter: none; + background: linear-gradient(180deg, rgb(46 46 46) 0%, rgb(38 38 38) 95%); + box-shadow: none; + border-top: 0; + } + + .homatics-remote-body .srcButton { + border: solid #a7a7a7 calc(var(--sz) * 0.0714rem); + } + + .homaticsLogo { + position: absolute; + bottom: calc(var(--sz)* 3rem); + width: calc(var(--sz)* 12.286rem); + text-align: center; + } + + .homaticsLogo svg { + max-width: calc(var(--sz)* 6.5rem); + max-height: calc(var(--sz)* 3.2rem); + stroke: rgb(161 161 161); + } + /* end Homatics styles */ + + /* onn. styles */ .remote-body.ON1, .remote-body.ON2 { align-content: start; @@ -2267,9 +2588,10 @@ class FiremoteCard extends LitElement { color: #464646; } - .remote-body.ON1 .remote-button.dark.litbutton, + .remote-body.ON1 .remote-button.dark.litbutton { background: #004040; } + .remote-body.ON1 .remote-button.litbutton > ha-icon, .remote-body.ON1 .remote-button.dark.litbutton > ha-icon, .remote-body.ON2 .remote-button.dark.litbutton > ha-icon { @@ -2888,6 +3210,7 @@ class FiremoteCard extends LitElement { height: calc(var(--sz) * 5.7143rem); } `; +//` getState() { if(this._config.device_family === 'none' || this._config.entity === 'none') { return; } @@ -2914,7 +3237,18 @@ class FiremoteCard extends LitElement { } } - render() { + createRenderRoot() { + const root = super.createRenderRoot(); + // This section prevents unwanted scrolling on iOS devices when double clicking in a Sections view #508 + root.addEventListener( + 'dblclick', + (e) => (e.preventDefault()) + ); + return root; + } + + + render() { if (!this.hass || !this._config) { return html``; } @@ -2949,7 +3283,7 @@ class FiremoteCard extends LitElement { if(this._config.device_family == 'apple-tv') { AppLaunchButtonFilterCssValue = 'grayscale(0%) brightness(100%)'; } - else if (this._config.device_family == 'onn' || this._config.defaultRemoteStyle_override == 'ON1' || this._config.defaultRemoteStyle_override == 'ON2') { + else if (['onn', 'homatics'].includes(this._config.device_family) || ['ON1', 'ON2', 'HO1', 'HO2', 'HO3'].includes(this._config.defaultRemoteStyle_override)) { AppLaunchButtonFilterCssValue = 'grayscale(25%) brightness(80%)'; } var guiEditorDirection = this.hass.config.language == 'he' ? 'rtl' : 'ltr'; @@ -2985,6 +3319,8 @@ class FiremoteCard extends LitElement { } `; + + // Handle standard button highlight/lit states var powerStatusClass = '' var homeStatusClass = ''; @@ -3140,6 +3476,12 @@ class FiremoteCard extends LitElement { appLaunchButtons.set("confBtn3", config.app_launch_3 || 'disney-plus'); appLaunchButtons.set("confBtn4", config.app_launch_4 || 'paramount-plus'); } + else if(['HO1', 'HO2', 'HO3'].includes(displayedRemote)) { + appLaunchButtons.set("confBtn1", config.app_launch_1 || 'youtube'); + appLaunchButtons.set("confBtn2", config.app_launch_2 || 'netflix'); + appLaunchButtons.set("confBtn3", config.app_launch_3 || 'prime-video'); + appLaunchButtons.set("confBtn4", config.app_launch_4 || 'paramount-plus'); + } // Return button HTML @@ -3910,6 +4252,101 @@ class FiremoteCard extends LitElement { } + + // Render Homatics Remote Style HO1, HO2, HO3 + if ( ['HO1', 'HO2', 'HO3'].includes(getDeviceAttribute('defaultRemoteStyle'))) { + return html` + + + ${cssVars} + +
+ + ${drawDeviceName(this, this._config, 'top')} + + +
+
+
+
+ + + + + + +
+
+ + + + +
+ +
+ + + + + +
+
+ + +
+
+ + + + + + +
+ + ${drawAppLaunchButtons(this, this._config, 3, appButtonMax["ON1"])} + + + + + ${drawDeviceName(this, this._config, 'bottom')} + ${drawFiremoteVersionNumber(this, this._config)} + +
+ +
+ `; + } + + + // Render NVIDIA Shield Remote Style NS1 if ( getDeviceAttribute('defaultRemoteStyle') == 'NS1' ) { return html` @@ -5032,6 +5469,11 @@ class FiremoteCard extends LitElement { // Firemote Button Click or Click + Hold Handler buttonDown(clicked) { + // Ignore right clicks + if (clicked.which === 3) { + return; + } + // Inspect user prefs & setup click timer const _config = this._config; const _hass = this.hass; @@ -5237,7 +5679,6 @@ class FiremoteCard extends LitElement { // it was a hold pressedTarget.removeEventListener("mouseup", release, true); pressedTarget.removeEventListener("mouseout", mouseOutHandler, true); - //console.log('I detected a hold on '+buttonID+'!!'); resolve("hold"); } }, holdTime); @@ -5249,7 +5690,6 @@ class FiremoteCard extends LitElement { pressedTarget.removeEventListener("mouseup", release, true); pressedTarget.removeEventListener("pointerup", release, true); pressedTarget.removeEventListener("mouseout", mouseOutHandler, true); - //console.log('I detected a click on '+buttonID); resolve("click"); } @@ -5260,7 +5700,6 @@ class FiremoteCard extends LitElement { pressedTarget.removeEventListener("mouseup", release, true); pressedTarget.removeEventListener("pointerup", release, true); pressedTarget.removeEventListener("mouseout", mouseOutHandler, true); - //console.log('No action for '+buttonID); resolve(null); } }); @@ -5268,6 +5707,7 @@ class FiremoteCard extends LitElement { // After determining the button interaction type, // send the appropriate commands let actionType = await type; + if (actionType === null) {return;} if(actionType == 'click' || actionType == 'hold') { // Flash activity light if it exists @@ -7689,6 +8129,9 @@ class FiremoteCardEditor extends LitElement { + + + diff --git a/dist/launcher-buttons.js b/dist/launcher-buttons.js index e6c4e14..6d54a5e 100644 --- a/dist/launcher-buttons.js +++ b/dist/launcher-buttons.js @@ -24,7 +24,7 @@ const launcherData = { "button": '', "friendlyName": "ABC iview (AU)", "className": "abciviewButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "xiaomi"], "amazon-fire": { "appName": "au.net.abc.iview", "androidName": "au.net.abc.iview", @@ -38,6 +38,11 @@ const launcherData = { "androidName": "au.net.abc.iview", "adbLaunchCommand": "adb shell am start -a android.intent.action.VIEW -n au.net.abc.iview/.ui.router.TvLauncherActivity", }, + "homatics": { + "appName": "au.net.abc.iview", + "androidName": "au.net.abc.iview", + "adbLaunchCommand": "adb shell am start -a android.intent.action.VIEW -n au.net.abc.iview/.ui.router.TvLauncherActivity", + }, "nvidia-shield": { "appName": "au.net.abc.iview", "androidName": "au.net.abc.iview", @@ -55,7 +60,7 @@ const launcherData = { "button": '', "friendlyName": "Ace Stream Media", "className": "aceStreamMediaButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "org.acestream.media", "androidName": "org.acestream.media", @@ -65,6 +70,11 @@ const launcherData = { "androidName": "org.acestream.media.atv", "adbLaunchCommand": "adb shell am start -a android.intent.action.VIEW -n org.acestream.media.atv/org.videolan.vlc.gui.tv.MainTvActivity", }, + "homatics": { + "appName": "org.acestream.node", + "androidName": "org.acestream.node", + "adbLaunchCommand": "adb shell am start -a android.intent.action.VIEW -n org.acestream.node/org.acestream.engine.ui.MainWebViewActivity", + }, "nvidia-shield": { "appName": "org.acestream.media.atv", "androidName": "org.acestream.media.atv", @@ -87,7 +97,7 @@ const launcherData = { "button": '', "friendlyName": "Acorn TV", "className": "acornTvButton", - "deviceFamily": ["apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "apple-tv": { "appName": "Acorn TV", }, @@ -96,6 +106,11 @@ const launcherData = { "androidName": "com.acorntv.androidtv", "adbLaunchCommand": "adb shell am start -n com.acorntv.androidtv/com.globallogic.acorntv.ui.MainActivity", }, + "homatics": { + "appName": "com.acorntv.androidtv", + "androidName": "com.acorntv.androidtv", + "adbLaunchCommand": "adb shell am start -n com.acorntv.androidtv/com.globallogic.acorntv.ui.MainActivity", + }, "nvidia-shield": { "appName": "com.acorntv.androidtv", "androidName": "com.acorntv.androidtv", @@ -135,7 +150,7 @@ const launcherData = { "appName": "com.channel4.ondemand", "androidName": "com.channel4.ondemand", "adbLaunchCommand": "adb shell am start -n com.channel4.ondemand/com.novoda.all4.launch.LaunchActivity", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "xiaomi"], }, + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "xiaomi"], }, "allente": { @@ -153,7 +168,7 @@ const launcherData = { "button": '', "friendlyName": "Amazon Music", "className": "amazonMusicButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.amazon.bueller.music", "androidName": "com.amazon.bueller.music", @@ -167,6 +182,11 @@ const launcherData = { "androidName": "com.amazon.music.tv", "adbLaunchCommand": "adb shell am start -n com.amazon.music.tv/com.amazon.music.MainActivity", }, + "homatics": { + "appName": "com.amazon.music.tv", + "androidName": "com.amazon.music.tv", + "adbLaunchCommand": "adb shell am start -n com.amazon.music.tv/com.amazon.music.MainActivity", + }, "nvidia-shield": { "appName": "com.amazon.music.tv", "androidName": "com.amazon.music.tv", @@ -193,7 +213,7 @@ const launcherData = { "button": '', "friendlyName": "AMC+", "className": "amcPlusButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.amcplus.amcfiretv", "androidName": "com.amcplus.amcfiretv", @@ -207,6 +227,11 @@ const launcherData = { "androidName": "com.amcplus.amcandroidtv", "adbLaunchCommand": "adb shell am start -n com.amcplus.amcandroidtv/com.amcplus.tv.MainActivity", }, + "homatics": { + "appName": "com.amcplus.amcandroidtv", + "androidName": "com.amcplus.amcandroidtv", + "adbLaunchCommand": "adb shell am start -n com.amcplus.amcandroidtv/com.amcplus.tv.MainActivity", + }, "nvidia-shield": { "appName": "com.amcplus.amcandroidtv", "androidName": "com.amcplus.amcandroidtv", @@ -234,7 +259,7 @@ const launcherData = { "button-round": '', "friendlyName": "Apollo Group TV", "className": "apolloGroupTVButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "ctv.apollogroup.androidtv", "androidName": "tv.apollogroup.androidtv", @@ -245,6 +270,11 @@ const launcherData = { "androidName": "tv.apollogroup.androidtv", "adbLaunchCommand": "adb shell am start -n tv.apollogroup.androidtv/io.nitrix.tvstartupshow.ui.activity.SplashActivity", }, + "homatics": { + "appName": "ctv.apollogroup.androidtv", + "androidName": "tv.apollogroup.androidtv", + "adbLaunchCommand": "adb shell am start -n tv.apollogroup.androidtv/io.nitrix.tvstartupshow.ui.activity.SplashActivity", + }, "nvidia-shield": { "appName": "ctv.apollogroup.androidtv", "androidName": "tv.apollogroup.androidtv", @@ -286,7 +316,7 @@ const launcherData = { "button": '', "friendlyName": 'Apple TV', "className": "appleTvButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "Apple TV+ (Fire TV)", "androidName": "com.apple.atve.amazon.appletv", @@ -300,6 +330,11 @@ const launcherData = { "androidName": "com.apple.atve.androidtv.appletv", "adbLaunchCommand": "adb shell am start -n com.apple.atve.androidtv.appletv/.MainActivity", }, + "homatics": { + "appName": "com.apple.atve.androidtv.appletv", + "androidName": "com.apple.atve.androidtv.appletv", + "adbLaunchCommand": "adb shell am start -n com.apple.atve.androidtv.appletv/.MainActivity", + }, "nvidia-shield": { "appName": "com.apple.atve.androidtv.appletv", "androidName": "com.apple.atve.androidtv.appletv", @@ -412,7 +447,7 @@ const launcherData = { "button": '', "friendlyName": "ArchiTV for Archillect", "className": "archiTVForArchillectButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "space.linuxct.architv", "androidName": "space.linuxct.architv", @@ -423,6 +458,11 @@ const launcherData = { "androidName": "space.linuxct.architv", "adbLaunchCommand": "adb shell am start -n space.linuxct.architv/space.linuxct.architv.MainActivity", }, + "homatics": { + "appName": "space.linuxct.architv", + "androidName": "space.linuxct.architv", + "adbLaunchCommand": "adb shell am start -n space.linuxct.architv/space.linuxct.architv.MainActivity", + }, "nvidia-shield": { "appName": "space.linuxct.architv", "androidName": "space.linuxct.architv", @@ -445,7 +485,7 @@ const launcherData = { "button": '', "friendlyName": "ARD Mediathek", "className": "ardMediathekButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "de.swr.ard.avp.mobile.android.amazon", "androidName": "de.swr.ard.avp.mobile.android.amazon", @@ -459,6 +499,11 @@ const launcherData = { "androidName": "de.swr.avp.ard.tv", "adbLaunchCommand": "adb shell am start -n de.swr.avp.ard.tv/de.swr.avp.ard.tv.TvActivity", }, + "homatics": { + "appName": "de.swr.avp.ard.tv", + "androidName": "de.swr.avp.ard.tv", + "adbLaunchCommand": "adb shell am start -n de.swr.avp.ard.tv/de.swr.avp.ard.tv.TvActivity", + }, "nvidia-shield": { "appName": "de.swr.avp.ard.tv", "androidName": "de.swr.avp.ard.tv", @@ -492,7 +537,7 @@ const launcherData = { "button": '', "friendlyName": 'ARTE', "className": "arteButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "de.swr.ard.avp.mobile.android.amazon", "androidName": "de.swr.ard.avp.mobile.android.amazon", @@ -506,6 +551,11 @@ const launcherData = { "androidName": "tv.arte.plus7", "adbLaunchCommand": "adb shell am start -n tv.arte.plus7/.leanback.MainActivity", }, + "homatics": { + "appName": "tv.arte.plus7", + "androidName": "tv.arte.plus7", + "adbLaunchCommand": "adb shell am start -n tv.arte.plus7/.leanback.MainActivity", + }, "nvidia-shield": { "appName": "tv.arte.plus7", "androidName": "tv.arte.plus7", @@ -529,7 +579,7 @@ const launcherData = { "button-round": '', "friendlyName": 'BabyTV', "className": "babyTvButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.appbabytvvideo", "androidName": "com.appbabytvvideo", @@ -543,6 +593,11 @@ const launcherData = { "androidName": "com.applicaster.babytv.vod", "adbLaunchCommand": "adb shell am start -n com.applicaster.babytv.vod/com.applicaster.ui.activities.MainActivity", }, + "homatics": { + "appName": "com.applicaster.babytv.vod", + "androidName": "com.applicaster.babytv.vod", + "adbLaunchCommand": "adb shell am start -n com.applicaster.babytv.vod/com.applicaster.ui.activities.MainActivity", + }, "nvidia-shield": { "appName": "com.applicaster.babytv.vod", "androidName": "com.applicaster.babytv.vod", @@ -570,7 +625,7 @@ const launcherData = { "button-round": '', "friendlyName": 'Bally Sports', "className": "ballySportsButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.foxsports.dssgo", "androidName": "com.foxsports.dssgo", @@ -584,6 +639,11 @@ const launcherData = { "androidName": "com.foxsports.videogo", "adbLaunchCommand": "adb shell am start -n com.foxsports.videogo/com.ballysports.tv.ui.screens.main.TvMainActivity", }, + "homatics": { + "appName": "com.foxsports.videogo", + "androidName": "com.foxsports.videogo", + "adbLaunchCommand": "adb shell am start -n com.foxsports.videogo/com.ballysports.tv.ui.screens.main.TvMainActivity", + }, "nvidia-shield": { "appName": "com.foxsports.videogo", "androidName": "com.foxsports.videogo", @@ -667,7 +727,7 @@ const launcherData = { "button-round": '', "friendlyName": 'bgtime.tv', "className": "bgtimeTvButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "bg.mytv.android", "androidName": "bg.mytv.android", @@ -681,6 +741,11 @@ const launcherData = { "androidName": "bg.mytv.android", "adbLaunchCommand": "adb shell am start -n bg.mytv.android/.activities.ActivityLogin", }, + "homatics": { + "appName": "bg.mytv.android", + "androidName": "bg.mytv.android", + "adbLaunchCommand": "adb shell am start -n bg.mytv.android/.activities.ActivityLogin", + }, "nvidia-shield": { "appName": "bg.mytv.android", "androidName": "bg.mytv.android", @@ -783,7 +848,7 @@ const launcherData = { "button-round": '', "friendlyName": 'BritBox', "className": "britboxButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.britbox.us.firetv", "androidName": "com.britbox.us.firetv", @@ -797,6 +862,11 @@ const launcherData = { "androidName": "com.britbox.tv", "adbLaunchCommand": "adb shell am start -n com.britbox.tv/axis.androidtv.sdk.app.MainActivity", }, + "homatics": { + "appName": "com.britbox.tv", + "androidName": "com.britbox.tv", + "adbLaunchCommand": "adb shell am start -n com.britbox.tv/axis.androidtv.sdk.app.MainActivity", + }, "nvidia-shield": { "appName": "com.britbox.tv", "androidName": "com.britbox.tv", @@ -823,7 +893,7 @@ const launcherData = { "button": '', "friendlyName": 'btvApp', "className": "btvAppButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "com.mm.droid.livetv.btvapp", "androidName": "com.mm.droid.livetv.btvapp", @@ -834,6 +904,11 @@ const launcherData = { "androidName": "com.mm.droid.livetv.btvapp", "adbLaunchCommand": "adb shell am start -n com.mm.droid.livetv.btvapp/com.mm.droid.livetv.load.LiveLoadActivity", }, + "homatics": { + "appName": "com.mm.droid.livetv.btvapp", + "androidName": "com.mm.droid.livetv.btvapp", + "adbLaunchCommand": "adb shell am start -n com.mm.droid.livetv.btvapp/com.mm.droid.livetv.load.LiveLoadActivity", + }, "nvidia-shield": { "appName": "com.mm.droid.livetv.btvapp", "androidName": "com.mm.droid.livetv.btvapp", @@ -868,7 +943,7 @@ const launcherData = { "button-round": '', "friendlyName": 'CANAL+', "className": "canalPlusButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "com.canalplus.canalplus", "androidName": "com.canalplus.canalplus", @@ -879,6 +954,11 @@ const launcherData = { "androidName": "com.canalplus.canalplus", "adbLaunchCommand": "adb shell am start -n com.canalplus.canalplus/tv.solocoo.htmlapp.FullscreenActivity", }, + "homatics": { + "appName": "com.canal.android.canal", + "androidName": "com.canal.android.canal", + "adbLaunchCommand": "adb shell am start -n com.canal.android.canal/com.canal.ui.tv.TvMainActivity", + }, "nvidia-shield": { "appName": "com.canalplus.canalplus", "androidName": "com.canalplus.canalplus", @@ -902,7 +982,7 @@ const launcherData = { "button-round": '', "friendlyName": 'CBS Sports', "className": "cbsSportsButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "com.handmark.sportcaster", "androidName": "com.handmark.sportcaster", @@ -916,6 +996,11 @@ const launcherData = { "androidName": "com.handmark.sportscaster.androidtv", "adbLaunchCommand": "adb shell am start -n com.handmark.sportscaster.androidtv/com.handmark.sportcaster.ui.homepage.HomePageActivity", }, + "homatics": { + "appName": "com.handmark.sportscaster.androidtv", + "androidName": "com.handmark.sportscaster.androidtv", + "adbLaunchCommand": "adb shell am start -n com.handmark.sportscaster.androidtv/com.handmark.sportcaster.ui.homepage.HomePageActivity", + }, "nvidia-shield": { "appName": "com.handmark.sportscaster.androidtv", "androidName": "com.handmark.sportscaster.androidtv", @@ -1239,6 +1324,19 @@ const launcherData = { "deviceFamily": ["chromecast", "nvidia-shield", "onn", "xiaomi"],}, + "coupang-play": { + "button": '', + "friendlyName": "coupang play", + "className": "coupangPlayButton", + "deviceFamily": ["chromecast"], + "chromecast": { + "appName": "com.coupang.mobile.play", + "androidName": "com.coupang.mobile.play", + "adbLaunchCommand": "adb shell am start -n com.coupang.mobile.play/com.coupang.mobile.video.features.splash.SplashActivity", + }, + }, + + "crave-tv": { "button": '', "friendlyName": 'Crave TV', @@ -1688,7 +1786,7 @@ const launcherData = { "button-round": '', "friendlyName": "Downloader", "className": "downloaderButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], "amazon-fire": { "appName": "com.esaba.downloader", "androidName": "com.esaba.downloader", @@ -1699,6 +1797,11 @@ const launcherData = { "androidName": "com.esaba.downloader", "adbLaunchCommand": "adb shell am start -n com.esaba.downloader/.ui.main.MainActivity", }, + "homatics": { + "appName": "com.esaba.downloader", + "androidName": "com.esaba.downloader", + "adbLaunchCommand": "adb shell am start -n com.esaba.downloader/.ui.main.MainActivity", + }, "nvidia-shield": { "appName": "com.esaba.downloader", "androidName": "com.esaba.downloader", @@ -2649,7 +2752,7 @@ const launcherData = { "appName": "Play Store", "className": "googlePlayStoreButton", "androidName": "com.android.vending", - "deviceFamily": ["nvidia-shield", "chromecast", "onn", "xiaomi"], }, + "deviceFamily": ["nvidia-shield", "chromecast", "homatics", "onn", "xiaomi"], }, "greek-tv-live-and-radio-player": { @@ -3152,22 +3255,43 @@ const launcherData = { "jellyfin": { "button": '', + "button-round": '', "friendlyName": "Jellyfin", - "appName": "Jellyfin", - "androidName": "org.jellyfin.androidtv", "className": "jellyfinButton", - "deviceFamily": ["amazon-fire", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], + "amazon-fire": { + "appName": "Jellyfin", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", + }, "chromecast": { - "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/org.jellyfin.androidtv.ui.startup.StartupActivity", + "appName": "Jellyfin", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", + }, + "homatics": { + "appName": "Jellyfin", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", }, "nvidia-shield": { - "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/org.jellyfin.androidtv.ui.startup.StartupActivity", + "appName": "org.jellyfin.androidtv", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", }, "onn": { - "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/org.jellyfin.androidtv.ui.startup.StartupActivity", + "appName": "org.jellyfin.androidtv", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", + }, + "roku": { + "appName": "Jellyfin", + "app-id": 592369, }, "xiaomi": { - "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/org.jellyfin.androidtv.ui.startup.StartupActivity", + "appName": "Jellyfin", + "androidName": "org.jellyfin.androidtv", + "adbLaunchCommand": "adb shell am start -n org.jellyfin.androidtv/.ui.startup.StartupActivity", }, }, @@ -3357,6 +3481,45 @@ const launcherData = { }, + "kpn-itv": { + "button": '', + "button-round": '', + "friendlyName": "KPN iTV", + "className": "kpniTVButton", + "deviceFamily": ["amazon-fire", "chromecast", "homatics", "nvidia-shield", "onn", "xiaomi"], + "amazon-fire": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + "chromecast": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + "homatics": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + "nvidia-shield": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + "onn": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + "xiaomi": { + "appName": "com.kpn.kpnandroidtv", + "androidName": "com.kpn.kpnandroidtv", + "adbLaunchCommand": "adb shell am start -n com.kpn.kpnandroidtv/com.twentyfouri.tvbridge.webview.view.WebViewActivity", + }, + }, + + "lazymedia-deluxe": { "button": '', "friendlyName": "LAZYMEDIA DELUXE", @@ -3990,7 +4153,7 @@ const launcherData = { "button": '', "friendlyName": "Netflix", "className": "netflixButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "Netflix", "androidName": "com.netflix.ninja", @@ -4004,6 +4167,11 @@ const launcherData = { "androidName": "com.netflix.ninja", "adbLaunchCommand": "adb shell am start -n com.netflix.ninja/.MainActivity", }, + "homatics": { + "appName": "Netflix", + "androidName": "com.netflix.ninja", + "adbLaunchCommand": "adb shell am start -n com.netflix.ninja/.MainActivity", + }, "nvidia-shield": { "appName": "Netflix", "androidName": "com.netflix.ninja", @@ -4853,7 +5021,7 @@ const launcherData = { "button": '', "friendlyName": "Prime Video", "className": "primeButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "Prime Video (FireTV)", "androidName": "com.amazon.avod", @@ -4868,6 +5036,11 @@ const launcherData = { "androidName": "com.amazon.amazonvideo.livingroom", "adbLaunchCommand": "adb shell am start com.amazon.amazonvideo.livingroom/com.amazon.ignition.IgnitionActivity", }, + "homatics": { + "appName": "Prime Video", + "androidName": "com.amazon.amazonvideo.livingroom", + "adbLaunchCommand": "adb shell am start com.amazon.amazonvideo.livingroom/com.amazon.ignition.IgnitionActivity", + }, "nvidia-shield": { "appName": "Prime Video", "androidName": "com.amazon.amazonvideo.livingroom", @@ -5145,6 +5318,17 @@ const launcherData = { }, + "rocket-launcher-btn": { + "button": '', + "friendlyName": "Rocket App Launcher", + "className": "rocketButton", + "deviceFamily": ["homatics"], + "homatics": { + "adbLaunchCommand": "adb shell input keyevent KEYCODE_BUTTON_16", + }, + }, + + "roku-channel": { "button": '', "button-round": '', @@ -7623,7 +7807,7 @@ const launcherData = { "button": '', "friendlyName": "YouTube", "className": "youtubeButton", - "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "onn", "roku", "xiaomi"], + "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "homatics", "nvidia-shield", "onn", "roku", "xiaomi"], "amazon-fire": { "appName": "YouTube (FireTV)", "androidName": "com.amazon.firetv.youtube", @@ -7637,6 +7821,11 @@ const launcherData = { "androidName": "com.google.android.youtube.tv", "adbLaunchCommand": "adb shell am start -n com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.ShellActivity" }, + "homatics": { + "appName": "YouTube", + "androidName": "com.google.android.youtube.tv", + "adbLaunchCommand": "adb shell am start -n com.google.android.youtube.tv/com.google.android.apps.youtube.tv.activity.ShellActivity", + }, "nvidia-shield": { "appName": "YouTube", "androidName": "com.google.android.youtube.tv", @@ -7830,9 +8019,9 @@ const launcherData = { "className": "ziggoGoButton", "deviceFamily": ["amazon-fire", "apple-tv", "chromecast", "nvidia-shield", "xiaomi"], "amazon-fire": { - "appName": "com.ziggo.tv", - "androidName": "com.ziggo.tv", - "adbLaunchCommand": "adb shell am start -n com.ziggo.tv/com.libertyglobal.horizonx.MainActivity", + "appName": "com.ziggo.tv.firetv", + "androidName": "com.ziggo.tv.firetv", + "adbLaunchCommand": "adb shell am start -n com.ziggo.tv.firetv/com.libertyglobal.horizonx.MainActivity", }, "apple-tv": { "appName" : "Ziggo GO TV", @@ -8379,6 +8568,10 @@ const launcherCSS = ` height: calc(var(--sz) * .75rem); } + .coupangPlayButton { + background: #fff; + } + .craveTVButton { background: #00083f; } @@ -8734,9 +8927,6 @@ const launcherCSS = ` .jellyfinButton { background: #000b25; } - .jellyfinButton svg { - margin-top: calc(var(--sz) * -0.1rem); - } .jioCinemaButton { background: #000; @@ -8782,6 +8972,10 @@ const launcherCSS = ` width: calc(var(--sz) * 5.25rem); } + .kpniTVButton { + background: #fff; + } + .lazymediaDeluxeButton { background: #1d821d; } @@ -9067,7 +9261,7 @@ const launcherCSS = ` .primeButton { background: rgb(58 94 114); } - .XM2 .primeButton { + .XM2 .primeButton, .homatics-remote-body .primeButton { background: #fff; } .AF6 .primeButton { @@ -9088,6 +9282,9 @@ const launcherCSS = ` .AF6 .primeButton .pv0, .AF6 .primeButton .pv1 { fill: #99dcff; } + .homatics-remote-body .primeButton .pv0, .homatics-remote-body .primeButton .pv1{ + fill: #000; + } .privateInternetAccessButton { font-size: calc(var(--sz) * 1.2rem); @@ -9132,6 +9329,10 @@ const launcherCSS = ` background: #333; } + .rocketButton { + background: #fff; + } + .rokuChannelButton { background: #fff; } diff --git a/dist/supported-devices.js b/dist/supported-devices.js index c437603..15a1548 100644 --- a/dist/supported-devices.js +++ b/dist/supported-devices.js @@ -247,6 +247,33 @@ const devices = { }, + "homatics": { + + "meta": { + "friendlyName": "Homatics", + "supported": false, + }, + + "noCategory": { + + "dune-hd-box-4-4k-plus": { + "supported": false, + "friendlyName": "Dune HD Box R 4K Plus", + "defaultRemoteStyle": "HO3", + "hdmiInputs": 0, + }, + "box-4-4k-plus": { + "supported": false, + "friendlyName": "Box R 4K Plus", + "defaultRemoteStyle": "HO1", + "hdmiInputs": 0, + }, + + } + + }, + + "nvidia-shield": { "meta": {