Skip to content

Commit

Permalink
Dense playback mode, feature too unstable for production
Browse files Browse the repository at this point in the history
  • Loading branch information
arianneorpilla committed Jul 11, 2021
1 parent fdf7151 commit bcbb860
Show file tree
Hide file tree
Showing 16 changed files with 392 additions and 78 deletions.
6 changes: 6 additions & 0 deletions chewie/lib/src/chewie_player.dart
Original file line number Diff line number Diff line change
Expand Up @@ -222,10 +222,13 @@ class ChewieController extends ChangeNotifier {
@required this.wasPlaying,
@required this.playExternalSubtitles,
@required this.retimeSubtitles,
@required this.densePlayback,
@required this.resetDensePlaybackRepetitions,
@required this.exportSingleCallback,
@required this.toggleShadowingMode,
@required this.shadowingSubtitle,
@required this.comprehensionSubtitle,
@required this.densePlaybackRepetitions,
@required this.audioAllowance,
@required this.setNoPush,
@required this.isCasting,
Expand Down Expand Up @@ -277,12 +280,15 @@ class ChewieController extends ChangeNotifier {
final ValueNotifier<bool> wasPlaying;
final VoidCallback playExternalSubtitles;
final VoidCallback retimeSubtitles;
final VoidCallback densePlayback;
final VoidCallback resetDensePlaybackRepetitions;
final VoidCallback exportSingleCallback;
final VoidCallback setNoPush;
final VoidCallback toggleShadowingMode;
final ValueNotifier<Subtitle> shadowingSubtitle;
final ValueNotifier<Subtitle> comprehensionSubtitle;
final ValueNotifier<int> audioAllowance;
final ValueNotifier<int> densePlaybackRepetitions;
final YouTubeMux streamData;
final String streamUrl;
final ValueNotifier<bool> isCasting;
Expand Down
125 changes: 75 additions & 50 deletions chewie/lib/src/material_controls.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import 'package:chewie/src/chewie_player.dart';
import 'package:chewie/src/chewie_progress_colors.dart';
import 'package:chewie/src/material_progress_bar.dart';
import 'package:chewie/src/player_with_controls.dart';
import 'package:flutter/scheduler.dart';
import 'package:flutter_colorpicker/flutter_colorpicker.dart';
import 'package:chewie/src/utils.dart';
import 'package:flutter/material.dart';
Expand Down Expand Up @@ -325,12 +326,15 @@ class _MaterialControlsState extends State<MaterialControls>
if (chewieController.shadowingSubtitle.value != null) {
highlightedIndexes.add(0);
}
if (getFocusMode()) {
if (chewieController.densePlaybackRepetitions.value != 0) {
highlightedIndexes.add(1);
}
if (getListeningComprehensionMode()) {
if (getFocusMode()) {
highlightedIndexes.add(2);
}
if (getListeningComprehensionMode()) {
highlightedIndexes.add(3);
}

final chosenOption = await showModalBottomSheet<int>(
context: context,
Expand All @@ -339,6 +343,7 @@ class _MaterialControlsState extends State<MaterialControls>
builder: (context) => _MoreOptionsDialog(
options: [
"Shadowing Mode",
"Dense Playback Mode",
"Definition Focus Mode",
"Listening Comprehension Mode",
if (getSelectMode())
Expand All @@ -355,6 +360,10 @@ class _MaterialControlsState extends State<MaterialControls>
],
icons: [
Icons.loop_sharp,
if (chewieController.densePlaybackRepetitions.value != 0)
Icons.flash_on
else
Icons.flash_off,
if (getFocusMode())
Icons.lightbulb
else
Expand All @@ -376,7 +385,7 @@ class _MaterialControlsState extends State<MaterialControls>
Icons.mobile_screen_share_rounded,
],
highlights: highlightedIndexes,
invisibles: gIsTapToSelectSupported ? [] : [3],
invisibles: gIsTapToSelectSupported ? [1] : [3, 1],
),
);

Expand All @@ -385,25 +394,34 @@ class _MaterialControlsState extends State<MaterialControls>
chewieController.toggleShadowingMode();
break;
case 1:
toggleFocusMode();
if (chewieController.densePlaybackRepetitions.value != 0) {
chewieController.densePlaybackRepetitions.value = 0;
setDensePlaybackRepetitions(0);
} else {
controller.pause();
chewieController.densePlayback();
}
break;
case 2:
toggleListeningComprehensionMode();
toggleFocusMode();
break;
case 3:
toggleListeningComprehensionMode();
break;
case 4:
if (gIsTapToSelectSupported) {
toggleSelectMode();
gIsSelectMode.value = getSelectMode();
}
break;
case 4:
case 5:
openDictionaryMenu(context, false);
final String clipboardMemory = chewieController.clipboard.value;
chewieController.clipboard.value = "";
chewieController.setNoPush();
chewieController.clipboard.value = clipboardMemory;
break;
case 5:
case 6:
bool wasPlaying =
chewieController.videoPlayerController.value.isPlaying;

Expand All @@ -420,10 +438,10 @@ class _MaterialControlsState extends State<MaterialControls>
}

break;
case 6:
case 7:
openExtraShare();
break;
case 7:
case 8:
chewieController.wasPlaying.value =
(chewieController.videoPlayerController.value.isPlaying ||
chewieController.wasPlaying.value);
Expand Down Expand Up @@ -468,7 +486,7 @@ class _MaterialControlsState extends State<MaterialControls>
builder: (BuildContext context) {
return AlertDialog(
contentPadding:
EdgeInsets.only(top: 20, left: 20, right: 20, bottom: 10),
EdgeInsets.only(top: 20, left: 20, right: 20, bottom: 20),
shape: RoundedRectangleBorder(
borderRadius: BorderRadius.zero,
),
Expand Down Expand Up @@ -534,42 +552,26 @@ class _MaterialControlsState extends State<MaterialControls>
footer: Container(
child: ListTile(
dense: true,
title: Wrap(
children: [
Icon(Icons.info,
size: 14.0, color: Colors.lightBlue[300]),
const SizedBox(width: 8.0),
Text(
"Casting experience may ",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
Text(
"vary based on network ",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
Text(
"performance and ",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
Text(
"the supported formats ",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
Text(
"of the selected ",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
Text(
"display device.",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
],
title: Text.rich(
TextSpan(
text: '',
children: <InlineSpan>[
WidgetSpan(
child: Icon(Icons.info,
size: 14.0, color: Colors.lightBlue[300]),
),
WidgetSpan(
child: const SizedBox(width: 4.0),
),
TextSpan(
text:
"Casting experience may vary based on network performance and the supported formats of the selected display device.",
style: TextStyle(
fontSize: 14, color: Colors.lightBlue[300]),
),
],
),
textAlign: TextAlign.left,
),
),
),
Expand Down Expand Up @@ -603,6 +605,7 @@ class _MaterialControlsState extends State<MaterialControls>
} else {
await controller.setAudioTrack(1);
while (!await controller.isPlaying()) {}
chewieController.resetDensePlaybackRepetitions();
await controller.seekTo(position);
}
});
Expand Down Expand Up @@ -682,6 +685,7 @@ class _MaterialControlsState extends State<MaterialControls>
);
}

chewieController.resetDensePlaybackRepetitions();
await controller.seekTo(position);
} else {
final preferredQualityOption = await showModalBottomSheet<int>(
Expand Down Expand Up @@ -1033,6 +1037,9 @@ class _MaterialControlsState extends State<MaterialControls>
final isFinished = controller.value.isEnded;
chewieController.wasPlaying.value = false;

chewieController.comprehensionSubtitle.value =
chewieController.currentSubtitle.value;

setState(() {
if (controller.value.isPlaying) {
playPauseIconAnimationController.reverse();
Expand Down Expand Up @@ -1078,6 +1085,7 @@ class _MaterialControlsState extends State<MaterialControls>
child: Padding(
padding: const EdgeInsets.only(right: 20.0),
child: MaterialVideoProgressBar(
chewieController,
controller,
onDragStart: () {
setState(() {
Expand All @@ -1095,10 +1103,11 @@ class _MaterialControlsState extends State<MaterialControls>
},
colors: chewieController.materialProgressColors ??
ChewieProgressColors(
playedColor: Theme.of(context).accentColor,
handleColor: Theme.of(context).accentColor,
bufferedColor: Theme.of(context).backgroundColor,
backgroundColor: Theme.of(context).disabledColor),
playedColor: Theme.of(context).accentColor,
handleColor: Theme.of(context).accentColor,
bufferedColor: Theme.of(context).backgroundColor,
backgroundColor: Theme.of(context).disabledColor,
),
),
),
);
Expand Down Expand Up @@ -1293,7 +1302,15 @@ class _MoreOptionsDialog extends StatelessWidget {

@override
Widget build(BuildContext context) {
ScrollController _scrollController = ScrollController();
SchedulerBinding.instance.addPostFrameCallback((_) {
_scrollController.jumpTo(
_scrollController.position.maxScrollExtent,
);
});

return ListView.builder(
controller: _scrollController,
shrinkWrap: true,
physics: const ScrollPhysics(),
itemCount: options.length,
Expand Down Expand Up @@ -1434,7 +1451,15 @@ class _SelectAudioDialog extends StatelessWidget {

@override
Widget build(BuildContext context) {
ScrollController _scrollController = ScrollController();
SchedulerBinding.instance.addPostFrameCallback((_) {
_scrollController.jumpTo(
_scrollController.position.maxScrollExtent,
);
});

return ListView.builder(
controller: _scrollController,
shrinkWrap: true,
physics: const ScrollPhysics(),
itemBuilder: (context, index) {
Expand Down
5 changes: 5 additions & 0 deletions chewie/lib/src/material_progress_bar.dart
Original file line number Diff line number Diff line change
@@ -1,10 +1,12 @@
import 'package:chewie/src/chewie_player.dart';
import 'package:chewie/src/chewie_progress_colors.dart';
import 'package:flutter/material.dart';
import 'package:flutter/widgets.dart';
import 'package:flutter_vlc_player/flutter_vlc_player.dart';

class MaterialVideoProgressBar extends StatefulWidget {
MaterialVideoProgressBar(
this.chewieController,
this.controller, {
ChewieProgressColors colors,
this.onDragEnd,
Expand All @@ -14,6 +16,7 @@ class MaterialVideoProgressBar extends StatefulWidget {
}) : colors = colors ?? ChewieProgressColors(),
super(key: key);

final ChewieController chewieController;
final VlcPlayerController controller;
final ChewieProgressColors colors;
final Function() onDragStart;
Expand All @@ -37,6 +40,7 @@ class _VideoProgressBarState extends State<MaterialVideoProgressBar> {
VoidCallback listener;
bool _controllerWasPlaying = false;

ChewieController get chewieController => widget.chewieController;
VlcPlayerController get controller => widget.controller;

@override
Expand All @@ -62,6 +66,7 @@ class _VideoProgressBarState extends State<MaterialVideoProgressBar> {
final Offset tapPos = box.globalToLocal(globalPosition);
final double relative = tapPos.dx / box.size.width;
final Duration position = controller.value.duration * relative;
chewieController.resetDensePlaybackRepetitions();
controller.seekTo(position);
}

Expand Down
2 changes: 1 addition & 1 deletion lib/anki.dart
Original file line number Diff line number Diff line change
Expand Up @@ -557,7 +557,7 @@ void showAnkiDialog(

Navigator.pop(context);

clipboard.value = "&<&>exported${_selectedDeck.value}&<&>";
clipboard.value = "&<&>exported&<&>";
Future.delayed(Duration(seconds: 2), () {
clipboard.value = "";
});
Expand Down
21 changes: 20 additions & 1 deletion lib/dictionary.dart
Original file line number Diff line number Diff line change
Expand Up @@ -1684,7 +1684,26 @@ List<DictionaryEntry> mergeSameEntries({
(getTagCount(b.yomichanTermTags) + b.duplicateCount * 0.3)
.compareTo(getTagCount(a.yomichanTermTags) + a.duplicateCount * 0.3));

return mergedEntries;
List<DictionaryEntry> exactFirstEntries = [];
mergedEntries.forEach((entry) {
if (entry.word == params.searchTerm) {
exactFirstEntries.add(entry);
}
});
if (params.fallbackTerm != params.searchTerm) {
mergedEntries.forEach((entry) {
if (entry.word == params.fallbackTerm) {
exactFirstEntries.add(entry);
}
});
}
mergedEntries.forEach((entry) {
if (entry.word != params.searchTerm && entry.word != params.fallbackTerm) {
exactFirstEntries.add(entry);
}
});

return exactFirstEntries;
}

int getPopularitySum(List<YomichanTag> tags) {
Expand Down
2 changes: 1 addition & 1 deletion lib/main.dart
Original file line number Diff line number Diff line change
Expand Up @@ -5332,7 +5332,7 @@ class _CreatorState extends State<Creator> {
MinimizeApp.minimizeApp();
resetMenu();
} else if (isReaderExport) {
Navigator.pop(context);
Navigator.pop(context, true);
} else {
Future.delayed(Duration(seconds: 2), () {
_justExported.value = false;
Expand Down
Loading

0 comments on commit bcbb860

Please sign in to comment.