2222import androidx .annotation .Nullable ;
2323import androidx .core .content .ContextCompat ;
2424import androidx .core .graphics .ColorUtils ;
25+ import androidx .core .view .MenuProvider ;
2526import androidx .preference .PreferenceManager ;
2627
2728import com .google .android .material .snackbar .Snackbar ;
@@ -99,6 +100,7 @@ public class ChannelFragment extends BaseStateFragment<ChannelInfo>
99100 private MenuItem menuRssButton ;
100101 private MenuItem menuNotifyButton ;
101102 private SubscriptionEntity channelSubscription ;
103+ private MenuProvider menuProvider ;
102104
103105 public static ChannelFragment getInstance (final int serviceId , final String url ,
104106 final String name ) {
@@ -121,7 +123,62 @@ private void setInitialData(final int sid, final String u, final String title) {
121123 @ Override
122124 public void onCreate (final Bundle savedInstanceState ) {
123125 super .onCreate (savedInstanceState );
124- setHasOptionsMenu (true );
126+ menuProvider = new MenuProvider () {
127+ @ Override
128+ public void onCreateMenu (@ NonNull final Menu menu ,
129+ @ NonNull final MenuInflater inflater ) {
130+ inflater .inflate (R .menu .menu_channel , menu );
131+
132+ if (DEBUG ) {
133+ Log .d (TAG , "onCreateOptionsMenu() called with: "
134+ + "menu = [" + menu + "], inflater = [" + inflater + "]" );
135+ }
136+
137+ }
138+
139+ @ Override
140+ public void onPrepareMenu (@ NonNull final Menu menu ) {
141+ menuRssButton = menu .findItem (R .id .menu_item_rss );
142+ menuNotifyButton = menu .findItem (R .id .menu_item_notify );
143+ updateRssButton ();
144+ updateNotifyButton (channelSubscription );
145+ }
146+
147+ @ Override
148+ public boolean onMenuItemSelected (@ NonNull final MenuItem item ) {
149+ switch (item .getItemId ()) {
150+ case R .id .menu_item_notify :
151+ final boolean value = !item .isChecked ();
152+ item .setEnabled (false );
153+ setNotify (value );
154+ break ;
155+ case R .id .action_settings :
156+ NavigationHelper .openSettings (requireContext ());
157+ break ;
158+ case R .id .menu_item_rss :
159+ if (currentInfo != null ) {
160+ ShareUtils .openUrlInApp (requireContext (), currentInfo .getFeedUrl ());
161+ }
162+ break ;
163+ case R .id .menu_item_openInBrowser :
164+ if (currentInfo != null ) {
165+ ShareUtils .openUrlInBrowser (requireContext (),
166+ currentInfo .getOriginalUrl ());
167+ }
168+ break ;
169+ case R .id .menu_item_share :
170+ if (currentInfo != null ) {
171+ ShareUtils .shareText (requireContext (), name ,
172+ currentInfo .getOriginalUrl (), currentInfo .getAvatars ());
173+ }
174+ break ;
175+ default :
176+ return false ;
177+ }
178+ return true ;
179+ }
180+ };
181+ activity .addMenuProvider (menuProvider );
125182 }
126183
127184 @ Override
@@ -183,67 +240,10 @@ public void onDestroy() {
183240 }
184241 disposables .clear ();
185242 binding = null ;
243+ activity .removeMenuProvider (menuProvider );
244+ menuProvider = null ;
186245 }
187246
188-
189- /*//////////////////////////////////////////////////////////////////////////
190- // Menu
191- //////////////////////////////////////////////////////////////////////////*/
192-
193- @ Override
194- public void onCreateOptionsMenu (@ NonNull final Menu menu ,
195- @ NonNull final MenuInflater inflater ) {
196- super .onCreateOptionsMenu (menu , inflater );
197- inflater .inflate (R .menu .menu_channel , menu );
198-
199- if (DEBUG ) {
200- Log .d (TAG , "onCreateOptionsMenu() called with: "
201- + "menu = [" + menu + "], inflater = [" + inflater + "]" );
202- }
203- }
204-
205- @ Override
206- public void onPrepareOptionsMenu (@ NonNull final Menu menu ) {
207- super .onPrepareOptionsMenu (menu );
208- menuRssButton = menu .findItem (R .id .menu_item_rss );
209- menuNotifyButton = menu .findItem (R .id .menu_item_notify );
210- updateNotifyButton (channelSubscription );
211- }
212-
213- @ Override
214- public boolean onOptionsItemSelected (@ NonNull final MenuItem item ) {
215- switch (item .getItemId ()) {
216- case R .id .menu_item_notify :
217- final boolean value = !item .isChecked ();
218- item .setEnabled (false );
219- setNotify (value );
220- break ;
221- case R .id .action_settings :
222- NavigationHelper .openSettings (requireContext ());
223- break ;
224- case R .id .menu_item_rss :
225- if (currentInfo != null ) {
226- ShareUtils .openUrlInApp (requireContext (), currentInfo .getFeedUrl ());
227- }
228- break ;
229- case R .id .menu_item_openInBrowser :
230- if (currentInfo != null ) {
231- ShareUtils .openUrlInBrowser (requireContext (), currentInfo .getOriginalUrl ());
232- }
233- break ;
234- case R .id .menu_item_share :
235- if (currentInfo != null ) {
236- ShareUtils .shareText (requireContext (), name , currentInfo .getOriginalUrl (),
237- currentInfo .getAvatars ());
238- }
239- break ;
240- default :
241- return super .onOptionsItemSelected (item );
242- }
243- return true ;
244- }
245-
246-
247247 /*//////////////////////////////////////////////////////////////////////////
248248 // Channel Subscription
249249 //////////////////////////////////////////////////////////////////////////*/
@@ -408,6 +408,13 @@ private void updateSubscribeButton(final boolean isSubscribed) {
408408 animate (binding .channelSubscribeButton , true , 100 , AnimationType .LIGHT_SCALE_AND_ALPHA );
409409 }
410410
411+ private void updateRssButton () {
412+ if (menuRssButton == null || currentInfo == null ) {
413+ return ;
414+ }
415+ menuRssButton .setVisible (!TextUtils .isEmpty (currentInfo .getFeedUrl ()));
416+ }
417+
411418 private void updateNotifyButton (@ Nullable final SubscriptionEntity subscription ) {
412419 if (menuNotifyButton == null ) {
413420 return ;
@@ -610,9 +617,7 @@ public void handleResult(@NonNull final ChannelInfo result) {
610617 binding .subChannelAvatarView .setVisibility (View .VISIBLE );
611618 }
612619
613- if (menuRssButton != null ) {
614- menuRssButton .setVisible (!TextUtils .isEmpty (result .getFeedUrl ()));
615- }
620+ updateRssButton ();
616621
617622 channelContentNotSupported = false ;
618623 for (final Throwable throwable : result .getErrors ()) {
0 commit comments