|
14 | 14 | namespace Bible.Alarm.Services.UI; |
15 | 15 |
|
16 | 16 | public class NavigationService( |
17 | | - INavigation navigation, |
18 | 17 | IServiceProvider serviceProvider) |
19 | 18 | : INavigationService |
20 | 19 | { |
21 | | - private readonly INavigation _navigation = navigation; |
22 | 20 | private readonly IServiceProvider _serviceProvider = serviceProvider; |
23 | 21 |
|
| 22 | + private INavigation GetNavigation() |
| 23 | + { |
| 24 | + return _serviceProvider.GetRequiredService<INavigation>(); |
| 25 | + } |
| 26 | + |
24 | 27 | public async Task NavigateToHomeAsync() |
25 | 28 | { |
| 29 | + var navigation = GetNavigation(); |
26 | 30 | var homePage = _serviceProvider.GetRequiredService<Home>(); |
27 | 31 | NavigationPage.SetHasNavigationBar(homePage, false); |
28 | | - await _navigation.PushAsync(homePage); |
| 32 | + await navigation.PushAsync(homePage); |
29 | 33 |
|
30 | 34 | // Remove any other pages from the stack |
31 | | - var pagesToRemove = _navigation.NavigationStack.Where(p => p != homePage).ToList(); |
| 35 | + var pagesToRemove = navigation.NavigationStack.Where(p => p != homePage).ToList(); |
32 | 36 | foreach (var page in pagesToRemove) |
33 | 37 | { |
34 | | - _navigation.RemovePage(page); |
| 38 | + navigation.RemovePage(page); |
35 | 39 | } |
36 | 40 | } |
37 | 41 |
|
38 | 42 | public async Task NavigateToScheduleAsync() |
39 | 43 | { |
| 44 | + var navigation = GetNavigation(); |
40 | 45 | var page = _serviceProvider.GetRequiredService<Schedule>(); |
41 | | - await _navigation.PushAsync(page); |
| 46 | + await navigation.PushAsync(page); |
42 | 47 | } |
43 | 48 |
|
44 | 49 | public async Task NavigateToMusicSelectionAsync() |
45 | 50 | { |
| 51 | + var navigation = GetNavigation(); |
46 | 52 | var page = _serviceProvider.GetRequiredService<MusicSelection>(); |
47 | | - await _navigation.PushAsync(page); |
| 53 | + await navigation.PushAsync(page); |
48 | 54 | } |
49 | 55 |
|
50 | 56 | public async Task NavigateToSongBookSelectionAsync() |
51 | 57 | { |
| 58 | + var navigation = GetNavigation(); |
52 | 59 | var page = _serviceProvider.GetRequiredService<SongBookSelection>(); |
53 | | - await _navigation.PushAsync(page); |
| 60 | + await navigation.PushAsync(page); |
54 | 61 | } |
55 | 62 |
|
56 | 63 | public async Task NavigateToTrackSelectionAsync() |
57 | 64 | { |
| 65 | + var navigation = GetNavigation(); |
58 | 66 | var page = _serviceProvider.GetRequiredService<TrackSelection>(); |
59 | | - await _navigation.PushAsync(page); |
| 67 | + await navigation.PushAsync(page); |
60 | 68 | } |
61 | 69 |
|
62 | 70 | public async Task NavigateToBibleSelectionAsync() |
63 | 71 | { |
| 72 | + var navigation = GetNavigation(); |
64 | 73 | var page = _serviceProvider.GetRequiredService<BibleSelection>(); |
65 | | - await _navigation.PushAsync(page); |
| 74 | + await navigation.PushAsync(page); |
66 | 75 | } |
67 | 76 |
|
68 | 77 | public async Task NavigateToBookSelectionAsync() |
69 | 78 | { |
| 79 | + var navigation = GetNavigation(); |
70 | 80 | var page = _serviceProvider.GetRequiredService<BookSelection>(); |
71 | | - await _navigation.PushAsync(page); |
| 81 | + await navigation.PushAsync(page); |
72 | 82 | } |
73 | 83 |
|
74 | 84 | public async Task NavigateToChapterSelectionAsync() |
75 | 85 | { |
| 86 | + var navigation = GetNavigation(); |
76 | 87 | var page = _serviceProvider.GetRequiredService<ChapterSelection>(); |
77 | | - await _navigation.PushAsync(page); |
| 88 | + await navigation.PushAsync(page); |
78 | 89 | } |
79 | 90 |
|
80 | 91 | public async Task PopAsync() |
81 | 92 | { |
82 | | - if (_navigation.NavigationStack.Count > 1) |
| 93 | + var navigation = GetNavigation(); |
| 94 | + if (navigation.NavigationStack.Count > 1) |
83 | 95 | { |
84 | | - await _navigation.PopAsync(); |
| 96 | + await navigation.PopAsync(); |
85 | 97 | } |
86 | 98 | } |
87 | 99 |
|
88 | 100 | public async Task OpenNumberOfChaptersModalAsync(object bindingContext) |
89 | 101 | { |
| 102 | + var navigation = GetNavigation(); |
90 | 103 | var modal = _serviceProvider.GetRequiredService<NumberOfChaptersModal>(); |
91 | 104 | modal.BindingContext = bindingContext; |
92 | | - await _navigation.PushModalAsync(modal); |
| 105 | + await navigation.PushModalAsync(modal); |
93 | 106 | } |
94 | 107 |
|
95 | 108 | public async Task OpenLanguageModalAsync(object bindingContext) |
96 | 109 | { |
| 110 | + var navigation = GetNavigation(); |
97 | 111 | var modal = _serviceProvider.GetRequiredService<LanguageModal>(); |
98 | 112 | modal.BindingContext = bindingContext; |
99 | | - await _navigation.PushModalAsync(modal); |
| 113 | + await navigation.PushModalAsync(modal); |
100 | 114 | } |
101 | 115 |
|
102 | 116 | public async Task OpenAlarmModalAsync() |
103 | 117 | { |
| 118 | + var navigation = GetNavigation(); |
104 | 119 | // Check if alarm modal is already open |
105 | | - if (_navigation.ModalStack.LastOrDefault()?.GetType() == typeof(AlarmModal)) |
| 120 | + if (navigation.ModalStack.LastOrDefault()?.GetType() == typeof(AlarmModal)) |
106 | 121 | { |
107 | 122 | return; |
108 | 123 | } |
109 | 124 |
|
110 | 125 | var vm = _serviceProvider.GetRequiredService<AlarmViewModal>(); |
111 | 126 | var modal = _serviceProvider.GetRequiredService<AlarmModal>(); |
112 | 127 | modal.BindingContext = vm; |
113 | | - await _navigation.PushModalAsync(modal); |
| 128 | + await navigation.PushModalAsync(modal); |
114 | 129 | } |
115 | 130 |
|
116 | 131 | public async Task OpenMediaProgressModalAsync() |
117 | 132 | { |
| 133 | + var navigation = GetNavigation(); |
118 | 134 | // Check if media progress modal is already open |
119 | | - if (_navigation.ModalStack.LastOrDefault()?.GetType() == typeof(MediaProgressModal)) |
| 135 | + if (navigation.ModalStack.LastOrDefault()?.GetType() == typeof(MediaProgressModal)) |
120 | 136 | { |
121 | 137 | return; |
122 | 138 | } |
123 | 139 |
|
124 | 140 | var vm = _serviceProvider.GetRequiredService<MediaProgressViewModal>(); |
125 | 141 | var modal = _serviceProvider.GetRequiredService<MediaProgressModal>(); |
126 | 142 | modal.BindingContext = vm; |
127 | | - await _navigation.PushModalAsync(modal); |
| 143 | + await navigation.PushModalAsync(modal); |
128 | 144 | } |
129 | 145 |
|
130 | 146 | public async Task OpenBatteryOptimizationModalAsync(object bindingContext) |
131 | 147 | { |
| 148 | + var navigation = GetNavigation(); |
132 | 149 | var modal = _serviceProvider.GetRequiredService<BatteryOptimizationExclusionModal>(); |
133 | 150 | modal.BindingContext = bindingContext; |
134 | | - await _navigation.PushModalAsync(modal); |
| 151 | + await navigation.PushModalAsync(modal); |
135 | 152 | } |
136 | 153 |
|
137 | 154 | public async Task CloseModalAsync() |
138 | 155 | { |
139 | | - if (_navigation.ModalStack.Count > 0) |
| 156 | + var navigation = GetNavigation(); |
| 157 | + if (navigation.ModalStack.Count > 0) |
140 | 158 | { |
141 | | - var modal = await _navigation.PopModalAsync(); |
| 159 | + var modal = await navigation.PopModalAsync(); |
142 | 160 | if (modal.BindingContext is IDisposable disposable) |
143 | 161 | { |
144 | 162 | disposable.Dispose(); |
|
0 commit comments