mirror of
https://github.com/Dr-Blank/Vaani.git
synced 2026-01-02 00:09:31 +00:00
feat: add shake detection functionality (#36)
* feat: add shake detection functionality and integrate vibration support * feat: add shake detector settings page
This commit is contained in:
parent
2e3b1de529
commit
b229c4f2f5
25 changed files with 1423 additions and 158 deletions
|
|
@ -16,6 +16,8 @@ class AppSettings with _$AppSettings {
|
|||
@Default(PlayerSettings()) PlayerSettings playerSettings,
|
||||
@Default(DownloadSettings()) DownloadSettings downloadSettings,
|
||||
@Default(NotificationSettings()) NotificationSettings notificationSettings,
|
||||
@Default(ShakeDetectionSettings())
|
||||
ShakeDetectionSettings shakeDetectionSettings,
|
||||
}) = _AppSettings;
|
||||
|
||||
factory AppSettings.fromJson(Map<String, dynamic> json) =>
|
||||
|
|
@ -165,17 +167,13 @@ class NotificationSettings with _$NotificationSettings {
|
|||
}
|
||||
|
||||
enum NotificationTitleType {
|
||||
chapterTitle('chapterTitle'),
|
||||
bookTitle('bookTitle'),
|
||||
author('author'),
|
||||
subtitle('subtitle'),
|
||||
series('series'),
|
||||
narrator('narrator'),
|
||||
year('year');
|
||||
|
||||
const NotificationTitleType(this.stringValue);
|
||||
|
||||
final String stringValue;
|
||||
chapterTitle,
|
||||
bookTitle,
|
||||
author,
|
||||
subtitle,
|
||||
series,
|
||||
narrator,
|
||||
year,
|
||||
}
|
||||
|
||||
enum NotificationMediaControl {
|
||||
|
|
@ -190,3 +188,41 @@ enum NotificationMediaControl {
|
|||
|
||||
final IconData icon;
|
||||
}
|
||||
|
||||
/// Shake Detection Settings
|
||||
@freezed
|
||||
class ShakeDetectionSettings with _$ShakeDetectionSettings {
|
||||
const factory ShakeDetectionSettings({
|
||||
@Default(true) bool isEnabled,
|
||||
@Default(ShakeDirection.horizontal) ShakeDirection direction,
|
||||
@Default(5) double threshold,
|
||||
@Default(ShakeAction.resetSleepTimer) ShakeAction shakeAction,
|
||||
@Default({ShakeDetectedFeedback.vibrate, ShakeDetectedFeedback.beep})
|
||||
Set<ShakeDetectedFeedback> feedback,
|
||||
@Default(0.5) double beepVolume,
|
||||
|
||||
/// the duration to wait before the shake detection is enabled again
|
||||
@Default(Duration(seconds: 5)) Duration shakeTriggerCoolDown,
|
||||
|
||||
/// the number of shakes required to trigger the action
|
||||
@Default(2) int shakeTriggerCount,
|
||||
|
||||
/// acceleration sampling interval
|
||||
@Default(Duration(milliseconds: 100)) Duration samplingPeriod,
|
||||
}) = _ShakeDetectionSettings;
|
||||
|
||||
factory ShakeDetectionSettings.fromJson(Map<String, dynamic> json) =>
|
||||
_$ShakeDetectionSettingsFromJson(json);
|
||||
}
|
||||
|
||||
enum ShakeDirection { horizontal, vertical }
|
||||
|
||||
enum ShakeAction {
|
||||
none,
|
||||
playPause,
|
||||
resetSleepTimer,
|
||||
fastForward,
|
||||
rewind,
|
||||
}
|
||||
|
||||
enum ShakeDetectedFeedback { vibrate, beep }
|
||||
|
|
|
|||
|
|
@ -25,6 +25,8 @@ mixin _$AppSettings {
|
|||
DownloadSettings get downloadSettings => throw _privateConstructorUsedError;
|
||||
NotificationSettings get notificationSettings =>
|
||||
throw _privateConstructorUsedError;
|
||||
ShakeDetectionSettings get shakeDetectionSettings =>
|
||||
throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this AppSettings to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
|
@ -46,12 +48,14 @@ abstract class $AppSettingsCopyWith<$Res> {
|
|||
{ThemeSettings themeSettings,
|
||||
PlayerSettings playerSettings,
|
||||
DownloadSettings downloadSettings,
|
||||
NotificationSettings notificationSettings});
|
||||
NotificationSettings notificationSettings,
|
||||
ShakeDetectionSettings shakeDetectionSettings});
|
||||
|
||||
$ThemeSettingsCopyWith<$Res> get themeSettings;
|
||||
$PlayerSettingsCopyWith<$Res> get playerSettings;
|
||||
$DownloadSettingsCopyWith<$Res> get downloadSettings;
|
||||
$NotificationSettingsCopyWith<$Res> get notificationSettings;
|
||||
$ShakeDetectionSettingsCopyWith<$Res> get shakeDetectionSettings;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
|
@ -73,6 +77,7 @@ class _$AppSettingsCopyWithImpl<$Res, $Val extends AppSettings>
|
|||
Object? playerSettings = null,
|
||||
Object? downloadSettings = null,
|
||||
Object? notificationSettings = null,
|
||||
Object? shakeDetectionSettings = null,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
themeSettings: null == themeSettings
|
||||
|
|
@ -91,6 +96,10 @@ class _$AppSettingsCopyWithImpl<$Res, $Val extends AppSettings>
|
|||
? _value.notificationSettings
|
||||
: notificationSettings // ignore: cast_nullable_to_non_nullable
|
||||
as NotificationSettings,
|
||||
shakeDetectionSettings: null == shakeDetectionSettings
|
||||
? _value.shakeDetectionSettings
|
||||
: shakeDetectionSettings // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeDetectionSettings,
|
||||
) as $Val);
|
||||
}
|
||||
|
||||
|
|
@ -134,6 +143,17 @@ class _$AppSettingsCopyWithImpl<$Res, $Val extends AppSettings>
|
|||
return _then(_value.copyWith(notificationSettings: value) as $Val);
|
||||
});
|
||||
}
|
||||
|
||||
/// Create a copy of AppSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
$ShakeDetectionSettingsCopyWith<$Res> get shakeDetectionSettings {
|
||||
return $ShakeDetectionSettingsCopyWith<$Res>(_value.shakeDetectionSettings,
|
||||
(value) {
|
||||
return _then(_value.copyWith(shakeDetectionSettings: value) as $Val);
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
|
@ -148,7 +168,8 @@ abstract class _$$AppSettingsImplCopyWith<$Res>
|
|||
{ThemeSettings themeSettings,
|
||||
PlayerSettings playerSettings,
|
||||
DownloadSettings downloadSettings,
|
||||
NotificationSettings notificationSettings});
|
||||
NotificationSettings notificationSettings,
|
||||
ShakeDetectionSettings shakeDetectionSettings});
|
||||
|
||||
@override
|
||||
$ThemeSettingsCopyWith<$Res> get themeSettings;
|
||||
|
|
@ -158,6 +179,8 @@ abstract class _$$AppSettingsImplCopyWith<$Res>
|
|||
$DownloadSettingsCopyWith<$Res> get downloadSettings;
|
||||
@override
|
||||
$NotificationSettingsCopyWith<$Res> get notificationSettings;
|
||||
@override
|
||||
$ShakeDetectionSettingsCopyWith<$Res> get shakeDetectionSettings;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
|
|
@ -177,6 +200,7 @@ class __$$AppSettingsImplCopyWithImpl<$Res>
|
|||
Object? playerSettings = null,
|
||||
Object? downloadSettings = null,
|
||||
Object? notificationSettings = null,
|
||||
Object? shakeDetectionSettings = null,
|
||||
}) {
|
||||
return _then(_$AppSettingsImpl(
|
||||
themeSettings: null == themeSettings
|
||||
|
|
@ -195,6 +219,10 @@ class __$$AppSettingsImplCopyWithImpl<$Res>
|
|||
? _value.notificationSettings
|
||||
: notificationSettings // ignore: cast_nullable_to_non_nullable
|
||||
as NotificationSettings,
|
||||
shakeDetectionSettings: null == shakeDetectionSettings
|
||||
? _value.shakeDetectionSettings
|
||||
: shakeDetectionSettings // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeDetectionSettings,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
|
@ -206,7 +234,8 @@ class _$AppSettingsImpl implements _AppSettings {
|
|||
{this.themeSettings = const ThemeSettings(),
|
||||
this.playerSettings = const PlayerSettings(),
|
||||
this.downloadSettings = const DownloadSettings(),
|
||||
this.notificationSettings = const NotificationSettings()});
|
||||
this.notificationSettings = const NotificationSettings(),
|
||||
this.shakeDetectionSettings = const ShakeDetectionSettings()});
|
||||
|
||||
factory _$AppSettingsImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$AppSettingsImplFromJson(json);
|
||||
|
|
@ -223,10 +252,13 @@ class _$AppSettingsImpl implements _AppSettings {
|
|||
@override
|
||||
@JsonKey()
|
||||
final NotificationSettings notificationSettings;
|
||||
@override
|
||||
@JsonKey()
|
||||
final ShakeDetectionSettings shakeDetectionSettings;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'AppSettings(themeSettings: $themeSettings, playerSettings: $playerSettings, downloadSettings: $downloadSettings, notificationSettings: $notificationSettings)';
|
||||
return 'AppSettings(themeSettings: $themeSettings, playerSettings: $playerSettings, downloadSettings: $downloadSettings, notificationSettings: $notificationSettings, shakeDetectionSettings: $shakeDetectionSettings)';
|
||||
}
|
||||
|
||||
@override
|
||||
|
|
@ -241,13 +273,15 @@ class _$AppSettingsImpl implements _AppSettings {
|
|||
(identical(other.downloadSettings, downloadSettings) ||
|
||||
other.downloadSettings == downloadSettings) &&
|
||||
(identical(other.notificationSettings, notificationSettings) ||
|
||||
other.notificationSettings == notificationSettings));
|
||||
other.notificationSettings == notificationSettings) &&
|
||||
(identical(other.shakeDetectionSettings, shakeDetectionSettings) ||
|
||||
other.shakeDetectionSettings == shakeDetectionSettings));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(runtimeType, themeSettings, playerSettings,
|
||||
downloadSettings, notificationSettings);
|
||||
downloadSettings, notificationSettings, shakeDetectionSettings);
|
||||
|
||||
/// Create a copy of AppSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
|
|
@ -270,7 +304,8 @@ abstract class _AppSettings implements AppSettings {
|
|||
{final ThemeSettings themeSettings,
|
||||
final PlayerSettings playerSettings,
|
||||
final DownloadSettings downloadSettings,
|
||||
final NotificationSettings notificationSettings}) = _$AppSettingsImpl;
|
||||
final NotificationSettings notificationSettings,
|
||||
final ShakeDetectionSettings shakeDetectionSettings}) = _$AppSettingsImpl;
|
||||
|
||||
factory _AppSettings.fromJson(Map<String, dynamic> json) =
|
||||
_$AppSettingsImpl.fromJson;
|
||||
|
|
@ -283,6 +318,8 @@ abstract class _AppSettings implements AppSettings {
|
|||
DownloadSettings get downloadSettings;
|
||||
@override
|
||||
NotificationSettings get notificationSettings;
|
||||
@override
|
||||
ShakeDetectionSettings get shakeDetectionSettings;
|
||||
|
||||
/// Create a copy of AppSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
|
|
@ -2381,3 +2418,377 @@ abstract class _NotificationSettings implements NotificationSettings {
|
|||
_$$NotificationSettingsImplCopyWith<_$NotificationSettingsImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
ShakeDetectionSettings _$ShakeDetectionSettingsFromJson(
|
||||
Map<String, dynamic> json) {
|
||||
return _ShakeDetectionSettings.fromJson(json);
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
mixin _$ShakeDetectionSettings {
|
||||
bool get isEnabled => throw _privateConstructorUsedError;
|
||||
ShakeDirection get direction => throw _privateConstructorUsedError;
|
||||
double get threshold => throw _privateConstructorUsedError;
|
||||
ShakeAction get shakeAction => throw _privateConstructorUsedError;
|
||||
Set<ShakeDetectedFeedback> get feedback => throw _privateConstructorUsedError;
|
||||
double get beepVolume => throw _privateConstructorUsedError;
|
||||
|
||||
/// the duration to wait before the shake detection is enabled again
|
||||
Duration get shakeTriggerCoolDown => throw _privateConstructorUsedError;
|
||||
|
||||
/// the number of shakes required to trigger the action
|
||||
int get shakeTriggerCount => throw _privateConstructorUsedError;
|
||||
|
||||
/// acceleration sampling interval
|
||||
Duration get samplingPeriod => throw _privateConstructorUsedError;
|
||||
|
||||
/// Serializes this ShakeDetectionSettings to a JSON map.
|
||||
Map<String, dynamic> toJson() => throw _privateConstructorUsedError;
|
||||
|
||||
/// Create a copy of ShakeDetectionSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
$ShakeDetectionSettingsCopyWith<ShakeDetectionSettings> get copyWith =>
|
||||
throw _privateConstructorUsedError;
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class $ShakeDetectionSettingsCopyWith<$Res> {
|
||||
factory $ShakeDetectionSettingsCopyWith(ShakeDetectionSettings value,
|
||||
$Res Function(ShakeDetectionSettings) then) =
|
||||
_$ShakeDetectionSettingsCopyWithImpl<$Res, ShakeDetectionSettings>;
|
||||
@useResult
|
||||
$Res call(
|
||||
{bool isEnabled,
|
||||
ShakeDirection direction,
|
||||
double threshold,
|
||||
ShakeAction shakeAction,
|
||||
Set<ShakeDetectedFeedback> feedback,
|
||||
double beepVolume,
|
||||
Duration shakeTriggerCoolDown,
|
||||
int shakeTriggerCount,
|
||||
Duration samplingPeriod});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class _$ShakeDetectionSettingsCopyWithImpl<$Res,
|
||||
$Val extends ShakeDetectionSettings>
|
||||
implements $ShakeDetectionSettingsCopyWith<$Res> {
|
||||
_$ShakeDetectionSettingsCopyWithImpl(this._value, this._then);
|
||||
|
||||
// ignore: unused_field
|
||||
final $Val _value;
|
||||
// ignore: unused_field
|
||||
final $Res Function($Val) _then;
|
||||
|
||||
/// Create a copy of ShakeDetectionSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? isEnabled = null,
|
||||
Object? direction = null,
|
||||
Object? threshold = null,
|
||||
Object? shakeAction = null,
|
||||
Object? feedback = null,
|
||||
Object? beepVolume = null,
|
||||
Object? shakeTriggerCoolDown = null,
|
||||
Object? shakeTriggerCount = null,
|
||||
Object? samplingPeriod = null,
|
||||
}) {
|
||||
return _then(_value.copyWith(
|
||||
isEnabled: null == isEnabled
|
||||
? _value.isEnabled
|
||||
: isEnabled // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
direction: null == direction
|
||||
? _value.direction
|
||||
: direction // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeDirection,
|
||||
threshold: null == threshold
|
||||
? _value.threshold
|
||||
: threshold // ignore: cast_nullable_to_non_nullable
|
||||
as double,
|
||||
shakeAction: null == shakeAction
|
||||
? _value.shakeAction
|
||||
: shakeAction // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeAction,
|
||||
feedback: null == feedback
|
||||
? _value.feedback
|
||||
: feedback // ignore: cast_nullable_to_non_nullable
|
||||
as Set<ShakeDetectedFeedback>,
|
||||
beepVolume: null == beepVolume
|
||||
? _value.beepVolume
|
||||
: beepVolume // ignore: cast_nullable_to_non_nullable
|
||||
as double,
|
||||
shakeTriggerCoolDown: null == shakeTriggerCoolDown
|
||||
? _value.shakeTriggerCoolDown
|
||||
: shakeTriggerCoolDown // ignore: cast_nullable_to_non_nullable
|
||||
as Duration,
|
||||
shakeTriggerCount: null == shakeTriggerCount
|
||||
? _value.shakeTriggerCount
|
||||
: shakeTriggerCount // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
samplingPeriod: null == samplingPeriod
|
||||
? _value.samplingPeriod
|
||||
: samplingPeriod // ignore: cast_nullable_to_non_nullable
|
||||
as Duration,
|
||||
) as $Val);
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
abstract class _$$ShakeDetectionSettingsImplCopyWith<$Res>
|
||||
implements $ShakeDetectionSettingsCopyWith<$Res> {
|
||||
factory _$$ShakeDetectionSettingsImplCopyWith(
|
||||
_$ShakeDetectionSettingsImpl value,
|
||||
$Res Function(_$ShakeDetectionSettingsImpl) then) =
|
||||
__$$ShakeDetectionSettingsImplCopyWithImpl<$Res>;
|
||||
@override
|
||||
@useResult
|
||||
$Res call(
|
||||
{bool isEnabled,
|
||||
ShakeDirection direction,
|
||||
double threshold,
|
||||
ShakeAction shakeAction,
|
||||
Set<ShakeDetectedFeedback> feedback,
|
||||
double beepVolume,
|
||||
Duration shakeTriggerCoolDown,
|
||||
int shakeTriggerCount,
|
||||
Duration samplingPeriod});
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
class __$$ShakeDetectionSettingsImplCopyWithImpl<$Res>
|
||||
extends _$ShakeDetectionSettingsCopyWithImpl<$Res,
|
||||
_$ShakeDetectionSettingsImpl>
|
||||
implements _$$ShakeDetectionSettingsImplCopyWith<$Res> {
|
||||
__$$ShakeDetectionSettingsImplCopyWithImpl(
|
||||
_$ShakeDetectionSettingsImpl _value,
|
||||
$Res Function(_$ShakeDetectionSettingsImpl) _then)
|
||||
: super(_value, _then);
|
||||
|
||||
/// Create a copy of ShakeDetectionSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@pragma('vm:prefer-inline')
|
||||
@override
|
||||
$Res call({
|
||||
Object? isEnabled = null,
|
||||
Object? direction = null,
|
||||
Object? threshold = null,
|
||||
Object? shakeAction = null,
|
||||
Object? feedback = null,
|
||||
Object? beepVolume = null,
|
||||
Object? shakeTriggerCoolDown = null,
|
||||
Object? shakeTriggerCount = null,
|
||||
Object? samplingPeriod = null,
|
||||
}) {
|
||||
return _then(_$ShakeDetectionSettingsImpl(
|
||||
isEnabled: null == isEnabled
|
||||
? _value.isEnabled
|
||||
: isEnabled // ignore: cast_nullable_to_non_nullable
|
||||
as bool,
|
||||
direction: null == direction
|
||||
? _value.direction
|
||||
: direction // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeDirection,
|
||||
threshold: null == threshold
|
||||
? _value.threshold
|
||||
: threshold // ignore: cast_nullable_to_non_nullable
|
||||
as double,
|
||||
shakeAction: null == shakeAction
|
||||
? _value.shakeAction
|
||||
: shakeAction // ignore: cast_nullable_to_non_nullable
|
||||
as ShakeAction,
|
||||
feedback: null == feedback
|
||||
? _value._feedback
|
||||
: feedback // ignore: cast_nullable_to_non_nullable
|
||||
as Set<ShakeDetectedFeedback>,
|
||||
beepVolume: null == beepVolume
|
||||
? _value.beepVolume
|
||||
: beepVolume // ignore: cast_nullable_to_non_nullable
|
||||
as double,
|
||||
shakeTriggerCoolDown: null == shakeTriggerCoolDown
|
||||
? _value.shakeTriggerCoolDown
|
||||
: shakeTriggerCoolDown // ignore: cast_nullable_to_non_nullable
|
||||
as Duration,
|
||||
shakeTriggerCount: null == shakeTriggerCount
|
||||
? _value.shakeTriggerCount
|
||||
: shakeTriggerCount // ignore: cast_nullable_to_non_nullable
|
||||
as int,
|
||||
samplingPeriod: null == samplingPeriod
|
||||
? _value.samplingPeriod
|
||||
: samplingPeriod // ignore: cast_nullable_to_non_nullable
|
||||
as Duration,
|
||||
));
|
||||
}
|
||||
}
|
||||
|
||||
/// @nodoc
|
||||
@JsonSerializable()
|
||||
class _$ShakeDetectionSettingsImpl implements _ShakeDetectionSettings {
|
||||
const _$ShakeDetectionSettingsImpl(
|
||||
{this.isEnabled = true,
|
||||
this.direction = ShakeDirection.horizontal,
|
||||
this.threshold = 5,
|
||||
this.shakeAction = ShakeAction.resetSleepTimer,
|
||||
final Set<ShakeDetectedFeedback> feedback = const {
|
||||
ShakeDetectedFeedback.vibrate,
|
||||
ShakeDetectedFeedback.beep
|
||||
},
|
||||
this.beepVolume = 0.5,
|
||||
this.shakeTriggerCoolDown = const Duration(seconds: 5),
|
||||
this.shakeTriggerCount = 2,
|
||||
this.samplingPeriod = const Duration(milliseconds: 100)})
|
||||
: _feedback = feedback;
|
||||
|
||||
factory _$ShakeDetectionSettingsImpl.fromJson(Map<String, dynamic> json) =>
|
||||
_$$ShakeDetectionSettingsImplFromJson(json);
|
||||
|
||||
@override
|
||||
@JsonKey()
|
||||
final bool isEnabled;
|
||||
@override
|
||||
@JsonKey()
|
||||
final ShakeDirection direction;
|
||||
@override
|
||||
@JsonKey()
|
||||
final double threshold;
|
||||
@override
|
||||
@JsonKey()
|
||||
final ShakeAction shakeAction;
|
||||
final Set<ShakeDetectedFeedback> _feedback;
|
||||
@override
|
||||
@JsonKey()
|
||||
Set<ShakeDetectedFeedback> get feedback {
|
||||
if (_feedback is EqualUnmodifiableSetView) return _feedback;
|
||||
// ignore: implicit_dynamic_type
|
||||
return EqualUnmodifiableSetView(_feedback);
|
||||
}
|
||||
|
||||
@override
|
||||
@JsonKey()
|
||||
final double beepVolume;
|
||||
|
||||
/// the duration to wait before the shake detection is enabled again
|
||||
@override
|
||||
@JsonKey()
|
||||
final Duration shakeTriggerCoolDown;
|
||||
|
||||
/// the number of shakes required to trigger the action
|
||||
@override
|
||||
@JsonKey()
|
||||
final int shakeTriggerCount;
|
||||
|
||||
/// acceleration sampling interval
|
||||
@override
|
||||
@JsonKey()
|
||||
final Duration samplingPeriod;
|
||||
|
||||
@override
|
||||
String toString() {
|
||||
return 'ShakeDetectionSettings(isEnabled: $isEnabled, direction: $direction, threshold: $threshold, shakeAction: $shakeAction, feedback: $feedback, beepVolume: $beepVolume, shakeTriggerCoolDown: $shakeTriggerCoolDown, shakeTriggerCount: $shakeTriggerCount, samplingPeriod: $samplingPeriod)';
|
||||
}
|
||||
|
||||
@override
|
||||
bool operator ==(Object other) {
|
||||
return identical(this, other) ||
|
||||
(other.runtimeType == runtimeType &&
|
||||
other is _$ShakeDetectionSettingsImpl &&
|
||||
(identical(other.isEnabled, isEnabled) ||
|
||||
other.isEnabled == isEnabled) &&
|
||||
(identical(other.direction, direction) ||
|
||||
other.direction == direction) &&
|
||||
(identical(other.threshold, threshold) ||
|
||||
other.threshold == threshold) &&
|
||||
(identical(other.shakeAction, shakeAction) ||
|
||||
other.shakeAction == shakeAction) &&
|
||||
const DeepCollectionEquality().equals(other._feedback, _feedback) &&
|
||||
(identical(other.beepVolume, beepVolume) ||
|
||||
other.beepVolume == beepVolume) &&
|
||||
(identical(other.shakeTriggerCoolDown, shakeTriggerCoolDown) ||
|
||||
other.shakeTriggerCoolDown == shakeTriggerCoolDown) &&
|
||||
(identical(other.shakeTriggerCount, shakeTriggerCount) ||
|
||||
other.shakeTriggerCount == shakeTriggerCount) &&
|
||||
(identical(other.samplingPeriod, samplingPeriod) ||
|
||||
other.samplingPeriod == samplingPeriod));
|
||||
}
|
||||
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
int get hashCode => Object.hash(
|
||||
runtimeType,
|
||||
isEnabled,
|
||||
direction,
|
||||
threshold,
|
||||
shakeAction,
|
||||
const DeepCollectionEquality().hash(_feedback),
|
||||
beepVolume,
|
||||
shakeTriggerCoolDown,
|
||||
shakeTriggerCount,
|
||||
samplingPeriod);
|
||||
|
||||
/// Create a copy of ShakeDetectionSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
@override
|
||||
@pragma('vm:prefer-inline')
|
||||
_$$ShakeDetectionSettingsImplCopyWith<_$ShakeDetectionSettingsImpl>
|
||||
get copyWith => __$$ShakeDetectionSettingsImplCopyWithImpl<
|
||||
_$ShakeDetectionSettingsImpl>(this, _$identity);
|
||||
|
||||
@override
|
||||
Map<String, dynamic> toJson() {
|
||||
return _$$ShakeDetectionSettingsImplToJson(
|
||||
this,
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
abstract class _ShakeDetectionSettings implements ShakeDetectionSettings {
|
||||
const factory _ShakeDetectionSettings(
|
||||
{final bool isEnabled,
|
||||
final ShakeDirection direction,
|
||||
final double threshold,
|
||||
final ShakeAction shakeAction,
|
||||
final Set<ShakeDetectedFeedback> feedback,
|
||||
final double beepVolume,
|
||||
final Duration shakeTriggerCoolDown,
|
||||
final int shakeTriggerCount,
|
||||
final Duration samplingPeriod}) = _$ShakeDetectionSettingsImpl;
|
||||
|
||||
factory _ShakeDetectionSettings.fromJson(Map<String, dynamic> json) =
|
||||
_$ShakeDetectionSettingsImpl.fromJson;
|
||||
|
||||
@override
|
||||
bool get isEnabled;
|
||||
@override
|
||||
ShakeDirection get direction;
|
||||
@override
|
||||
double get threshold;
|
||||
@override
|
||||
ShakeAction get shakeAction;
|
||||
@override
|
||||
Set<ShakeDetectedFeedback> get feedback;
|
||||
@override
|
||||
double get beepVolume;
|
||||
|
||||
/// the duration to wait before the shake detection is enabled again
|
||||
@override
|
||||
Duration get shakeTriggerCoolDown;
|
||||
|
||||
/// the number of shakes required to trigger the action
|
||||
@override
|
||||
int get shakeTriggerCount;
|
||||
|
||||
/// acceleration sampling interval
|
||||
@override
|
||||
Duration get samplingPeriod;
|
||||
|
||||
/// Create a copy of ShakeDetectionSettings
|
||||
/// with the given fields replaced by the non-null parameter values.
|
||||
@override
|
||||
@JsonKey(includeFromJson: false, includeToJson: false)
|
||||
_$$ShakeDetectionSettingsImplCopyWith<_$ShakeDetectionSettingsImpl>
|
||||
get copyWith => throw _privateConstructorUsedError;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -24,6 +24,10 @@ _$AppSettingsImpl _$$AppSettingsImplFromJson(Map<String, dynamic> json) =>
|
|||
? const NotificationSettings()
|
||||
: NotificationSettings.fromJson(
|
||||
json['notificationSettings'] as Map<String, dynamic>),
|
||||
shakeDetectionSettings: json['shakeDetectionSettings'] == null
|
||||
? const ShakeDetectionSettings()
|
||||
: ShakeDetectionSettings.fromJson(
|
||||
json['shakeDetectionSettings'] as Map<String, dynamic>),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$$AppSettingsImplToJson(_$AppSettingsImpl instance) =>
|
||||
|
|
@ -32,6 +36,7 @@ Map<String, dynamic> _$$AppSettingsImplToJson(_$AppSettingsImpl instance) =>
|
|||
'playerSettings': instance.playerSettings,
|
||||
'downloadSettings': instance.downloadSettings,
|
||||
'notificationSettings': instance.notificationSettings,
|
||||
'shakeDetectionSettings': instance.shakeDetectionSettings,
|
||||
};
|
||||
|
||||
_$ThemeSettingsImpl _$$ThemeSettingsImplFromJson(Map<String, dynamic> json) =>
|
||||
|
|
@ -274,3 +279,63 @@ const _$NotificationMediaControlEnumMap = {
|
|||
NotificationMediaControl.skipToNextChapter: 'skipToNextChapter',
|
||||
NotificationMediaControl.skipToPreviousChapter: 'skipToPreviousChapter',
|
||||
};
|
||||
|
||||
_$ShakeDetectionSettingsImpl _$$ShakeDetectionSettingsImplFromJson(
|
||||
Map<String, dynamic> json) =>
|
||||
_$ShakeDetectionSettingsImpl(
|
||||
isEnabled: json['isEnabled'] as bool? ?? true,
|
||||
direction:
|
||||
$enumDecodeNullable(_$ShakeDirectionEnumMap, json['direction']) ??
|
||||
ShakeDirection.horizontal,
|
||||
threshold: (json['threshold'] as num?)?.toDouble() ?? 5,
|
||||
shakeAction:
|
||||
$enumDecodeNullable(_$ShakeActionEnumMap, json['shakeAction']) ??
|
||||
ShakeAction.resetSleepTimer,
|
||||
feedback: (json['feedback'] as List<dynamic>?)
|
||||
?.map((e) => $enumDecode(_$ShakeDetectedFeedbackEnumMap, e))
|
||||
.toSet() ??
|
||||
const {ShakeDetectedFeedback.vibrate, ShakeDetectedFeedback.beep},
|
||||
beepVolume: (json['beepVolume'] as num?)?.toDouble() ?? 0.5,
|
||||
shakeTriggerCoolDown: json['shakeTriggerCoolDown'] == null
|
||||
? const Duration(seconds: 5)
|
||||
: Duration(
|
||||
microseconds: (json['shakeTriggerCoolDown'] as num).toInt()),
|
||||
shakeTriggerCount: (json['shakeTriggerCount'] as num?)?.toInt() ?? 2,
|
||||
samplingPeriod: json['samplingPeriod'] == null
|
||||
? const Duration(milliseconds: 100)
|
||||
: Duration(microseconds: (json['samplingPeriod'] as num).toInt()),
|
||||
);
|
||||
|
||||
Map<String, dynamic> _$$ShakeDetectionSettingsImplToJson(
|
||||
_$ShakeDetectionSettingsImpl instance) =>
|
||||
<String, dynamic>{
|
||||
'isEnabled': instance.isEnabled,
|
||||
'direction': _$ShakeDirectionEnumMap[instance.direction]!,
|
||||
'threshold': instance.threshold,
|
||||
'shakeAction': _$ShakeActionEnumMap[instance.shakeAction]!,
|
||||
'feedback': instance.feedback
|
||||
.map((e) => _$ShakeDetectedFeedbackEnumMap[e]!)
|
||||
.toList(),
|
||||
'beepVolume': instance.beepVolume,
|
||||
'shakeTriggerCoolDown': instance.shakeTriggerCoolDown.inMicroseconds,
|
||||
'shakeTriggerCount': instance.shakeTriggerCount,
|
||||
'samplingPeriod': instance.samplingPeriod.inMicroseconds,
|
||||
};
|
||||
|
||||
const _$ShakeDirectionEnumMap = {
|
||||
ShakeDirection.horizontal: 'horizontal',
|
||||
ShakeDirection.vertical: 'vertical',
|
||||
};
|
||||
|
||||
const _$ShakeActionEnumMap = {
|
||||
ShakeAction.none: 'none',
|
||||
ShakeAction.playPause: 'playPause',
|
||||
ShakeAction.resetSleepTimer: 'resetSleepTimer',
|
||||
ShakeAction.fastForward: 'fastForward',
|
||||
ShakeAction.rewind: 'rewind',
|
||||
};
|
||||
|
||||
const _$ShakeDetectedFeedbackEnumMap = {
|
||||
ShakeDetectedFeedback.vibrate: 'vibrate',
|
||||
ShakeDetectedFeedback.beep: 'beep',
|
||||
};
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue