diff --git a/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart b/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart index 5da8227ef0..db66ff70e7 100644 --- a/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart +++ b/mobile/lib/presentation/widgets/asset_viewer/asset_page.widget.dart @@ -6,6 +6,7 @@ import 'package:flutter/gestures.dart' show Drag, kTouchSlop; import 'package:flutter/material.dart'; import 'package:hooks_riverpod/hooks_riverpod.dart'; import 'package:immich_mobile/domain/models/asset/base_asset.model.dart'; +import 'package:immich_mobile/extensions/platform_extensions.dart'; import 'package:immich_mobile/domain/models/events.model.dart'; import 'package:immich_mobile/domain/utils/event_stream.dart'; import 'package:immich_mobile/extensions/build_context_extensions.dart'; @@ -274,13 +275,25 @@ class _AssetPageState extends ConsumerState { }); } + static bool _isFlipped(BaseAsset asset) => + asset is LocalAsset && CurrentPlatform.isAndroid && (asset.orientation == 90 || asset.orientation == 270); + + static Size? _assetSize(BaseAsset asset) { + if (asset.width == null || asset.height == null) return null; + + final w = asset.width!.toDouble(); + final h = asset.height!.toDouble(); + return _isFlipped(asset) ? Size(h, w) : Size(w, h); + } + double _getImageHeight(double maxWidth, double maxHeight, BaseAsset? asset) { final sb = _viewController?.scaleBoundaries; if (sb != null) return sb.childSize.height * sb.initialScale; - if (asset == null || asset.width == null || asset.height == null) return maxHeight; + final size = asset != null ? _assetSize(asset) : null; + if (size == null) return maxHeight; - final r = asset.width! / asset.height!; + final r = size.width / size.height; return math.min(maxWidth / r, maxHeight); } @@ -329,9 +342,7 @@ class _AssetPageState extends ConsumerState { return PhotoView.customChild( key: Key(asset.heroTag), - childSize: asset.width != null && asset.height != null - ? Size(asset.width!.toDouble(), asset.height!.toDouble()) - : null, + childSize: _assetSize(asset), onDragStart: _onDragStart, onDragUpdate: _onDragUpdate, onDragEnd: _onDragEnd,