Simplify code to set tab layout position

This commit is contained in:
Stypox 2023-02-26 15:42:49 +01:00
parent 26b29ca78d
commit c8ffe65acf
No known key found for this signature in database
GPG Key ID: 4BDF1B40A49FDD23
1 changed files with 39 additions and 38 deletions

View File

@ -1,7 +1,15 @@
package org.schabi.newpipe.fragments; package org.schabi.newpipe.fragments;
import static android.widget.RelativeLayout.ABOVE;
import static android.widget.RelativeLayout.ALIGN_PARENT_BOTTOM;
import static android.widget.RelativeLayout.ALIGN_PARENT_TOP;
import static android.widget.RelativeLayout.BELOW;
import static com.google.android.material.tabs.TabLayout.INDICATOR_GRAVITY_BOTTOM;
import static com.google.android.material.tabs.TabLayout.INDICATOR_GRAVITY_TOP;
import android.content.Context; import android.content.Context;
import android.content.res.ColorStateList; import android.content.res.ColorStateList;
import android.graphics.Color;
import android.os.Bundle; import android.os.Bundle;
import android.util.Log; import android.util.Log;
import android.view.LayoutInflater; import android.view.LayoutInflater;
@ -12,10 +20,10 @@ import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
import android.widget.RelativeLayout; import android.widget.RelativeLayout;
import androidx.annotation.ColorInt;
import androidx.annotation.NonNull; import androidx.annotation.NonNull;
import androidx.annotation.Nullable; import androidx.annotation.Nullable;
import androidx.appcompat.app.ActionBar; import androidx.appcompat.app.ActionBar;
import androidx.core.content.ContextCompat;
import androidx.fragment.app.Fragment; import androidx.fragment.app.Fragment;
import androidx.fragment.app.FragmentManager; import androidx.fragment.app.FragmentManager;
import androidx.fragment.app.FragmentStatePagerAdapterMenuWorkaround; import androidx.fragment.app.FragmentStatePagerAdapterMenuWorkaround;
@ -93,8 +101,6 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
binding.mainTabLayout.setupWithViewPager(binding.pager); binding.mainTabLayout.setupWithViewPager(binding.pager);
binding.mainTabLayout.addOnTabSelectedListener(this); binding.mainTabLayout.addOnTabSelectedListener(this);
binding.mainTabLayout.setTabRippleColor(binding.mainTabLayout.getTabRippleColor()
.withAlpha(32));
setupTabs(); setupTabs();
} }
@ -112,7 +118,8 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
} else if (hasTabsChanged) { } else if (hasTabsChanged) {
setupTabs(); setupTabs();
} }
updateTabsPosition();
updateTabLayoutPosition();
} }
@Override @Override
@ -196,44 +203,38 @@ public class MainFragment extends BaseFragment implements TabLayout.OnTabSelecte
private void updateTitleForTab(final int tabPosition) { private void updateTitleForTab(final int tabPosition) {
setTitle(tabsList.get(tabPosition).getTabName(requireContext())); setTitle(tabsList.get(tabPosition).getTabName(requireContext()));
} }
private void updateTabsPosition() {
private void updateTabLayoutPosition() {
final ScrollableTabLayout tabLayout = binding.mainTabLayout; final ScrollableTabLayout tabLayout = binding.mainTabLayout;
final ViewPager viewPager = binding.pager; final ViewPager viewPager = binding.pager;
final RelativeLayout.LayoutParams tabParams = (RelativeLayout.LayoutParams) final boolean bottom = PreferenceManager.getDefaultSharedPreferences(requireContext())
tabLayout.getLayoutParams(); .getBoolean(getString(R.string.main_tabs_position_key), false);
final RelativeLayout.LayoutParams pagerParams = (RelativeLayout.LayoutParams)
viewPager.getLayoutParams(); // change layout params to make the tab layout appear either at the top or at the bottom
if (PreferenceManager.getDefaultSharedPreferences(requireContext()) final var tabParams = (RelativeLayout.LayoutParams) tabLayout.getLayoutParams();
.getBoolean(getString(R.string.main_tabs_position_key), false)) { final var pagerParams = (RelativeLayout.LayoutParams) viewPager.getLayoutParams();
tabParams.removeRule(RelativeLayout.ALIGN_PARENT_TOP);
tabParams.addRule(RelativeLayout.ALIGN_PARENT_BOTTOM); tabParams.removeRule(bottom ? ALIGN_PARENT_TOP : ALIGN_PARENT_BOTTOM);
pagerParams.removeRule(RelativeLayout.BELOW); tabParams.addRule(bottom ? ALIGN_PARENT_BOTTOM : ALIGN_PARENT_TOP);
pagerParams.addRule(RelativeLayout.ABOVE, R.id.main_tab_layout); pagerParams.removeRule(bottom ? BELOW : ABOVE);
tabLayout.setSelectedTabIndicatorGravity(TabLayout.INDICATOR_GRAVITY_TOP); pagerParams.addRule(bottom ? ABOVE : BELOW, R.id.main_tab_layout);
tabLayout.setBackgroundColor(ThemeHelper tabLayout.setSelectedTabIndicatorGravity(
.resolveColorFromAttr(requireContext(), R.attr.colorSecondary)); bottom ? INDICATOR_GRAVITY_TOP : INDICATOR_GRAVITY_BOTTOM);
final int colorAccent = ThemeHelper.resolveColorFromAttr(
requireContext(), R.attr.colorAccent);
tabLayout.setTabRippleColor(ColorStateList.valueOf(colorAccent).withAlpha(32));
tabLayout.setTabIconTint(ColorStateList.valueOf(colorAccent));
tabLayout.setSelectedTabIndicatorColor(colorAccent);
} else {
tabParams.removeRule(RelativeLayout.ALIGN_PARENT_BOTTOM);
tabParams.addRule(RelativeLayout.ALIGN_PARENT_TOP);
pagerParams.removeRule(RelativeLayout.ABOVE);
pagerParams.addRule(RelativeLayout.BELOW, R.id.main_tab_layout);
tabLayout.setSelectedTabIndicatorGravity(TabLayout.INDICATOR_GRAVITY_BOTTOM);
tabLayout.setBackgroundColor(ThemeHelper
.resolveColorFromAttr(requireContext(), R.attr.colorPrimary));
tabLayout.setTabRippleColor(ColorStateList.valueOf(
getResources().getColor(R.color.white)).withAlpha(32));
tabLayout.setTabIconTint(ColorStateList.valueOf(
getResources().getColor(R.color.white)));
tabLayout.setSelectedTabIndicatorColor(ContextCompat
.getColor(requireContext(), R.color.white));
}
tabLayout.setLayoutParams(tabParams); tabLayout.setLayoutParams(tabParams);
viewPager.setLayoutParams(pagerParams); viewPager.setLayoutParams(pagerParams);
// change the background and icon color of the tab layout:
// service-colored at the top, app-background-colored at the bottom
tabLayout.setBackgroundColor(ThemeHelper.resolveColorFromAttr(requireContext(),
bottom ? R.attr.colorSecondary : R.attr.colorPrimary));
@ColorInt final int iconColor = bottom
? ThemeHelper.resolveColorFromAttr(requireContext(), R.attr.colorAccent)
: Color.WHITE;
tabLayout.setTabRippleColor(ColorStateList.valueOf(iconColor).withAlpha(32));
tabLayout.setTabIconTint(ColorStateList.valueOf(iconColor));
tabLayout.setSelectedTabIndicatorColor(iconColor);
} }
@Override @Override