Skip to content

Commit c65485c

Browse files
committed
more haptics uwu
1 parent a3efdf5 commit c65485c

File tree

18 files changed

+152
-44
lines changed

18 files changed

+152
-44
lines changed

fastlane/metadata/android/en-US/changelogs/42.txt

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@
55
- Fixed shock confirmation not correctly working in non grouped shocker view
66
- Make sure vibration warning uses vibration level of vibrate slider
77
- Updated shock confirmation handling on random intensity and duration to actually be accurate
8-
- Fix a few things with the action/cofirm logic on the non grouped shocker view as I totally forgot that view existed
8+
- Fix a few things with the action/cofirm logic on the non grouped shocker view as I totally forgot that view existed
9+
- Various other small bugfixes

lib/components/haptic_switch.dart

Lines changed: 27 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,27 @@
1+
import 'package:flutter/material.dart';
2+
import 'package:shock_alarm_app/services/vibrations.dart';
3+
4+
class HapticSwitch extends StatelessWidget {
5+
final bool value;
6+
final ValueChanged<bool> onChanged;
7+
final Key? switchKey;
8+
9+
const HapticSwitch({
10+
required this.value,
11+
required this.onChanged,
12+
this.switchKey,
13+
super.key,
14+
});
15+
16+
@override
17+
Widget build(BuildContext context) {
18+
return Switch(
19+
key: switchKey,
20+
value: value,
21+
onChanged: (value) {
22+
ShockAlarmVibrations.switchChanged(value);
23+
this.onChanged(value);
24+
},
25+
);
26+
}
27+
}

