Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
24 changes: 7 additions & 17 deletions lib/core/providers/object/device_service.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,29 +7,19 @@ import 'package:flutter/services.dart';
import 'package:flutter_riverpod/flutter_riverpod.dart';

abstract class IDeviceService {
Future<ui.Size> getSizeInPixels();

static final provider = Provider<IDeviceService>((ref) {
const channel = MethodChannel('org.catrobat.paintroid/device');
return DeviceService(channel);
static final sizeProvider = Provider<ui.Size>((ref) {
throw UnimplementedError();
});

static final sizeProvider = FutureProvider(
(ref) => ref.watch(provider).getSizeInPixels(),
);
}

class DeviceService implements IDeviceService {
DeviceService(this._methodChannel);

final MethodChannel _methodChannel;
final ui.Size _testSize = const ui.Size(1179, 2556);
class DeviceService {
static const _channel = MethodChannel('org.catrobat.paintroid/device');
static const ui.Size _testSize = ui.Size(1179, 2556);

@override
Future<ui.Size> getSizeInPixels() async {
static Future<ui.Size> getSizeInPixels() async {
final firstView = WidgetsBinding.instance.platformDispatcher.views.first;
if (Platform.isAndroid) {
final height = await _methodChannel.invokeMethod('getHeightInPixels');
final height = await _channel.invokeMethod('getHeightInPixels');
return ui.Size(firstView.physicalSize.width, height);
} else if (Platform.isIOS) {
return firstView.physicalSize;
Expand Down
8 changes: 1 addition & 7 deletions lib/core/providers/state/canvas_state_provider.dart
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
import 'dart:ui';

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

@override
CanvasStateData build() {
initialCanvasSize = ref.watch(IDeviceService.sizeProvider).when(
data: (size) => size,
error: (_, __) => widgets.WidgetsBinding.instance.platformDispatcher
.views.first.physicalSize,
loading: () => Size.zero,
);
initialCanvasSize = ref.watch(IDeviceService.sizeProvider);
return CanvasStateData(
size: initialCanvasSize,
commandManager: ref.watch(commandManagerProvider),
Expand Down
9 changes: 8 additions & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@ import 'package:logging/logging.dart';
import 'package:shared_preferences/shared_preferences.dart';

import 'package:paintroid/app.dart';
import 'package:paintroid/core/providers/object/device_service.dart';

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

runApp(ProviderScope(child: App(showOnboardingPage: showOnboarding)));
runApp(ProviderScope(
overrides: [
IDeviceService.sizeProvider.overrideWithValue(deviceSize),
],
child: App(showOnboardingPage: showOnboarding),
));
}
2 changes: 0 additions & 2 deletions lib/ui/pages/landing_page/landing_page.dart
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';
import 'package:oxidized/oxidized.dart';
import 'package:paintroid/core/database/project_database.dart';
import 'package:paintroid/core/models/database/project.dart';
import 'package:paintroid/core/providers/object/device_service.dart';
import 'package:paintroid/core/providers/object/file_service.dart';
import 'package:paintroid/core/providers/object/image_service.dart';
import 'package:paintroid/core/providers/object/io_handler.dart';
Expand Down Expand Up @@ -71,7 +70,6 @@ class _LandingPageState extends ConsumerState<LandingPage> {
Project? project, IOHandler ioHandler, WidgetRef ref) async {
if (project != null) {
ref.read(workspaceStateProvider.notifier).performIOTask(() async {
await ref.read(IDeviceService.sizeProvider.future);
bool loaded = await _loadProject(ioHandler, project);
if (loaded) _navigateToPocketPaint();
});
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,6 @@ import 'package:flutter_riverpod/flutter_riverpod.dart';

import 'package:paintroid/core/enums/tool_types.dart';
import 'package:paintroid/core/providers/object/canvas_painter_provider.dart';
import 'package:paintroid/core/providers/object/device_service.dart';
import 'package:paintroid/core/providers/state/canvas_state_provider.dart';
import 'package:paintroid/core/providers/state/toolbox_state_provider.dart';
import 'package:paintroid/core/providers/state/workspace_state_notifier.dart';
Expand Down Expand Up @@ -134,14 +133,10 @@ class _DrawingCanvasState extends ConsumerState<DrawingCanvas> {
onInteractionUpdate: _onInteractionUpdate,
onInteractionEnd: _onInteractionEnd,
child: Center(
child: ref.watch(IDeviceService.sizeProvider).map(
data: (_) => FittedBox(
fit: BoxFit.contain,
child: CanvasPainter(key: _canvasPainterKey),
),
error: (_) => Container(),
loading: (_) => Container(),
),
child: FittedBox(
fit: BoxFit.contain,
child: CanvasPainter(key: _canvasPainterKey),
),
),
),
);
Expand Down
5 changes: 5 additions & 0 deletions test/integration/app_workflow_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:paintroid/app.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/core/providers/object/device_service.dart';

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

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

setUp(() async {
sut = ProviderScope(
overrides: [
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: App(
showOnboardingPage: false,
),
Expand Down
8 changes: 6 additions & 2 deletions test/integration/brush_tool_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,9 +5,9 @@ import 'package:integration_test/integration_test.dart';
import 'package:paintroid/app.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/core/utils/color_utils.dart';
import 'package:paintroid/core/providers/object/device_service.dart';

import '../utils/canvas_positions.dart';
import '../utils/ui_interaction.dart';
import '../utils/test_utils.dart';

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
Expand All @@ -19,6 +19,10 @@ void main() {

setUp(() async {
sut = ProviderScope(
overrides: [
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: App(
showOnboardingPage: false,
),
Expand Down
5 changes: 5 additions & 0 deletions test/integration/command_manager_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import 'package:flutter_test/flutter_test.dart';
import 'package:integration_test/integration_test.dart';
import 'package:paintroid/app.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/core/providers/object/device_service.dart';

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

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

setUp(() async {
sut = ProviderScope(
overrides: [
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: App(
showOnboardingPage: false,
),
Expand Down
5 changes: 5 additions & 0 deletions test/integration/eraser_tool_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:integration_test/integration_test.dart';
import 'package:paintroid/app.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/core/utils/color_utils.dart';
import 'package:paintroid/core/providers/object/device_service.dart';

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

Expand All @@ -18,6 +19,10 @@ void main() {

setUp(() async {
sut = ProviderScope(
overrides: [
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: App(
showOnboardingPage: false,
),
Expand Down
6 changes: 3 additions & 3 deletions test/integration/hand_tool_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,8 @@ import 'package:paintroid/core/providers/object/device_service.dart';
import 'package:paintroid/core/tools/tool_data.dart';
import 'package:paintroid/ui/pages/workspace_page/workspace_page.dart';
import 'package:paintroid/ui/theme/theme.dart';
import '../utils/bottom_nav_bar_interactions.dart';
import '../utils/interactive_viewer_interactions.dart';

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

void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
Expand All @@ -28,7 +28,7 @@ void main() {
sut = ProviderScope(
overrides: [
IDeviceService.sizeProvider
.overrideWith((ref) => Future.value(const Size(600, 600)))
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: PaintroidTheme(
lightTheme: lightTheme,
Expand Down
20 changes: 11 additions & 9 deletions test/integration/landing_page_test.dart
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,10 @@ import 'package:paintroid/ui/shared/dialogs/about_dialog.dart';
import 'package:paintroid/ui/shared/dialogs/generic_dialog.dart';
import 'package:paintroid/ui/shared/dialogs/project_details_dialog.dart';

import '../utils/test_utils.dart';
import 'landing_page_test.mocks.dart';

@GenerateMocks(
[ProjectDatabase, ProjectDAO, IImageService, IFileService, IDeviceService])
@GenerateMocks([ProjectDatabase, ProjectDAO, IImageService, IFileService])
void main() {
IntegrationTestWidgetsFlutterBinding.ensureInitialized();
const String testIDStr = String.fromEnvironment('id', defaultValue: '-1');
Expand All @@ -41,7 +41,6 @@ void main() {
late ProjectDAO mockDao;
late IImageService mockImageService;
late IFileService mockFileService;
late IDeviceService mockDeviceService;
late List<Project> testProjects;
final testDate = DateTime.now();
const testFilePath = 'test/assets/images/test.jpg';
Expand All @@ -62,15 +61,15 @@ void main() {
mockDao = MockProjectDAO();
mockImageService = MockIImageService();
mockFileService = MockIFileService();
mockDeviceService = MockIDeviceService();

sut = ProviderScope(
overrides: [
ProjectDatabase.provider
.overrideWith((ref) => Future.value(mockDatabase)),
IImageService.provider.overrideWith((ref) => mockImageService),
IFileService.provider.overrideWith((ref) => mockFileService),
IDeviceService.provider.overrideWith((ref) => mockDeviceService),
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
child: App(showOnboardingPage: false),
);
Expand All @@ -82,8 +81,6 @@ void main() {
when(mockDatabase.projectDAO).thenReturn(mockDao);
when(mockImageService.getProjectPreview(testFilePath))
.thenReturn(Result.ok(testFile.readAsBytesSync()));
when(mockDeviceService.getSizeInPixels())
.thenAnswer((_) => Future.value(const Size(1080, 1920)));
});

if (testID == -1 || testID == 0) {
Expand Down Expand Up @@ -350,11 +347,16 @@ void main() {
expect(find.byType(TopAppBar), findsOneWidget);
expect(find.byType(NavigationBar), findsOneWidget);

final container = ProviderContainer();
final container = ProviderContainer(
overrides: [
IDeviceService.sizeProvider
.overrideWithValue(TestConstants.standardDeviceSize),
],
);
final canvasState = container.read(canvasStateProvider);
expect(canvasState.backgroundImage, isNull);
expect(canvasState.cachedImage, isNull);
expect(canvasState.size, equals(Size.zero));
expect(canvasState.size, equals(TestConstants.standardDeviceSize));

await tester.pageBack();
await tester.pumpAndSettle();
Expand Down
Loading