From 98fa273b48ccaabf03bee7506717814c07b863ab Mon Sep 17 00:00:00 2001 From: redphx <96280+redphx@users.noreply.github.com> Date: Tue, 8 Oct 2024 07:01:58 +0700 Subject: [PATCH] Don't render MKB settings on unsupported devices --- dist/better-xcloud.lite.user.js | 19 ++++++++++--------- dist/better-xcloud.user.js | 19 ++++++++++--------- src/modules/ui/dialog/settings-dialog.ts | 12 ++++++------ src/types/index.d.ts | 1 + src/utils/global.ts | 2 ++ .../global-settings-storage.ts | 5 +---- 6 files changed, 30 insertions(+), 28 deletions(-) diff --git a/dist/better-xcloud.lite.user.js b/dist/better-xcloud.lite.user.js index 0c2ec5c..f44695a 100644 --- a/dist/better-xcloud.lite.user.js +++ b/dist/better-xcloud.lite.user.js @@ -120,7 +120,7 @@ function deepClone(obj) { } var SCRIPT_VERSION = "5.8.1-beta", SCRIPT_VARIANT = "lite", AppInterface = window.AppInterface; UserAgent.init(); -var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, STATES = { +var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, supportMkb = AppInterface || !userAgent.match(/(android|iphone|ipad)/), STATES = { supportedRegion: !0, serverRegions: {}, selectedRegion: {}, @@ -137,7 +137,8 @@ var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.inclu userAgent: { isTv, capabilities: { - touch: userAgentHasTouchSupport + touch: userAgentHasTouchSupport, + mkb: supportMkb } }, currentStream: {}, @@ -1375,10 +1376,7 @@ class GlobalSettingsStorage extends BaseSettingsStore { requiredVariants: "full", label: t("enable-mkb"), default: !1, - unsupported: (() => { - const userAgent2 = (window.navigator.orgUserAgent || window.navigator.userAgent || "").toLowerCase(); - return !AppInterface && userAgent2.match(/(android|iphone|ipad)/) ? t("browser-unsupported-feature") : !1; - })(), + unsupported: !STATES.userAgent.capabilities.mkb, ready: (setting) => { let note, url; if (setting.unsupported) note = t("browser-unsupported-feature"), url = "https://github.com/redphx/better-xcloud/issues/206#issuecomment-1920475657"; @@ -3271,6 +3269,11 @@ class SettingsNavigationDialog extends NavigationDialog { requiredVariants: "full", group: "mkb", label: t("mouse-and-keyboard"), + note: !STATES.userAgent.capabilities.mkb ? CE("a", { + href: "https://github.com/redphx/better-xcloud/issues/206#issuecomment-1920475657", + target: "_blank" + }, "⚠️ " + t("browser-unsupported-feature")) : null, + unsupported: !STATES.userAgent.capabilities.mkb, items: [ "native_mkb_enabled", "game_msfs2020_force_native_mkb", @@ -3914,9 +3917,7 @@ class SettingsNavigationDialog extends NavigationDialog { $tabContent.appendChild($title); } if (settingTabContent.note) { - let $note; - if (typeof settingTabContent.note === "string") $note = CE("b", { class: "bx-note-unsupported" }, settingTabContent.note); - else $note = settingTabContent.note; + const $note = CE("b", { class: "bx-note-unsupported" }, settingTabContent.note); $tabContent.appendChild($note); } if (settingTabContent.unsupported) continue; diff --git a/dist/better-xcloud.user.js b/dist/better-xcloud.user.js index 02a7fdd..49071a8 100644 --- a/dist/better-xcloud.user.js +++ b/dist/better-xcloud.user.js @@ -122,7 +122,7 @@ function deepClone(obj) { } var SCRIPT_VERSION = "5.8.1-beta", SCRIPT_VARIANT = "full", AppInterface = window.AppInterface; UserAgent.init(); -var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, STATES = { +var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.includes("smart-tv") || userAgent.includes("smarttv") || /\baft.*\b/.test(userAgent), isVr = window.navigator.userAgent.includes("VR") && window.navigator.userAgent.includes("OculusBrowser"), browserHasTouchSupport = "ontouchstart" in window || navigator.maxTouchPoints > 0, userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport, supportMkb = AppInterface || !userAgent.match(/(android|iphone|ipad)/), STATES = { supportedRegion: !0, serverRegions: {}, selectedRegion: {}, @@ -139,7 +139,8 @@ var userAgent = window.navigator.userAgent.toLowerCase(), isTv = userAgent.inclu userAgent: { isTv, capabilities: { - touch: userAgentHasTouchSupport + touch: userAgentHasTouchSupport, + mkb: supportMkb } }, currentStream: {}, @@ -1402,10 +1403,7 @@ class GlobalSettingsStorage extends BaseSettingsStore { requiredVariants: "full", label: t("enable-mkb"), default: !1, - unsupported: (() => { - const userAgent2 = (window.navigator.orgUserAgent || window.navigator.userAgent || "").toLowerCase(); - return !AppInterface && userAgent2.match(/(android|iphone|ipad)/) ? t("browser-unsupported-feature") : !1; - })(), + unsupported: !STATES.userAgent.capabilities.mkb, ready: (setting) => { let note, url; if (setting.unsupported) note = t("browser-unsupported-feature"), url = "https://github.com/redphx/better-xcloud/issues/206#issuecomment-1920475657"; @@ -4652,6 +4650,11 @@ class SettingsNavigationDialog extends NavigationDialog { requiredVariants: "full", group: "mkb", label: t("mouse-and-keyboard"), + note: !STATES.userAgent.capabilities.mkb ? CE("a", { + href: "https://github.com/redphx/better-xcloud/issues/206#issuecomment-1920475657", + target: "_blank" + }, "⚠️ " + t("browser-unsupported-feature")) : null, + unsupported: !STATES.userAgent.capabilities.mkb, items: [ "native_mkb_enabled", "game_msfs2020_force_native_mkb", @@ -5347,9 +5350,7 @@ class SettingsNavigationDialog extends NavigationDialog { $tabContent.appendChild($title); } if (settingTabContent.note) { - let $note; - if (typeof settingTabContent.note === "string") $note = CE("b", { class: "bx-note-unsupported" }, settingTabContent.note); - else $note = settingTabContent.note; + const $note = CE("b", { class: "bx-note-unsupported" }, settingTabContent.note); $tabContent.appendChild($note); } if (settingTabContent.unsupported) continue; diff --git a/src/modules/ui/dialog/settings-dialog.ts b/src/modules/ui/dialog/settings-dialog.ts index 0248ac3..db32e9c 100644 --- a/src/modules/ui/dialog/settings-dialog.ts +++ b/src/modules/ui/dialog/settings-dialog.ts @@ -220,6 +220,11 @@ export class SettingsNavigationDialog extends NavigationDialog { requiredVariants: 'full', group: 'mkb', label: t('mouse-and-keyboard'), + note: !STATES.userAgent.capabilities.mkb ? CE('a', { + href: 'https://github.com/redphx/better-xcloud/issues/206#issuecomment-1920475657', + target: '_blank', + }, '⚠️ ' + t('browser-unsupported-feature')) : null, + unsupported: !STATES.userAgent.capabilities.mkb, items: [ PrefKey.NATIVE_MKB_ENABLED, PrefKey.GAME_MSFS2020_FORCE_NATIVE_MKB, @@ -1336,12 +1341,7 @@ export class SettingsNavigationDialog extends NavigationDialog { // Add note if (settingTabContent.note) { - let $note; - if (typeof settingTabContent.note === 'string') { - $note = CE('b', {class: 'bx-note-unsupported'}, settingTabContent.note); - } else { - $note = settingTabContent.note; - } + const $note = CE('b', {class: 'bx-note-unsupported'}, settingTabContent.note); $tabContent.appendChild($note); } diff --git a/src/types/index.d.ts b/src/types/index.d.ts index 478f83a..8d719ec 100644 --- a/src/types/index.d.ts +++ b/src/types/index.d.ts @@ -46,6 +46,7 @@ type BxStates = { isTv: boolean; capabilities: { touch: boolean; + mkb: boolean; }; }; diff --git a/src/utils/global.ts b/src/utils/global.ts index 254305f..a948131 100644 --- a/src/utils/global.ts +++ b/src/utils/global.ts @@ -13,6 +13,7 @@ const isTv = userAgent.includes('smart-tv') || userAgent.includes('smarttv') || const isVr = window.navigator.userAgent.includes('VR') && window.navigator.userAgent.includes('OculusBrowser'); const browserHasTouchSupport = 'ontouchstart' in window || navigator.maxTouchPoints > 0; const userAgentHasTouchSupport = !isTv && !isVr && browserHasTouchSupport; +const supportMkb = AppInterface || !userAgent.match(/(android|iphone|ipad)/); export const STATES: BxStates = { supportedRegion: true, @@ -35,6 +36,7 @@ export const STATES: BxStates = { isTv: isTv, capabilities: { touch: userAgentHasTouchSupport, + mkb: supportMkb, } }, diff --git a/src/utils/settings-storages/global-settings-storage.ts b/src/utils/settings-storages/global-settings-storage.ts index 1c5dee9..bd05ecc 100644 --- a/src/utils/settings-storages/global-settings-storage.ts +++ b/src/utils/settings-storages/global-settings-storage.ts @@ -393,10 +393,7 @@ export class GlobalSettingsStorage extends BaseSettingsStorage { requiredVariants: 'full', label: t('enable-mkb'), default: false, - unsupported: ((): string | boolean => { - const userAgent = ((window.navigator as any).orgUserAgent || window.navigator.userAgent || '').toLowerCase(); - return !AppInterface && userAgent.match(/(android|iphone|ipad)/) ? t('browser-unsupported-feature') : false; - })(), + unsupported: !STATES.userAgent.capabilities.mkb, ready: (setting: SettingDefinition) => { let note; let url;