Compare commits

..

No commits in common. "03f57fd20f4b55314d77ebb9db69905609c20bc3" and "bd740cc7dc41bf448197d11a6765ec57a131edd0" have entirely different histories.

9 changed files with 30 additions and 28 deletions

View file

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

View file

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

View file

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

View file

@ -60,7 +60,7 @@ class ReadingValueContainer extends StatelessWidget implements AnimatedDialogClo
top: 0,
right: 0,
child: Icon(
Icons.lock,
Icons.lock_outline,
size: Theme.of(context).textTheme.labelMedium!.fontSize,
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 {
_timerInteractor.startVibration();
_timerInteractor.quickVibration();
emit(const TimerResumedState());
}
Future<void> _onTimerEnded(TimerEndedEvent event, Emitter emit) async {
if (state is! TimerResetState) {
_timerInteractor.endVibration();
_timerInteractor.responseVibration();
emit(const TimerStoppedState());
}
}
Future<void> _onStopTimer(StopTimerEvent _, Emitter emit) async {
_timerInteractor.startVibration();
_timerInteractor.quickVibration();
emit(const TimerStoppedState());
}

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 1.5 MiB

After

Width:  |  Height:  |  Size: 1.6 MiB

View file

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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 854 KiB

After

Width:  |  Height:  |  Size: 854 KiB