Skip to content

Commit 00f0cb7

Browse files
authored
Merge pull request #762 from bcc-code/feature/755-car-play-adjustments
CarPlay adjustments + opening app from push notification fix
2 parents 3e63ada + dcd2a06 commit 00f0cb7

20 files changed

Lines changed: 913 additions & 194 deletions

BMM.Core/Constants/ImageResourceNames.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -45,5 +45,6 @@ public class ImageResourceNames
4545
public const string SkipForwardIcon = "Skip_Forward_Icon";
4646
public const string SkipBackIcon = "Skip_Back_Icon";
4747
public const string ShuffleIcon = "Shuffle_Icon";
48+
public const string IconShuffleCarplay = "Icon_Shuffle_Carplay";
4849
}
4950
}
Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,11 @@
1+
using BMM.Api.Abstraction;
12
using BMM.Core.GuardedActions.Base.Interfaces;
23
using BMM.Core.Models.Contributors.Interfaces;
34

45
namespace BMM.Core.GuardedActions.Contributors.Interfaces
56
{
6-
public interface IShuffleContributorAction : IGuardedActionWithParameter<IShuffleActionParameter>
7+
public interface IShuffleContributorAction
8+
: IGuardedActionWithParameterAndResult<IShuffleActionParameter, IMediaTrack>
79
{
810
}
911
}
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1+
using BMM.Api.Abstraction;
12
using BMM.Core.GuardedActions.Base.Interfaces;
23
using BMM.Core.Models.Contributors.Interfaces;
34

45
namespace BMM.Core.GuardedActions.Contributors.Interfaces
56
{
6-
public interface IShufflePodcastAction : IGuardedActionWithParameter<IShuffleActionParameter>
7+
public interface IShufflePodcastAction : IGuardedActionWithParameterAndResult<IShuffleActionParameter, IMediaTrack>
78
{
89
}
910
}

BMM.Core/GuardedActions/Contributors/ShuffleContributorAction.cs

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace BMM.Core.GuardedActions.Contributors
1111
{
1212
public class ShuffleContributorAction
13-
: GuardedActionWithParameter<IShuffleActionParameter>,
13+
: GuardedActionWithParameterAndResult<IShuffleActionParameter, IMediaTrack>,
1414
IShuffleContributorAction
1515
{
1616
private readonly IContributorClient _contributorClient;
@@ -24,13 +24,16 @@ public ShuffleContributorAction(
2424
_mediaPlayer = mediaPlayer;
2525
}
2626

27-
protected override async Task Execute(IShuffleActionParameter parameter)
27+
protected override async Task<IMediaTrack> Execute(IShuffleActionParameter parameter)
2828
{
2929
var randomTracks = await _contributorClient.GetRandomTracks(parameter.Id);
3030
var tracksToPlay = randomTracks
3131
.OfType<IMediaTrack>()
3232
.ToList();
33-
await _mediaPlayer.Play(tracksToPlay, tracksToPlay.First(), parameter.PlaybackOrigin);
33+
34+
var trackToPlay = tracksToPlay.First();
35+
await _mediaPlayer.Play(tracksToPlay, trackToPlay, parameter.PlaybackOrigin);
36+
return trackToPlay;
3437
}
3538
}
3639
}

BMM.Core/GuardedActions/Contributors/ShufflePodcastAction.cs

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@
1010
namespace BMM.Core.GuardedActions.Contributors
1111
{
1212
public class ShufflePodcastAction
13-
: GuardedActionWithParameter<IShuffleActionParameter>,
13+
: GuardedActionWithParameterAndResult<IShuffleActionParameter, IMediaTrack>,
1414
IShufflePodcastAction
1515
{
1616
private readonly IPodcastClient _podcastClient;
@@ -24,13 +24,15 @@ public ShufflePodcastAction(
2424
_podcastClient = podcastClient;
2525
}
2626

27-
protected override async Task Execute(IShuffleActionParameter parameter)
27+
protected override async Task<IMediaTrack> Execute(IShuffleActionParameter parameter)
2828
{
2929
var podcastTracks = await _podcastClient.GetShuffle(parameter.Id);
3030
var tracksToPlay = podcastTracks
3131
.OfType<IMediaTrack>()
3232
.ToList();
33-
await _mediaPlayer.Play(tracksToPlay, tracksToPlay.First(), parameter.PlaybackOrigin);
33+
var trackToPlay = tracksToPlay.First();
34+
await _mediaPlayer.Play(tracksToPlay, trackToPlay, parameter.PlaybackOrigin);
35+
return trackToPlay;
3436
}
3537
}
3638
}

BMM.Core/GuardedActions/Tracklist/LikeOrUnlikeTrackAction.cs

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,7 @@
66
using BMM.Core.Implementations.Player.Interfaces;
77
using BMM.Core.Messages;
88
using BMM.Core.Models.TrackCollections.Interfaces;
9+
using BMM.Core.NewMediaPlayer.Abstractions;
910
using MvvmCross.Plugin.Messenger;
1011

1112
namespace BMM.Core.GuardedActions.Tracklist;
@@ -18,17 +19,20 @@ public class LikeOrUnlikeTrackAction
1819
private readonly IPlaybackHistoryService _playbackHistoryService;
1920
private readonly IRememberedQueueService _rememberedQueueService;
2021
private readonly IMvxMessenger _messenger;
22+
private readonly IMediaPlayer _mediaPlayer;
2123

