Compare commits

..

3 commits

Author SHA1 Message Date
Vadim
03f57fd20f increased 1/3 values font size 2024-05-07 19:19:39 +02:00
Vadim
1ae8b0913e replaced outlined locks 2024-05-07 19:06:42 +02:00
Vadim
26752073f6 increased timer vibration duration 2024-05-06 14:14:50 +02:00
9 changed files with 28 additions and 30 deletions

View file

@ -9,7 +9,7 @@ class HapticsService {
Future<void> responseVibration() async => _tryVibrate(duration: 50, amplitude: 128); Future<void> responseVibration() async => _tryVibrate(duration: 50, amplitude: 128);
Future<void> errorVibration() async => _tryVibrate(duration: 100, amplitude: 128); Future<void> errorVibration() async => _tryVibrate(duration: 500, amplitude: 128);
Future<void> _tryVibrate({required int duration, required int amplitude}) async { Future<void> _tryVibrate({required int duration, required int amplitude}) async {
if (await _canVibrate()) { if (await _canVibrate()) {

View file

@ -11,13 +11,13 @@ class TimerInteractor {
); );
/// Executes vibration if haptics are enabled in settings /// Executes vibration if haptics are enabled in settings
Future<void> quickVibration() async { Future<void> startVibration() async {
if (_userPreferencesService.haptics) await _hapticsService.quickVibration(); if (_userPreferencesService.haptics) await _hapticsService.quickVibration();
} }
/// Executes vibration if haptics are enabled in settings /// Executes vibration if haptics are enabled in settings
Future<void> responseVibration() async { Future<void> endVibration() async {
if (_userPreferencesService.haptics) await _hapticsService.responseVibration(); if (_userPreferencesService.haptics) await _hapticsService.errorVibration();
} }
bool get isAutostartTimerEnabled => _userPreferencesService.autostartTimer; bool get isAutostartTimerEnabled => _userPreferencesService.autostartTimer;

View file

@ -44,9 +44,8 @@ class ExposurePairsListItem<T extends PhotographyStopValue> extends StatelessWid
case StopType.full: case StopType.full:
return Theme.of(context).textTheme.bodyLarge!; return Theme.of(context).textTheme.bodyLarge!;
case StopType.half: case StopType.half:
return Theme.of(context).textTheme.bodyMedium!;
case StopType.third: case StopType.third:
return Theme.of(context).textTheme.bodySmall!; return Theme.of(context).textTheme.bodyMedium!;
} }
} }
@ -55,7 +54,6 @@ class ExposurePairsListItem<T extends PhotographyStopValue> extends StatelessWid
case StopType.full: case StopType.full:
return Dimens.grid16; return Dimens.grid16;
case StopType.half: case StopType.half:
return Dimens.grid8;
case StopType.third: case StopType.third:
return Dimens.grid8; return Dimens.grid8;
} }

View file

@ -60,7 +60,7 @@ class ReadingValueContainer extends StatelessWidget implements AnimatedDialogClo
top: 0, top: 0,
right: 0, right: 0,
child: Icon( child: Icon(
Icons.lock_outline, Icons.lock,
size: Theme.of(context).textTheme.labelMedium!.fontSize, size: Theme.of(context).textTheme.labelMedium!.fontSize,
color: Theme.of(context).colorScheme.onPrimaryContainer, color: Theme.of(context).colorScheme.onPrimaryContainer,
), ),

View file

@ -19,19 +19,19 @@ class TimerBloc extends Bloc<TimerEvent, TimerState> {
} }
Future<void> _onStartTimer(StartTimerEvent _, Emitter emit) async { Future<void> _onStartTimer(StartTimerEvent _, Emitter emit) async {
_timerInteractor.quickVibration(); _timerInteractor.startVibration();
emit(const TimerResumedState()); emit(const TimerResumedState());
} }
Future<void> _onTimerEnded(TimerEndedEvent event, Emitter emit) async { Future<void> _onTimerEnded(TimerEndedEvent event, Emitter emit) async {
if (state is! TimerResetState) { if (state is! TimerResetState) {
_timerInteractor.responseVibration(); _timerInteractor.endVibration();
emit(const TimerStoppedState()); emit(const TimerStoppedState());
} }
} }
Future<void> _onStopTimer(StopTimerEvent _, Emitter emit) async { Future<void> _onStopTimer(StopTimerEvent _, Emitter emit) async {
_timerInteractor.quickVibration(); _timerInteractor.startVibration();
emit(const TimerStoppedState()); emit(const TimerStoppedState());
} }

View file

