Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

send notification badge setting and OS to api #635

Merged
merged 2 commits into from
Dec 4, 2024
Merged
Changes from 1 commit
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 BMM.Api/Implementation/Models/Subscription.cs
Original file line number Diff line number Diff line change
@@ -9,6 +9,9 @@ public class Subscription
public IList<PodcastReference> PodcastReferences { get; set; }

public string Token { get; set; }

public bool ShowNotificationBadge { get; set; }
public string OS { get; set; }

public virtual bool ShouldSerializeDeviceId()
{
2 changes: 1 addition & 1 deletion BMM.Core/Implementations/Badge/BadgeService.cs
Original file line number Diff line number Diff line change
@@ -28,7 +28,7 @@ private set

public async Task<bool> SetIfPossible(int trackId)
{
if (!await _settingsStorage.GetBibleStudyBadgeEnabled())
if (!await _settingsStorage.GetNotificationBadgeEnabled())
return false;

if (!await _settingsStorage.GetRemoveBadgeOnStreakPointOnlyEnabled()
Original file line number Diff line number Diff line change
@@ -21,7 +21,7 @@ public AkavacheBlobSettingsStorage(IFirebaseRemoteConfig config)
public async Task<bool> GetAutoplayEnabled() => AppSettings.AutoplayEnabled ?? _config.AutoplayEnabledDefaultSetting;

public async Task<bool> GetStreakHidden() => AppSettings.StreakHidden;
public async Task<bool> GetBibleStudyBadgeEnabled() => _config.IsBadgesFeatureEnabled && AppSettings.BibleStudyBadgeEnabled;
public async Task<bool> GetNotificationBadgeEnabled() => _config.IsBadgesFeatureEnabled && AppSettings.BibleStudyBadgeEnabled;
public async Task<bool> GetRemoveBadgeOnStreakPointOnlyEnabled() => AppSettings.RemoveBadgeOnStreakPointOnlyEnabled;

public async Task<bool> GetBibleStudyOnHomeEnabled() => AppSettings.BibleStudyOnHomeEnabled;
@@ -36,7 +36,7 @@ public AkavacheBlobSettingsStorage(IFirebaseRemoteConfig config)
public async Task SetAutoplayEnabled(bool enabled) => AppSettings.AutoplayEnabled = enabled;
public async Task SetPlayInChronologicalOrderEnabled(bool enabled) => AppSettings.PlayInChronologicalOrderEnabled = enabled;
public async Task SetStreakHidden(bool streakHidden) => AppSettings.StreakHidden = streakHidden;
public async Task SetBibleStudyBadgeEnabled(bool isEnabled) => AppSettings.BibleStudyBadgeEnabled = isEnabled;
public async Task SetNotificationBadgeEnabled(bool isEnabled) => AppSettings.BibleStudyBadgeEnabled = isEnabled;
public async Task SetBibleStudyOnHomeEnabled(bool isEnabled) => AppSettings.BibleStudyOnHomeEnabled = isEnabled;
public async Task SetRemoveBadgeOnStreakPointOnlyEnabled(bool isEnabled) => AppSettings.RemoveBadgeOnStreakPointOnlyEnabled = isEnabled;
}
4 changes: 2 additions & 2 deletions BMM.Core/Implementations/Connection/ISettingsStorage.cs
Original file line number Diff line number Diff line change
@@ -18,12 +18,12 @@ public interface ISettingsStorage
Task SetPlayInChronologicalOrderEnabled(bool enabled);

Task<bool> GetStreakHidden();
Task<bool> GetBibleStudyBadgeEnabled();
Task<bool> GetNotificationBadgeEnabled();
Task<bool> GetRemoveBadgeOnStreakPointOnlyEnabled();
Task<bool> GetBibleStudyOnHomeEnabled();

Task SetStreakHidden(bool streakHidden);
Task SetBibleStudyBadgeEnabled(bool isEnabled);
Task SetNotificationBadgeEnabled(bool isEnabled);
Task SetBibleStudyOnHomeEnabled(bool isEnabled);
Task SetRemoveBadgeOnStreakPointOnlyEnabled(bool isEnabled);
}
26 changes: 18 additions & 8 deletions BMM.Core/Implementations/Notifications/SubscriptionManager.cs
Original file line number Diff line number Diff line change
@@ -1,16 +1,12 @@
using System;
using System.Linq;
using System.Net;
using System.Threading.Tasks;
using System.Net;
using BMM.Api;
using BMM.Api.Implementation.Models;
using BMM.Core.Implementations.Connection;
using BMM.Core.Implementations.Exceptions;
using BMM.Core.Implementations.Podcasts;
using BMM.Core.Implementations.Security;
using BMM.Core.Implementations.Storage;
using BMM.Core.Messages;
using Microsoft.Extensions.Logging;
using MvvmCross.Logging;
using MvvmCross.Plugin.Messenger;
using ILogger = BMM.Api.Framework.ILogger;

@@ -23,6 +19,7 @@ public class SubscriptionManager : ISubscriptionManager
private readonly IBMMClient _bmmClient;
private readonly IUserAuthChecker _authChecker;
private readonly ILogger _logger;
private readonly ISettingsStorage _settingsStorage;

public SubscriptionManager(
IMvxMessenger messenger,
@@ -31,13 +28,15 @@ public SubscriptionManager(
IExceptionHandler exceptionHandler,
IBMMClient bmmClient,
IUserAuthChecker authChecker,
ILogger logger)
ILogger logger,
ISettingsStorage settingsStorage)
{
_podcastDownloader = podcastDownloader;
_tokenProvider = tokenProvider;
_bmmClient = bmmClient;
_authChecker = authChecker;
_logger = logger;
_settingsStorage = settingsStorage;

LoggedInOnlineToken = messenger.Subscribe<LoggedInOnlineMessage>(message => { exceptionHandler.FireAndForgetWithoutUserMessages(UpdateSubscriptionAndRetry); });

@@ -50,8 +49,15 @@ public SubscriptionManager(
{
exceptionHandler.FireAndForgetWithoutUserMessages(UpdateSubscriptionAndRetry);
});

BadgeChangedToken = messenger.Subscribe<NotificationBadgeSettingChangedMessage>(message =>
{
exceptionHandler.FireAndForgetWithoutUserMessages(UpdateSubscriptionAndRetry);
});
}

protected MvxSubscriptionToken BadgeChangedToken;

protected MvxSubscriptionToken LoggedInOnlineToken;

protected MvxSubscriptionToken ContentLanguagesChangedToken;
@@ -115,7 +121,11 @@ protected virtual async Task UpdateSubscription(string token)
{
Token = token,
DeviceId = AppSettings.DeviceId.ToString(),
PodcastReferences = podcastReferences
PodcastReferences = podcastReferences,
ShowNotificationBadge = await _settingsStorage.GetNotificationBadgeEnabled(),
OS = OperatingSystem.IsIOS()
? "ios"
: "android"
};

await _bmmClient.Subscription.Save(subscription);
10 changes: 10 additions & 0 deletions BMM.Core/Messages/NotificationBadgeSettingChangedMessage.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
using MvvmCross.Plugin.Messenger;

namespace BMM.Core.Messages;

public class NotificationBadgeSettingChangedMessage : MvxMessage
{
public NotificationBadgeSettingChangedMessage(object sender) : base(sender)
{
}
}
14 changes: 9 additions & 5 deletions BMM.Core/ViewModels/SettingsViewModel.cs
Original file line number Diff line number Diff line change
@@ -73,6 +73,7 @@ public class SettingsViewModel : BaseViewModel
private readonly IFeaturePreviewPermission _featurePreviewPermission;
private readonly IMvxNavigationService _mvxNavigationService;
private readonly IBadgeService _badgeService;
private readonly IMvxMessenger _messenger;
private SelectableListItem _externalStorage;

private string _profilePictureUrl;
@@ -115,7 +116,8 @@ public SettingsViewModel(
IResetAchievementAction resetAchievementAction,
IFeaturePreviewPermission featurePreviewPermission,
IMvxNavigationService mvxNavigationService,
IBadgeService badgeService)
IBadgeService badgeService,
IMvxMessenger messenger)
{
_deviceInfo = deviceInfo;
_networkSettings = networkSettings;
@@ -142,6 +144,7 @@ public SettingsViewModel(
_featurePreviewPermission = featurePreviewPermission;
_mvxNavigationService = mvxNavigationService;
_badgeService = badgeService;
_messenger = messenger;
Messenger.Subscribe<SelectedStorageChangedMessage>(message => { ChangeStorageText(message.FileStorage); }, MvxReference.Strong);
}

@@ -253,14 +256,14 @@ private async Task<List<IListItem>> BuildHomeScreenSection()

if (_remoteConfig.IsBadgesFeatureEnabled)
{
bool isBibleStudyBadgeEnabled = await _settingsStorage.GetBibleStudyBadgeEnabled();
bool notificationBadgeEnabled = await _settingsStorage.GetNotificationBadgeEnabled();

items.Add(new CheckboxListItemPO
{
Key = NotificationBadgeKey,
Title = TextSource[Translations.SettingsViewModel_OptionNotificationBadgeHeader],
Text = TextSource[Translations.SettingsViewModel_OptionNotificationBadgeText],
IsChecked = isBibleStudyBadgeEnabled,
IsChecked = notificationBadgeEnabled,
OnChanged = async sender => await OnNotificationBadgeSettingChange(sender)
});

@@ -271,7 +274,7 @@ private async Task<List<IListItem>> BuildHomeScreenSection()
Text = TextSource[Translations.SettingsViewModel_OptionRemoveBadgeOnStreakPointOnlyText],
IsChecked = await _settingsStorage.GetRemoveBadgeOnStreakPointOnlyEnabled(),
OnChanged = sender => _settingsStorage.SetRemoveBadgeOnStreakPointOnlyEnabled(sender.IsChecked),
IsEnabled = isBibleStudyBadgeEnabled
IsEnabled = notificationBadgeEnabled
});
}