lib/components/shock_disclamer.dart

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,6 @@ class ShockDisclaimer extends StatelessWidget {
1414

1515
@override
1616
Widget build(BuildContext context) {
17-
// TODO: implement build
1817
ThemeData t = Theme.of(context);
1918
return AlertDialog.adaptive(
2019
title: Row(

lib/screens/alarms/alarm_item.dart

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:shock_alarm_app/components/haptic_switch.dart';
23
import 'package:shock_alarm_app/components/padded_card.dart';
34
import 'package:shock_alarm_app/screens/shockers/shocker_item.dart';
45
import 'package:shock_alarm_app/dialogs/info_dialog.dart';
@@ -124,7 +125,7 @@ class AlarmItemState extends State<AlarmItem> {
124125
icon: Icon(expanded
125126
? Icons.arrow_upward_rounded
126127
: Icons.arrow_downward_rounded)),
127-
Switch(
128+
HapticSwitch(
128129
value: alarm.active,
129130
onChanged: (value) {
130131
setState(() {
@@ -149,7 +150,7 @@ class AlarmItemState extends State<AlarmItem> {
149150
mainAxisAlignment: MainAxisAlignment.spaceBetween,
150151
children: [
151152
Text("Repeat alarm tone"),
152-
Switch(
153+
HapticSwitch(
153154
value: alarm.repeatAlarmsTone,
154155
onChanged: (value) {
155156
setState(() {
@@ -279,7 +280,7 @@ class AlarmShockerWidgetState extends State<AlarmShockerWidget> {
279280
: "This shocker was paused by the owner. The alarm will not trigger this shocker when it's paused even when you enable it in this menu. It needs to be unpaused so it can be triggered.");
280281
},
281282
),
282-
Switch(
283+
HapticSwitch(
283284
value: alarmShocker.enabled,
284285
onChanged: enable,
285286
),

lib/screens/settings/account/api_token_edit_dialog.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:shock_alarm_app/components/haptic_switch.dart';
23
import 'package:shock_alarm_app/components/predefined_spacing.dart';
34
import 'package:shock_alarm_app/components/qr_card.dart';
45
import 'package:shock_alarm_app/dialogs/error_dialog.dart';
@@ -40,7 +41,7 @@ class _ApiTokenEditDialogState extends State<ApiTokenEditDialog> {
4041
for (var permission in availableApiTokenPermissions)
4142
Row(
4243
children: [
43-
Switch(
44+
HapticSwitch(
4445
value: widget.apiToken.permissions.contains(permission),
4546
onChanged: (value) {
4647
if (value) {

lib/screens/settings/confirm_shock_dialog.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter/widgets.dart';
3+
import 'package:shock_alarm_app/components/haptic_switch.dart';
34
import 'package:shock_alarm_app/dialogs/info_dialog.dart';
45
import 'package:shock_alarm_app/screens/shockers/shocker_item.dart';
56
import 'package:shock_alarm_app/services/alarm_list_manager.dart';
@@ -69,7 +70,7 @@ class _ConfirmShockDialogState extends State<ConfirmShockDialog> {
6970
icon: Icon(Icons.info)),
7071
],
7172
),
72-
Switch(
73+
HapticSwitch(
7374
value: AlarmListManager.getInstance()
7475
.settings
7576
.enforceHardLimitInsteadOfShock,

lib/screens/settings/settings_screen.dart

Lines changed: 32 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import 'package:flutter/foundation.dart';
44
import 'package:flutter/gestures.dart';
55
import 'package:flutter/material.dart';
66
import 'package:flutter/services.dart';
7+
import 'package:shock_alarm_app/components/haptic_switch.dart';
78
import 'package:shock_alarm_app/components/padded_card.dart';
89
import 'package:shock_alarm_app/components/constrained_container.dart';
910
import 'package:shock_alarm_app/components/predefined_spacing.dart';
@@ -751,7 +752,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
751752
mainAxisAlignment: MainAxisAlignment.spaceBetween,
752753
children: [
753754
Text("Show option for random delay"),
754-
Switch(
755+
HapticSwitch(
755756
value: widget.manager.settings.showRandomDelay,
756757
key: ValueKey("showRandomDelay"),
757758
onChanged: (value) {
@@ -766,7 +767,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
766767
mainAxisAlignment: MainAxisAlignment.spaceBetween,
767768
children: [
768769
Text("Use grouped shocker controlling"),
769-
Switch(
770+
HapticSwitch(
770771
value: widget.manager.settings.useGroupedShockerSelection,
771772
key: ValueKey("useGroupedShockerSelection"),
772773
onChanged: (value) {
@@ -781,7 +782,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
781782
mainAxisAlignment: MainAxisAlignment.spaceBetween,
782783
children: [
783784
Text("Use range slider for random delay"),
784-
Switch(
785+
HapticSwitch(
785786
value: widget.manager.settings.useRangeSliderForRandomDelay,
786787
key: ValueKey("useRangeSliderForRandomDelay"),
787788
onChanged: (value) {
@@ -797,7 +798,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
797798
mainAxisAlignment: MainAxisAlignment.spaceBetween,
798799
children: [
799800
Text("Use range slider for intensity"),
800-
Switch(
801+
HapticSwitch(
801802
value: widget.manager.settings.useRangeSliderForIntensity,
802803
key: ValueKey("useRangeSliderForIntensity"),
803804
onChanged: (value) {
@@ -812,7 +813,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
812813
mainAxisAlignment: MainAxisAlignment.spaceBetween,
813814
children: [
814815
Text("Use range slider for duration"),
815-
Switch(
816+
HapticSwitch(
816817
value: widget.manager.settings.useRangeSliderForDuration,
817818
key: ValueKey("useRangeSliderForDuration"),
818819
onChanged: (value) {
@@ -840,7 +841,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
840841
icon: Icon(Icons.info))
841842
],
842843
),
843-
Switch(
844+
HapticSwitch(
844845
value: widget.manager.settings.confirmShock,
845846
key: ValueKey("confirmShock"),
846847
onChanged: (value) {
@@ -855,7 +856,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
855856
mainAxisAlignment: MainAxisAlignment.spaceBetween,
856857
children: [
857858
Text("Allow choosing tones for controls"),
858-
Switch(
859+
HapticSwitch(
859860
value: widget.manager.settings.allowTonesForControls,
860861
key: ValueKey("allowTonesForControls"),
861862
onChanged: (value) {
@@ -870,7 +871,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
870871
mainAxisAlignment: MainAxisAlignment.spaceBetween,
871872
children: [
872873
Text("Seperate slider for vibrate and shock intensity"),
873-
Switch(
874+
HapticSwitch(
874875
value: widget.manager.settings.useSeperateSliders,
875876
key: ValueKey("useSeperateSliders"),
876877
onChanged: (value) {
@@ -895,7 +896,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
895896
icon: Icon(Icons.info))
896897
],
897898
),
898-
Switch(
899+
HapticSwitch(
899900
value: widget.manager.settings.lerpIntensity,
900901
key: ValueKey("lerpIntensity"),
901902
onChanged: (value) {
@@ -910,7 +911,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
910911
mainAxisAlignment: MainAxisAlignment.spaceBetween,
911912
children: [
912913
Text("Send logs for live control (workaround)"),
913-
Switch(
914+
HapticSwitch(
914915
value: widget.manager.settings.liveControlsLogWorkaround,
915916
key: ValueKey("liveControlsLogWorkaround"),
916917
onChanged: (value) {
@@ -935,7 +936,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
935936
icon: Icon(Icons.info))
936937
],
937938
),
938-
Switch(
939+
HapticSwitch(
939940
value: widget.manager.settings.allowMultiServerLogin,
940941
key: ValueKey("allowMultiServerLogin"),
941942
onChanged: (value) {
@@ -960,7 +961,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
960961
icon: Icon(Icons.info))
961962
],
962963
),
963-
Switch(
964+
HapticSwitch(
964965
value: widget.manager.settings.useAlarmServer,
965966
key: ValueKey("useAlarmServer"),
966967
onChanged: (value) {
@@ -988,7 +989,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
988989
icon: Icon(Icons.info))
989990
],
990991
),
991-
Switch(
992+
HapticSwitch(
992993
value: widget.manager.settings.increaseMaxDuration,
993994
key: ValueKey("increaseMaxDuration"),
994995
onChanged: (value) {
@@ -999,11 +1000,26 @@ class _SettingsScreenState extends State<SettingsScreen> {
9991000
})
10001001
],
10011002
),
1003+
Row(
1004+
mainAxisAlignment: MainAxisAlignment.spaceBetween,
1005+
children: [
1006+
Text("Enable ui haptic feedback"),
1007+
HapticSwitch(
1008+
value: widget.manager.settings.enableUiVibrations,
1009+
key: ValueKey("enableUiVibrations"),
1010+
onChanged: (value) {
1011+
setState(() {
1012+
widget.manager.settings.enableUiVibrations = value;
1013+
widget.manager.saveSettings();
1014+
});
1015+
})
1016+
],
1017+
),
10021018
Row(
10031019
mainAxisAlignment: MainAxisAlignment.spaceBetween,
10041020
children: [
10051021
Text("Show hub firmware version"),
1006-
Switch(
1022+
HapticSwitch(
10071023
value: widget.manager.settings.showFirmwareVersion,
10081024
key: ValueKey("showFirmwareVersion"),
10091025
onChanged: (value) {
@@ -1018,7 +1034,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
10181034
mainAxisAlignment: MainAxisAlignment.spaceBetween,
10191035
children: [
10201036
Text("Disable hub filtering"),
1021-
Switch(
1037+
HapticSwitch(
10221038
value: widget.manager.settings.disableHubFiltering,
10231039
key: ValueKey("disableHubFiltering"),
10241040
onChanged: (value) {
@@ -1033,7 +1049,7 @@ class _SettingsScreenState extends State<SettingsScreen> {
10331049
mainAxisAlignment: MainAxisAlignment.spaceBetween,
10341050
children: [
10351051
Text("Use http instead of ws for shocking"),
1036-
Switch(
1052+
HapticSwitch(
10371053
value: widget.manager.settings.useHttpShocking,
10381054
key: ValueKey("useHttpShocking"),
10391055
onChanged: (value) {

lib/screens/settings/token_item.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:shock_alarm_app/components/haptic_switch.dart';
23
import 'package:shock_alarm_app/components/padded_card.dart';
34
import 'package:shock_alarm_app/dialogs/error_dialog.dart';
45
import 'account/account_edit.dart';
@@ -177,7 +178,7 @@ class TokenItemState extends State<TokenItem> {
177178
mainAxisAlignment: MainAxisAlignment.spaceBetween,
178179
children: <Widget>[
179180
Text("Is session"),
180-
Switch(
181+
HapticSwitch(
181182
value: token.type == TokenType.session,
182183
onChanged: (value) {
183184
setState(() {

lib/screens/shares/shares.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
import 'package:flutter/material.dart';
2+
import 'package:shock_alarm_app/components/haptic_switch.dart';
23
import 'package:shock_alarm_app/components/padded_card.dart';
34
import 'package:shock_alarm_app/components/constrained_container.dart';
45
import 'package:shock_alarm_app/components/desktop_mobile_refresh_indicator.dart';
@@ -439,7 +440,7 @@ class ShockerShareEntryPermissionEditorState
439440
icon: Icon(Icons.info))
440441
],
441442
),
442-
Switch(
443+
HapticSwitch(
443444
value: value,
444445
onChanged: (v) {
445446
setState(() {

lib/screens/shockers/hub_item.dart

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
import 'package:flutter/material.dart';
22
import 'package:flutter/services.dart';
3+
import 'package:shock_alarm_app/components/haptic_switch.dart';
34
import 'package:shock_alarm_app/components/predefined_spacing.dart';
45
import 'package:shock_alarm_app/dialogs/delete_dialog.dart';
56
import 'package:shock_alarm_app/components/qr_card.dart';
@@ -219,7 +220,7 @@ class HubItemState extends State<HubItem> {
219220
Row(
220221
spacing: 10,
221222
children: [
222-
Switch(
223+
HapticSwitch(
223224
value: showToken,
224225
onChanged: (value) => setState(() {
225226
showToken = value;

0 commit comments

Comments
 (0)