summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/fragment/PagedToolbarFragment.java
blob: f79bffabc86b9fc89695ef316d0626cb054d323f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
package de.danoeh.antennapod.fragment;

import androidx.annotation.NonNull;
import androidx.appcompat.widget.Toolbar;
import androidx.fragment.app.Fragment;
import androidx.viewpager2.widget.ViewPager2;

/**
 * Fragment with a ViewPager where the displayed items influence the top toolbar's menu.
 * All items share the same general menu items and are just allowed to show/hide them.
 */
public abstract class PagedToolbarFragment extends Fragment {
    private Toolbar toolbar;
    private ViewPager2 viewPager;

    /**
     * Invalidate the toolbar menu if the current child fragment is visible.
     * @param child The fragment to invalidate
     */
    void invalidateOptionsMenuIfActive(@NonNull Fragment child) {
        Fragment visibleChild = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
        if (visibleChild == child) {
            visibleChild.onPrepareOptionsMenu(toolbar.getMenu());
        }
    }

    protected void setupPagedToolbar(Toolbar toolbar, ViewPager2 viewPager) {
        this.toolbar = toolbar;
        this.viewPager = viewPager;

        toolbar.setOnMenuItemClickListener(item -> {
            Fragment child = getChildFragmentManager().findFragmentByTag("f" + viewPager.getCurrentItem());
            if (child != null) {
                return child.onOptionsItemSelected(item);
            }
            return false;
        });
        viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
            @Override
            public void onPageSelected(int position) {
                Fragment child = getChildFragmentManager().findFragmentByTag("f" + position);
                if (child != null) {
                    child.onPrepareOptionsMenu(toolbar.getMenu());
                }
            }
        });
    }
}