@@ -281,8 +284,9 @@ private async Task<List<IListItem>> BuildHomeScreenSection()
private async Task OnNotificationBadgeSettingChange(CheckboxListItemPO sender)
{
var badgeOnStreakItem = GetItemForKey(RemoveBadgeOnStreakPointKey);
await _settingsStorage.SetBibleStudyBadgeEnabled(sender.IsChecked);
await _settingsStorage.SetNotificationBadgeEnabled(sender.IsChecked);
badgeOnStreakItem.IsEnabled = sender.IsChecked;
_messenger.Publish(new NotificationBadgeSettingChangedMessage(this));
}

private ICheckboxListItemPO GetItemForKey(string key)
Original file line number Diff line number Diff line change
@@ -29,6 +29,7 @@
using Moq;
using MvvmCross.Localization;
using MvvmCross.Navigation;
using MvvmCross.Plugin.Messenger;
using NSubstitute;
using NUnit.Framework;

@@ -64,6 +65,7 @@ public class SettingsViewModelTests : BaseViewModelTests
private Mock<IResetAchievementAction> _resetAchievementAction;
private Mock<IMvxNavigationService> _mvxNavigationService;
private Mock<IBadgeService> _badgeService;
private Mock<IMvxMessenger> _messageService;

public override void SetUp()
{
@@ -117,6 +119,7 @@ public override void SetUp()
_resetAchievementAction = new Mock<IResetAchievementAction>();
_mvxNavigationService = new Mock<IMvxNavigationService>();
_badgeService = new Mock<IBadgeService>();
_messageService = new Mock<IMvxMessenger>();

_textSource.Setup(x => x.GetText(It.IsAny<string>())).Returns(String.Empty);

@@ -154,7 +157,8 @@ public SettingsViewModel CreateSettingsViewModel()
_resetAchievementAction.Object,
_featurePreviewPermission.Object,
_mvxNavigationService.Object,
_badgeService.Object
_badgeService.Object,
_messageService.Object
);

settingsViewModel.TextSource = TextResource.Object;