Skip to content

Commit 5b120db

Browse files
committed
PAINTROID-733 Refactor IDeviceService
1 parent ca41099 commit 5b120db

36 files changed

Lines changed: 224 additions & 212 deletions

lib/core/providers/object/device_service.dart

Lines changed: 7 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -7,29 +7,19 @@ import 'package:flutter/services.dart';
77
import 'package:flutter_riverpod/flutter_riverpod.dart';
88

99
abstract class IDeviceService {
10-
Future<ui.Size> getSizeInPixels();
11-
12-
static final provider = Provider<IDeviceService>((ref) {
13-
const channel = MethodChannel('org.catrobat.paintroid/device');
14-
return DeviceService(channel);
10+
static final sizeProvider = Provider<ui.Size>((ref) {
11+
throw UnimplementedError();
1512
});
16-
17-
static final sizeProvider = FutureProvider(
18-
(ref) => ref.watch(provider).getSizeInPixels(),
19-
);
2013
}
2114

22-
class DeviceService implements IDeviceService {
23-
DeviceService(this._methodChannel);
24-
25-
final MethodChannel _methodChannel;
26-
final ui.Size _testSize = const ui.Size(1179, 2556);
15+
class DeviceService {
16+
static const _channel = MethodChannel('org.catrobat.paintroid/device');
17+
static const ui.Size _testSize = ui.Size(1179, 2556);
2718

28-
@override
29-
Future<ui.Size> getSizeInPixels() async {
19+
static Future<ui.Size> getSizeInPixels() async {
3020
final firstView = WidgetsBinding.instance.platformDispatcher.views.first;
3121
if (Platform.isAndroid) {
32-
final height = await _methodChannel.invokeMethod('getHeightInPixels');
22+
final height = await _channel.invokeMethod('getHeightInPixels');
3323
return ui.Size(firstView.physicalSize.width, height);
3424
} else if (Platform.isIOS) {
3525
return firstView.physicalSize;

lib/core/providers/state/canvas_state_provider.dart

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
import 'dart:ui';
22

33
import 'package:flutter/painting.dart';
4-
import 'package:flutter/widgets.dart' as widgets;
54
import 'package:paintroid/core/commands/command_implementation/command.dart';
65
import 'package:paintroid/core/commands/command_manager/command_manager_provider.dart';
76
import 'package:paintroid/core/commands/graphic_factory/graphic_factory_provider.dart';
@@ -19,12 +18,7 @@ class CanvasStateProvider extends _$CanvasStateProvider with LoggableMixin {
1918

2019
@override
2120
CanvasStateData build() {
22-
initialCanvasSize = ref.watch(IDeviceService.sizeProvider).when(
23-
data: (size) => size,
24-
error: (_, __) => widgets.WidgetsBinding.instance.platformDispatcher
25-
.views.first.physicalSize,
26-
loading: () => Size.zero,
27-
);
21+
initialCanvasSize = ref.watch(IDeviceService.sizeProvider);
2822
return CanvasStateData(
2923
size: initialCanvasSize,
3024
commandManager: ref.watch(commandManagerProvider),

lib/core/providers/state/canvas_state_provider.g.dart

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

lib/main.dart

Lines changed: 8 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import 'package:logging/logging.dart';
77
import 'package:shared_preferences/shared_preferences.dart';
88

99
import 'package:paintroid/app.dart';
10+
import 'package:paintroid/core/providers/object/device_service.dart';
1011

1112
void main() async {
1213
Logger.root.onRecord.listen(
@@ -27,6 +28,12 @@ void main() async {
2728
WidgetsFlutterBinding.ensureInitialized();
2829
final prefs = await SharedPreferences.getInstance();
2930
final showOnboarding = prefs.getBool('showOnboarding') ?? true;
31+
final deviceSize = await DeviceService.getSizeInPixels();
3032

31-
runApp(ProviderScope(child: App(showOnboardingPage: showOnboarding)));
33+
runApp(ProviderScope(
34+
overrides: [
35+
IDeviceService.sizeProvider.overrideWithValue(deviceSize),
36+
],
37+
child: App(showOnboardingPage: showOnboarding),
38+
));
3239
}

lib/ui/pages/landing_page/landing_page.dart

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
33
import 'package:oxidized/oxidized.dart';
44
import 'package:paintroid/core/database/project_database.dart';
55
import 'package:paintroid/core/models/database/project.dart';
6-
import 'package:paintroid/core/providers/object/device_service.dart';
76
import 'package:paintroid/core/providers/object/file_service.dart';
87
import 'package:paintroid/core/providers/object/image_service.dart';
98
import 'package:paintroid/core/providers/object/io_handler.dart';
@@ -71,7 +70,6 @@ class _LandingPageState extends ConsumerState<LandingPage> {
7170
Project? project, IOHandler ioHandler, WidgetRef ref) async {
7271
if (project != null) {
7372
ref.read(workspaceStateProvider.notifier).performIOTask(() async {
74-
await ref.read(IDeviceService.sizeProvider.future);
7573
bool loaded = await _loadProject(ioHandler, project);
7674
if (loaded) _navigateToPocketPaint();
7775
});

lib/ui/pages/workspace_page/components/drawing_surface/drawing_canvas.dart

Lines changed: 5 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
44

55
import 'package:paintroid/core/enums/tool_types.dart';
66
import 'package:paintroid/core/providers/object/canvas_painter_provider.dart';
7-
import 'package:paintroid/core/providers/object/device_service.dart';
87
import 'package:paintroid/core/providers/state/canvas_state_provider.dart';
98
import 'package:paintroid/core/providers/state/toolbox_state_provider.dart';
109
import 'package:paintroid/core/providers/state/workspace_state_notifier.dart';
@@ -191,17 +190,14 @@ class _DrawingCanvasState extends ConsumerState<DrawingCanvas> {
191190
}
192191
},
193192
child: Center(
194-
child: ref.watch(IDeviceService.sizeProvider).map(
195-
data: (_) => FittedBox(
196-
fit: BoxFit.contain,
197-
child: CanvasPainter(key: _canvasPainterKey),
198-
),
199-
error: (_) => Container(),
200-
loading: (_) => Container(),
201-
),
193+
child: FittedBox(
194+
fit: BoxFit.contain,
195+
child: CanvasPainter(key: _canvasPainterKey),
196+
),
202197
),
203198
),
204199
),
205200
);
206201
}
207202
}
203+

test/integration/app_workflow_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
44
import 'package:integration_test/integration_test.dart';
55
import 'package:paintroid/app.dart';
66
import 'package:paintroid/core/tools/tool_data.dart';
7+
import 'package:paintroid/core/providers/object/device_service.dart';
78

89
import '../utils/test_utils.dart';
910

@@ -17,6 +18,10 @@ void main() {
1718

1819
setUp(() async {
1920
sut = ProviderScope(
21+
overrides: [
22+
IDeviceService.sizeProvider
23+
.overrideWithValue(TestConstants.standardDeviceSize),
24+
],
2025
child: App(
2126
showOnboardingPage: false,
2227
),

test/integration/brush_tool_test.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import 'package:integration_test/integration_test.dart';
55
import 'package:paintroid/app.dart';
66
import 'package:paintroid/core/tools/tool_data.dart';
77
import 'package:paintroid/core/utils/color_utils.dart';
8+
import 'package:paintroid/core/providers/object/device_service.dart';
89

9-
import '../utils/canvas_positions.dart';
10-
import '../utils/ui_interaction.dart';
10+
import '../utils/test_utils.dart';
1111

1212
void main() {
1313
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
@@ -19,6 +19,10 @@ void main() {
1919

2020
setUp(() async {
2121
sut = ProviderScope(
22+
overrides: [
23+
IDeviceService.sizeProvider
24+
.overrideWithValue(TestConstants.standardDeviceSize),
25+
],
2226
child: App(
2327
showOnboardingPage: false,
2428
),

test/integration/command_manager_test.dart

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
44
import 'package:integration_test/integration_test.dart';
55
import 'package:paintroid/app.dart';
66
import 'package:paintroid/core/tools/tool_data.dart';
7+
import 'package:paintroid/core/providers/object/device_service.dart';
78

89
import '../utils/test_utils.dart';
910

@@ -17,6 +18,10 @@ void main() {
1718

1819
setUp(() async {
1920
sut = ProviderScope(
21+
overrides: [
22+
IDeviceService.sizeProvider
23+
.overrideWithValue(TestConstants.standardDeviceSize),
24+
],
2025
child: App(
2126
showOnboardingPage: false,
2227
),

test/integration/cursor_tool_test.dart

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,9 +5,9 @@ import 'package:integration_test/integration_test.dart';
55
import 'package:paintroid/app.dart';
66
import 'package:paintroid/core/tools/tool_data.dart';
77
import 'package:paintroid/core/utils/color_utils.dart';
8+
import 'package:paintroid/core/providers/object/device_service.dart';
89

9-
import '../utils/canvas_positions.dart';
10-
import '../utils/ui_interaction.dart';
10+
import '../utils/test_utils.dart';
1111

1212
void main() {
1313
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
@@ -19,6 +19,10 @@ void main() {
1919

2020
setUp(() async {
2121
sut = ProviderScope(
22+
overrides: [
23+
IDeviceService.sizeProvider
24+
.overrideWithValue(TestConstants.standardDeviceSize),
25+
],
2226
child: App(
2327
showOnboardingPage: false,
2428
),

0 commit comments

Comments
 (0)