feat(mobile): init of add quick action configurator and settings for viewer actions

This commit is contained in:
idubnori
2025-11-05 21:34:40 +09:00
parent 79d0e3e1ed
commit eb7813047b
12 changed files with 674 additions and 21 deletions
@@ -0,0 +1,50 @@
import 'dart:async';
import 'package:flutter/foundation.dart';
import 'package:immich_mobile/providers/app_settings.provider.dart';
import 'package:immich_mobile/utils/action_button.utils.dart';
import 'package:riverpod_annotation/riverpod_annotation.dart';
part 'viewer_quick_action_order.provider.g.dart';
@Riverpod(keepAlive: true)
class ViewerQuickActionOrder extends _$ViewerQuickActionOrder {
StreamSubscription<List<ActionButtonType>>? _subscription;
@override
List<ActionButtonType> build() {
final service = ref.watch(appSettingsServiceProvider);
final initial = ActionButtonBuilder.normalizeQuickActionOrder(service.getViewerQuickActionOrder());
_subscription ??= service.watchViewerQuickActionOrder().listen((order) {
state = ActionButtonBuilder.normalizeQuickActionOrder(order);
});
ref.onDispose(() {
_subscription?.cancel();
_subscription = null;
});
return initial;
}
Future<void> setOrder(List<ActionButtonType> order) async {
final normalized = ActionButtonBuilder.normalizeQuickActionOrder(order);
if (listEquals(state, normalized)) {
return;
}
final previous = state;
state = normalized;
try {
await ref.read(appSettingsServiceProvider).setViewerQuickActionOrder(normalized);
} catch (error) {
state = previous;
rethrow;
}
}
}
/// Mock class for testing
abstract class ViewerQuickActionOrderInternal extends _$ViewerQuickActionOrder {}
@@ -0,0 +1,27 @@
// GENERATED CODE - DO NOT MODIFY BY HAND
part of 'viewer_quick_action_order.provider.dart';
// **************************************************************************
// RiverpodGenerator
// **************************************************************************
String _$viewerQuickActionOrderHash() =>
r'd539bc6ba5fae4fa07a7c30c42d9f6aee1488f97';
/// See also [ViewerQuickActionOrder].
@ProviderFor(ViewerQuickActionOrder)
final viewerQuickActionOrderProvider =
NotifierProvider<ViewerQuickActionOrder, List<ActionButtonType>>.internal(
ViewerQuickActionOrder.new,
name: r'viewerQuickActionOrderProvider',
debugGetCreateSourceHash: const bool.fromEnvironment('dart.vm.product')
? null
: _$viewerQuickActionOrderHash,
dependencies: null,
allTransitiveDependencies: null,
);
typedef _$ViewerQuickActionOrder = Notifier<List<ActionButtonType>>;
// ignore_for_file: type=lint
// ignore_for_file: subtype_of_sealed_class, invalid_use_of_internal_member, invalid_use_of_visible_for_testing_member, deprecated_member_use_from_same_package