diff --git a/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisService.kt b/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisService.kt index 39e7a9cc6..3d98d201d 100644 --- a/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisService.kt +++ b/android/app/src/main/kotlin/deckers/thibault/aves/AnalysisService.kt @@ -73,7 +73,7 @@ class AnalysisService : MethodChannel.MethodCallHandler, Service() { override fun onBind(intent: Intent) = analysisServiceBinder - override fun onStartCommand(intent: Intent, flags: Int, startId: Int): Int { + override fun onStartCommand(intent: Intent?, flags: Int, startId: Int): Int { val channel = NotificationChannelCompat.Builder(CHANNEL_ANALYSIS, NotificationManagerCompat.IMPORTANCE_LOW) .setName(getText(R.string.analysis_channel_name)) .setShowBadge(false) @@ -82,7 +82,7 @@ class AnalysisService : MethodChannel.MethodCallHandler, Service() { startForeground(NOTIFICATION_ID, buildNotification()) val msgData = Bundle() - intent.extras?.let { + intent?.extras?.let { msgData.putAll(it) } serviceHandler?.obtainMessage()?.let { msg -> diff --git a/lib/widgets/common/tile_extent_controller.dart b/lib/widgets/common/tile_extent_controller.dart index 80c587ba1..24cfd947b 100644 --- a/lib/widgets/common/tile_extent_controller.dart +++ b/lib/widgets/common/tile_extent_controller.dart @@ -84,7 +84,9 @@ class TileExtentController { int _effectiveColumnCountForExtent(double extent) { if (extent > 0) { final columnCount = _columnCountForExtent(extent); - return columnCount.clamp(_effectiveColumnCountMin(), _effectiveColumnCountMax()).round(); + final countMin = _effectiveColumnCountMin(); + final countMax = _effectiveColumnCountMax(); + return columnCount.clamp(countMin, max(countMin, countMax)).round(); } return columnCountDefault; } diff --git a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart index 8a25664cc..453172941 100644 --- a/lib/widgets/viewer/info/metadata/xmp_namespaces.dart +++ b/lib/widgets/viewer/info/metadata/xmp_namespaces.dart @@ -15,6 +15,7 @@ import 'package:aves/widgets/viewer/info/metadata/xmp_ns/iptc4xmpext.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/microsoft.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/mwg.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/photoshop.dart'; +import 'package:aves/widgets/viewer/info/metadata/xmp_ns/plus.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/tiff.dart'; import 'package:aves/widgets/viewer/info/metadata/xmp_ns/xmp.dart'; import 'package:collection/collection.dart'; @@ -67,6 +68,8 @@ class XmpNamespace extends Equatable { return XmpNoteNamespace(rawProps); case XmpPhotoshopNamespace.ns: return XmpPhotoshopNamespace(rawProps); + case XmpPlusNamespace.ns: + return XmpPlusNamespace(rawProps); case XmpTiffNamespace.ns: return XmpTiffNamespace(rawProps); default: diff --git a/lib/widgets/viewer/info/metadata/xmp_ns/plus.dart b/lib/widgets/viewer/info/metadata/xmp_ns/plus.dart new file mode 100644 index 000000000..ab200ed67 --- /dev/null +++ b/lib/widgets/viewer/info/metadata/xmp_ns/plus.dart @@ -0,0 +1,25 @@ +import 'package:aves/widgets/viewer/info/metadata/xmp_namespaces.dart'; +import 'package:aves/widgets/viewer/info/metadata/xmp_structs.dart'; +import 'package:flutter/material.dart'; + +class XmpPlusNamespace extends XmpNamespace { + static const ns = 'plus'; + + static final licensorPattern = RegExp(ns + r':Licensor\[(\d+)\]/(.*)'); + + final licensor = >{}; + + XmpPlusNamespace(Map rawProps) : super(ns, rawProps); + + @override + bool extractData(XmpProp prop) => extractIndexedStruct(prop, licensorPattern, licensor); + + @override + List buildFromExtractedData() => [ + if (licensor.isNotEmpty) + XmpStructArrayCard( + title: 'Licensor', + structByIndex: licensor, + ), + ]; +}