2224
public LikeOrUnlikeTrackAction(
2325
ITrackCollectionClient trackCollectionClient,
2426
IPlaybackHistoryService playbackHistoryService,
2527
IRememberedQueueService rememberedQueueService,
26-
IMvxMessenger messenger)
28+
IMvxMessenger messenger,
29+
IMediaPlayer mediaPlayer)
2730
{
2831
_trackCollectionClient = trackCollectionClient;
2932
_playbackHistoryService = playbackHistoryService;
3033
_rememberedQueueService = rememberedQueueService;
3134
_messenger = messenger;
35+
_mediaPlayer = mediaPlayer;
3236
}
3337

3438
protected override async Task<bool> Execute(ILikeOrUnlikeTrackActionParameter parameter)
@@ -46,6 +50,10 @@ protected override async Task<bool> Execute(ILikeOrUnlikeTrackActionParameter pa
4650
await _playbackHistoryService.SetTrackLikedOrUnliked(parameter.TrackId, !parameter.IsLiked);
4751
await _rememberedQueueService.SetTrackLikedOrUnliked(parameter.TrackId, !parameter.IsLiked);
4852
_messenger.Publish(new TrackLikedChangedMessage(this, !parameter.IsLiked, parameter.TrackId));
53+
54+
if (_mediaPlayer.CurrentTrack?.Id == parameter.TrackId)
55+
_mediaPlayer.CurrentTrack.IsLiked = !parameter.IsLiked;
56+
4957
return true;
5058
}
5159

BMM.Core/Implementations/DeepLinking/DeepLinkHandler.cs

Lines changed: 20 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ public class DeepLinkHandler : IDeepLinkHandler
6363

6464
private readonly IList<IDeepLinkParser> _links;
6565
private bool _readyToHandleDeepLink;
66-
private Uri _pendingDeepLink;
66+
private PendingDeepLink _pendingDeepLink;
6767

6868
public DeepLinkHandler(
6969
IBMMClient client,
@@ -230,17 +230,28 @@ private async Task PlayTrackById(TrackLinkParameters trackLinkParameters)
230230
await PlayTracks(new[] { requestedTrack }, PlaybackOriginName, trackLinkParameters.StartTimeInMs);
231231
}
232232

233-
public bool OpenFromInsideOfApp(Uri uri, string origin) => Open(uri, "internal link opened", origin);
233+
public bool OpenFromInsideOfApp(Uri uri, string origin)
234+
{
235+
if (_readyToHandleDeepLink)
236+
return Open(uri, "internal link opened", origin);
237+
238+
return CheckIfCanOpenDeepLinkAndSetPendingIfNeeded(new PendingDeepLink(uri, DeepLinkSource.InsideApp));
239+
}
234240

235241
public bool OpenFromOutsideOfApp(Uri uri)
236242
{
237243
if (_readyToHandleDeepLink)
238244
return Open(uri, "deep link opened");
239245

240-
if (!_links.Any(l => l.PerformCanNavigateTo(uri, out _)))
246+
return CheckIfCanOpenDeepLinkAndSetPendingIfNeeded(new PendingDeepLink(uri, DeepLinkSource.OutsideOfApp));
247+
}
248+
249+
private bool CheckIfCanOpenDeepLinkAndSetPendingIfNeeded(PendingDeepLink pendingDeepLink)
250+
{
251+
if (!_links.Any(l => l.PerformCanNavigateTo(pendingDeepLink.Uri, out _)))
241252
return false;
242253

243-
_pendingDeepLink = uri;
254+
_pendingDeepLink = pendingDeepLink;
244255
return true;
245256
}
246257

@@ -251,7 +262,11 @@ public void SetReadyToOpenDeepLinkAndHandlePending()
251262
if (_pendingDeepLink == null)
252263
return;
253264

254-
OpenFromOutsideOfApp(_pendingDeepLink);
265+
if (_pendingDeepLink.Source == DeepLinkSource.OutsideOfApp)
266+
OpenFromOutsideOfApp(_pendingDeepLink.Uri);
267+
else
268+
OpenFromInsideOfApp(_pendingDeepLink.Uri, string.Empty);
269+
255270
_pendingDeepLink = null;
256271
}
257272

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
namespace BMM.Core.Implementations.DeepLinking;
2+
3+
public class PendingDeepLink
4+
{
5+
public PendingDeepLink(Uri uri, DeepLinkSource source)
6+
{
7+
Uri = uri;
8+
Source = source;
9+
}
10+
11+
public Uri Uri { get; }
12+
public DeepLinkSource Source { get; }
13+
}
14+
15+
public enum DeepLinkSource
16+
{
17+
OutsideOfApp,
18+
InsideApp
19+
}

BMM.Core/Translation/en/Translations.designer.cs

Lines changed: 1 addition & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

BMM.Core/Translation/en/main.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,8 @@
251251
"AslaksenTheme1": "Believe in the God of miracles",
252252
"AslaksenTheme2": "I have been crucified with Christ",
253253
"AslaksenTheme3": "To fear and love God",
254-
"AslaksenTheme4": "Humility is everything"
254+
"AslaksenTheme4": "Humility is everything",
255+
"AllEpisodes": "All episodes"
255256
},
256257
"CuratedPlaylistViewModel": {
257258
"Title": "Playlist"

0 commit comments

Comments
 (0)