这是indexloc提供的服务,不要输入任何密码
Skip to content
Merged
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
3 changes: 3 additions & 0 deletions lib/i18n/aria/aria.i18n.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -165,10 +165,13 @@ showTimelineLastViewedAt: "Show last viewed date of timelines"
showTimelineTabBarAtBottom: "Show timeline tab bar at the bottom"
showTranslateButtonInNoteFooter: "Add \"Translate\" to note action menu"
sinceDate: "Since"
springStiffness: "Spring stiffness"
stackTrace: "Stack trace"
streamingChannel: "Streaming channel"
swapCw: "Swap comments with the body"
swipeSensitivity: "Swipe sensitivity"
tabName: "Tab name"
tabSwitching: "Tab switching"
tabType: "Tab type"
tabs: "Tabs"
tapToShow: "Tap to show"
Expand Down
2 changes: 1 addition & 1 deletion lib/i18n/strings.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@
/// To regenerate, run: `dart run slang`
///
/// Locales: 31
/// Strings: 67186 (2167 per locale)
/// Strings: 67189 (2167 per locale)

// coverage:ignore-file
// ignore_for_file: type=lint, unused_import
Expand Down
9 changes: 9 additions & 0 deletions lib/i18n/strings_en_US.g.dart
Original file line number Diff line number Diff line change
Expand Up @@ -579,6 +579,9 @@ class TranslationsAriaEnUs {
/// en-US: 'Since'
String get sinceDate => 'Since';

/// en-US: 'Spring stiffness'
String get springStiffness => 'Spring stiffness';

/// en-US: 'Stack trace'
String get stackTrace => 'Stack trace';

Expand All @@ -588,9 +591,15 @@ class TranslationsAriaEnUs {
/// en-US: 'Swap comments with the body'
String get swapCw => 'Swap comments with the body';

/// en-US: 'Swipe sensitivity'
String get swipeSensitivity => 'Swipe sensitivity';

/// en-US: 'Tab name'
String get tabName => 'Tab name';

/// en-US: 'Tab switching'
String get tabSwitching => 'Tab switching';

/// en-US: 'Tab type'
String get tabType => 'Tab type';

Expand Down
10 changes: 9 additions & 1 deletion lib/model/general_settings.dart
Original file line number Diff line number Diff line change
Expand Up @@ -34,6 +34,10 @@ const defaultTimelinesPageButtonTypes = [
TimelinesPageButtonType.postForm,
TimelinesPageButtonType.note,
];
const defaultTimelinesPageSpringStiffness = 100.0;
const maxTimelinesPageSpringStiffness = 500.0;
const defaultTimelinesPageMinFlingFactor = 2.0;
const maxTimelinesPageMinFlingFactor = 10.0;

@freezed
abstract class GeneralSettings with _$GeneralSettings {
Expand Down Expand Up @@ -122,7 +126,6 @@ abstract class GeneralSettings with _$GeneralSettings {
// Behavior
@Default(true) bool enableInfiniteScroll,
@Default(false) bool keepScreenOn,
@Default(true) bool enableHorizontalSwipe,
@Default(false) bool openSensitiveMediaOnDoubleTap,
@Default(NoteActionType.expand) NoteActionType noteTapAction,
@Default(NoteActionType.menu) NoteActionType noteDoubleTapAction,
Expand All @@ -136,6 +139,11 @@ abstract class GeneralSettings with _$GeneralSettings {
@Default(false) bool enableSpellCheck,
@Default(false) bool enablePredictiveBack,
@Default(true) bool enableHapticFeedback,
@Default(true) bool enableHorizontalSwipe,
@Default(defaultTimelinesPageSpringStiffness)
double timelinesPageSpringStiffness,
@Default(defaultTimelinesPageMinFlingFactor)
double timelinesPageMinFlingFactor,
@Default(false) bool vibrateNote,
@Default(false) bool vibrateNotification,

Expand Down
52 changes: 29 additions & 23 deletions lib/model/general_settings.freezed.dart

Large diffs are not rendered by default.

12 changes: 10 additions & 2 deletions lib/model/general_settings.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 23 additions & 5 deletions lib/provider/general_settings_notifier_provider.dart
Original file line number Diff line number Diff line change
Expand Up @@ -471,11 +471,6 @@ class GeneralSettingsNotifier extends _$GeneralSettingsNotifier {
await _save();
}

Future<void> setEnableHorizontalSwipe(bool enableHorizontalSwipe) async {
state = state.copyWith(enableHorizontalSwipe: enableHorizontalSwipe);
await _save();
}

Future<void> setOpenSensitiveMediaOnDoubleTap(
bool openSensitiveMediaOnDoubleTap,
) async {
Expand Down Expand Up @@ -548,6 +543,29 @@ class GeneralSettingsNotifier extends _$GeneralSettingsNotifier {
await _save();
}

Future<void> setEnableHorizontalSwipe(bool enableHorizontalSwipe) async {
state = state.copyWith(enableHorizontalSwipe: enableHorizontalSwipe);
await _save();
}

Future<void> setTimelinesPageSpringStiffness(
double timelinesPageSpringStiffness,
) async {
state = state.copyWith(
timelinesPageSpringStiffness: timelinesPageSpringStiffness,
);
await _save();
}

Future<void> setTimelinesPageMinFlingFactor(
double timelinesPageMinFlingFactor,
) async {
state = state.copyWith(
timelinesPageMinFlingFactor: timelinesPageMinFlingFactor,
);
await _save();
}

Future<void> setEnableHapticFeedback(bool enableHapticFeedback) async {
state = state.copyWith(enableHapticFeedback: enableHapticFeedback);
await _save();
Expand Down
2 changes: 1 addition & 1 deletion lib/provider/general_settings_notifier_provider.g.dart

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

152 changes: 138 additions & 14 deletions lib/view/page/settings/behavior_page.dart
Original file line number Diff line number Diff line change
@@ -1,6 +1,9 @@
import 'dart:math';

import 'package:device_info_plus/device_info_plus.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter/material.dart';
import 'package:flutter_hooks/flutter_hooks.dart';
import 'package:hooks_riverpod/hooks_riverpod.dart';
import 'package:path_provider/path_provider.dart';
import 'package:url_launcher/url_launcher.dart';
Expand All @@ -16,13 +19,37 @@ import '../../../util/pretty_bytes.dart';
import '../../dialog/radio_dialog.dart';
import '../../widget/general_settings_scaffold.dart';

class BehaviorPage extends ConsumerWidget {
double _minFlingFactorToSensitivity(double minFlingFactor) {
return pow(maxTimelinesPageMinFlingFactor - minFlingFactor, 2).toDouble();
}

double _sensitivityToMinFlingFactor(double sensitivity) {
return maxTimelinesPageMinFlingFactor - sqrt(sensitivity);
}

class BehaviorPage extends HookConsumerWidget {
const BehaviorPage({super.key});

@override
Widget build(BuildContext context, WidgetRef ref) {
final settings = ref.watch(generalSettingsNotifierProvider);
final cacheSize = ref.watch(cacheSizeProvider);
final sqrtStiffness = useState(
sqrt(
clampDouble(
settings.timelinesPageSpringStiffness,
0.0,
maxTimelinesPageSpringStiffness,
),
),
);
final sensitivity = useState(
clampDouble(
_minFlingFactorToSensitivity(settings.timelinesPageMinFlingFactor),
0.0,
_minFlingFactorToSensitivity(0.0),
),
);

return GeneralSettingsScaffold(
appBar: AppBar(title: Text(t.misskey.behavior)),
Expand Down Expand Up @@ -67,19 +94,6 @@ class BehaviorPage extends ConsumerWidget {
),
),
),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
width: maxContentWidth,
child: SwitchListTile(
title: Text(t.misskey.enableHorizontalSwipe),
value: settings.enableHorizontalSwipe,
onChanged: (value) => ref
.read(generalSettingsNotifierProvider.notifier)
.setEnableHorizontalSwipe(value),
),
),
),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
Expand Down Expand Up @@ -359,6 +373,116 @@ class BehaviorPage extends ConsumerWidget {
),
),
const SizedBox(height: 16.0),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
width: maxContentWidth,
padding: const EdgeInsets.symmetric(horizontal: 16.0),
child: Text(
t.aria.tabSwitching,
style: const TextStyle(fontWeight: FontWeight.bold),
),
),
),
const SizedBox(height: 8.0),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
width: maxContentWidth,
child: SwitchListTile(
title: Text(t.misskey.enableHorizontalSwipe),
value: settings.enableHorizontalSwipe,
onChanged: (value) => ref
.read(generalSettingsNotifierProvider.notifier)
.setEnableHorizontalSwipe(value),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
top: Radius.circular(8.0),
),
),
),
),
),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
width: maxContentWidth,
child: ListTile(
title: Text(t.aria.springStiffness),
subtitle: Slider(
value: sqrtStiffness.value,
max: sqrt(maxTimelinesPageSpringStiffness),
label: pow(sqrtStiffness.value, 2).toStringAsFixed(1),
onChanged: settings.enableHorizontalSwipe
? (value) => sqrtStiffness.value = value
: null,
onChangeEnd: (value) => ref
.read(generalSettingsNotifierProvider.notifier)
.setTimelinesPageSpringStiffness(
pow(value, 2).toDouble(),
),
),
trailing: IconButton(
onPressed: settings.enableHorizontalSwipe
? () {
sqrtStiffness.value = sqrt(
defaultTimelinesPageSpringStiffness,
);
ref
.read(generalSettingsNotifierProvider.notifier)
.setTimelinesPageSpringStiffness(
defaultTimelinesPageSpringStiffness,
);
}
: null,
icon: const Icon(Icons.refresh),
),
),
),
),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
width: maxContentWidth,
child: ListTile(
title: Text(t.aria.swipeSensitivity),
subtitle: Slider(
value: sensitivity.value,
max: _minFlingFactorToSensitivity(0.0),
label: sqrt(sensitivity.value).toStringAsFixed(1),
onChanged: settings.enableHorizontalSwipe
? (value) => sensitivity.value = value
: null,
onChangeEnd: (value) => ref
.read(generalSettingsNotifierProvider.notifier)
.setTimelinesPageMinFlingFactor(
_sensitivityToMinFlingFactor(value),
),
),
trailing: IconButton(
onPressed: settings.enableHorizontalSwipe
? () {
sensitivity.value = _minFlingFactorToSensitivity(
defaultTimelinesPageMinFlingFactor,
);
ref
.read(generalSettingsNotifierProvider.notifier)
.setTimelinesPageMinFlingFactor(
defaultTimelinesPageMinFlingFactor,
);
}
: null,
icon: const Icon(Icons.refresh),
),
shape: const RoundedRectangleBorder(
borderRadius: BorderRadius.vertical(
bottom: Radius.circular(8.0),
),
),
),
),
),
const SizedBox(height: 16.0),
Center(
child: Container(
margin: const EdgeInsets.symmetric(horizontal: 8.0),
Expand Down
Loading
Loading