@ -27,36 +27,36 @@ void main() {
group( group(
'Haptics', 'Haptics',
() { () {
test('quickVibration() - true', () async { test('startVibration() - true', () async {
when(() => mockUserPreferencesService.haptics).thenReturn(true); when(() => mockUserPreferencesService.haptics).thenReturn(true);
when(() => mockHapticsService.quickVibration()).thenAnswer((_) async {}); when(() => mockHapticsService.quickVibration()).thenAnswer((_) async {});
interactor.quickVibration(); interactor.startVibration();
verify(() => mockUserPreferencesService.haptics).called(1); verify(() => mockUserPreferencesService.haptics).called(1);
verify(() => mockHapticsService.quickVibration()).called(1); verify(() => mockHapticsService.quickVibration()).called(1);
}); });
test('quickVibration() - false', () async { test('startVibration() - false', () async {
when(() => mockUserPreferencesService.haptics).thenReturn(false); when(() => mockUserPreferencesService.haptics).thenReturn(false);
when(() => mockHapticsService.quickVibration()).thenAnswer((_) async {}); when(() => mockHapticsService.quickVibration()).thenAnswer((_) async {});
interactor.quickVibration(); interactor.startVibration();
verify(() => mockUserPreferencesService.haptics).called(1); verify(() => mockUserPreferencesService.haptics).called(1);
verifyNever(() => mockHapticsService.quickVibration()); verifyNever(() => mockHapticsService.quickVibration());
}); });
test('responseVibration() - true', () async { test('endVibration() - true', () async {
when(() => mockUserPreferencesService.haptics).thenReturn(true); when(() => mockUserPreferencesService.haptics).thenReturn(true);
when(() => mockHapticsService.responseVibration()).thenAnswer((_) async {}); when(() => mockHapticsService.errorVibration()).thenAnswer((_) async {});
interactor.responseVibration(); interactor.endVibration();
verify(() => mockUserPreferencesService.haptics).called(1); verify(() => mockUserPreferencesService.haptics).called(1);
verify(() => mockHapticsService.responseVibration()).called(1); verify(() => mockHapticsService.errorVibration()).called(1);
}); });
test('responseVibration() - false', () async { test('endVibration() - false', () async {
when(() => mockUserPreferencesService.haptics).thenReturn(false); when(() => mockUserPreferencesService.haptics).thenReturn(false);
when(() => mockHapticsService.responseVibration()).thenAnswer((_) async {}); when(() => mockHapticsService.errorVibration()).thenAnswer((_) async {});
interactor.responseVibration(); interactor.endVibration();
verify(() => mockUserPreferencesService.haptics).called(1); verify(() => mockUserPreferencesService.haptics).called(1);
verifyNever(() => mockHapticsService.responseVibration()); verifyNever(() => mockHapticsService.errorVibration());
}); });
}, },
); );

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.6 MiB

After

Width:  |  Height:  |  Size: 1.5 MiB

View file

@ -14,15 +14,15 @@ void main() {
setUpAll(() { setUpAll(() {
timerInteractor = _MockTimerInteractor(); timerInteractor = _MockTimerInteractor();
when(() => timerInteractor.isAutostartTimerEnabled).thenReturn(true); when(() => timerInteractor.isAutostartTimerEnabled).thenReturn(true);
when(timerInteractor.quickVibration).thenAnswer((_) async {}); when(timerInteractor.startVibration).thenAnswer((_) async {});
when(timerInteractor.responseVibration).thenAnswer((_) async {}); when(timerInteractor.endVibration).thenAnswer((_) async {});
}); });
blocTest<TimerBloc, TimerState>( blocTest<TimerBloc, TimerState>(
'Autostart', 'Autostart',
build: () => TimerBloc(timerInteractor, const Duration(seconds: 1)), build: () => TimerBloc(timerInteractor, const Duration(seconds: 1)),
verify: (_) { verify: (_) {
verify(() => timerInteractor.quickVibration()).called(1); verify(() => timerInteractor.startVibration()).called(1);
}, },
expect: () => [ expect: () => [
isA<TimerResumedState>(), isA<TimerResumedState>(),
@ -41,8 +41,8 @@ void main() {
bloc.add(const ResetTimerEvent()); bloc.add(const ResetTimerEvent());
}, },
verify: (_) { verify: (_) {
verify(() => timerInteractor.quickVibration()).called(1); verify(() => timerInteractor.startVibration()).called(1);
verify(() => timerInteractor.responseVibration()).called(1); verify(() => timerInteractor.endVibration()).called(1);
}, },
expect: () => [ expect: () => [
isA<TimerResumedState>(), isA<TimerResumedState>(),
@ -64,8 +64,8 @@ void main() {
bloc.add(const TimerEndedEvent()); bloc.add(const TimerEndedEvent());
}, },
verify: (_) { verify: (_) {
verify(() => timerInteractor.quickVibration()).called(3); verify(() => timerInteractor.startVibration()).called(3);
verify(() => timerInteractor.responseVibration()).called(1); verify(() => timerInteractor.endVibration()).called(1);
}, },
expect: () => [ expect: () => [
isA<TimerResumedState>(), isA<TimerResumedState>(),

Binary file not shown.

Before

Width:  |  Height:  |  Size: 854 KiB

After

Width:  |  Height:  |  Size: 854 KiB