Fix mobile/dektop layout modes using legacy in apps

This commit is contained in:
Bill Thornton
2026-07-01 10:14:11 -04:00
parent a35c68e688
commit 4af7865cf3
4 changed files with 28 additions and 22 deletions
@@ -47,8 +47,8 @@ export function DisplayPreferences({ onChange, values }: Readonly<DisplayPrefere
value={values.layout}
>
<MenuItem value={LayoutMode.Auto}>{globalize.translate('Auto')}</MenuItem>
<MenuItem value={LayoutMode.Desktop}>{globalize.translate('Desktop')}</MenuItem>
<MenuItem value={LayoutMode.Mobile}>{globalize.translate('Mobile')}</MenuItem>
<MenuItem value={LayoutMode.DesktopLegacy}>{globalize.translate('Desktop')}</MenuItem>
<MenuItem value={LayoutMode.MobileLegacy}>{globalize.translate('Mobile')}</MenuItem>
<MenuItem value={LayoutMode.Tv}>{globalize.translate('TV')}</MenuItem>
</Select>
<FormHelperText component={Stack} id='display-settings-layout-description'>
@@ -169,8 +169,8 @@
<div class="selectContainer fldDisplayMode hide">
<select is="emby-select" class="selectLayout" label="${LabelDisplayMode}">
<option value="">${Auto}</option>
<option value="desktop">${Desktop}</option>
<option value="mobile">${Mobile}</option>
<option value="desktop-legacy">${Desktop}</option>
<option value="mobile-legacy">${Mobile}</option>
<option value="tv">${TV}</option>
</select>
<div class="fieldDescription">${DisplayModeHelp}</div>
+10 -15
View File
@@ -1,4 +1,4 @@
import { LayoutMode } from 'constants/layoutMode';
import { LayoutMode, LegacyLayoutModes } from 'constants/layoutMode';
import { appHost } from './apphost';
import browser from '../scripts/browser';
@@ -23,28 +23,23 @@ class LayoutManager {
desktop = false;
modern = false;
get layout() {
if (this.tv) return LayoutMode.Tv;
if (this.modern) return LayoutMode.Modern;
if (this.mobile) return LayoutMode.Mobile;
if (this.desktop) return LayoutMode.Desktop;
return LayoutMode.Modern;
}
setLayout(layout = '', save = true) {
const layoutValue = (!layout || layout === LayoutMode.Auto) ? '' : layout;
const isLegacyLayout = LegacyLayoutModes.has(layoutValue);
// Normalize layout mode to the base mode (e.g. 'mobile-legacy' -> 'mobile')
const normalizedLayout = layoutValue.split('-')[0];
if (!layoutValue) {
this.autoLayout();
} else {
setLayout(this, LayoutMode.Mobile, layoutValue);
setLayout(this, LayoutMode.Tv, layoutValue);
setLayout(this, LayoutMode.Desktop, layoutValue);
setLayout(this, LayoutMode.Mobile, normalizedLayout);
setLayout(this, LayoutMode.Tv, normalizedLayout);
setLayout(this, LayoutMode.Desktop, normalizedLayout);
}
console.debug('[LayoutManager] using layout mode', layoutValue);
this.modern = layoutValue === LayoutMode.Modern;
if (this.modern) {
console.debug('[LayoutManager] using layout mode', normalizedLayout);
this.modern = !isLegacyLayout;
if (layoutValue === LayoutMode.Modern) {
const legacyLayoutMode = browser.mobile ? LayoutMode.Mobile : LayoutMode.Desktop;
console.debug('[LayoutManager] using legacy layout mode', legacyLayoutMode);
setLayout(this, legacyLayoutMode, legacyLayoutMode);
+14 -3
View File
@@ -1,13 +1,24 @@
/** The different layout modes supported by the web app. */
export enum LayoutMode {
export const enum LayoutMode {
/** Automatic layout - the app chose the best layout for the detected device. */
Auto = 'auto',
/** The legacy desktop layout. */
/** The desktop layout. */
Desktop = 'desktop',
/** The legacy desktop layout. */
DesktopLegacy = 'desktop-legacy',
/** The modern responsive layout. */
Modern = 'modern',
/** The legacy mobile layout. */
/** The mobile layout. */
Mobile = 'mobile',
/** The legacy mobile layout. */
MobileLegacy = 'mobile-legacy',
/** The TV layout. */
Tv = 'tv'
};
/** The layout modes that use the legacy app. */
export const LegacyLayoutModes = new Set([
LayoutMode.DesktopLegacy,
LayoutMode.MobileLegacy,
LayoutMode.Tv
]);