[app] Add compressing toolbar to modules and repo item

This commit is contained in:
NekoInverter 2021-10-14 19:30:38 +08:00 committed by LoveSy
parent 80d7cdd428
commit dfee8f04d6
4 changed files with 21 additions and 65 deletions

View File

@ -90,7 +90,6 @@ import java.util.stream.Collectors;
import java.util.stream.IntStream;
import rikka.core.util.ResourceUtils;
import rikka.insets.WindowInsetsHelperKt;
import rikka.recyclerview.RecyclerViewKt;
import rikka.widget.borderview.BorderRecyclerView;
@ -136,19 +135,13 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
binding = FragmentPagerBinding.inflate(inflater, container, false);
binding.getRoot().bringChildToFront(binding.appBar);
setupToolbar(binding.toolbar, R.string.Modules, R.menu.menu_modules);
binding.appBar.setLiftable(true);
binding.viewPager.setAdapter(new PagerAdapter(this));
binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
BorderRecyclerView recyclerView = binding.viewPager.findViewWithTag(position);
if (recyclerView != null) {
binding.appBar.setLifted(!recyclerView.getBorderViewDelegate().isShowingTopBorder());
}
if (position > 0) {
binding.fab.show();
} else {
@ -328,6 +321,7 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
}
return super.onContextItemSelected(item);
}
@Override
public void onDestroyView() {
super.onDestroyView();
@ -347,18 +341,9 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
}
int position = arguments.getInt("position");
ItemRepoRecyclerviewBinding binding = ItemRepoRecyclerviewBinding.inflate(getLayoutInflater(), container, false);
if (fragment.adapters.size() == 1) {
WindowInsetsHelperKt.setInitialPadding(binding.recyclerView, 0, ResourceUtils.resolveDimensionPixelOffset(requireActivity().getTheme(), androidx.appcompat.R.attr.actionBarSize, 0), 0, 0);
} else {
int height = ResourceUtils.resolveDimensionPixelOffset(requireActivity().getTheme(), androidx.appcompat.R.attr.actionBarSize, 0)
+ getResources().getDimensionPixelOffset(R.dimen.tab_layout_height);
WindowInsetsHelperKt.setInitialPadding(binding.recyclerView, 0, height, 0, 0);
}
binding.recyclerView.setTag(position);
binding.recyclerView.setAdapter(fragment.adapters.get(position));
RecyclerView.LayoutManager layoutManager = new LinearLayoutManager(requireActivity());
binding.recyclerView.setLayoutManager(layoutManager);
binding.recyclerView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> fragment.binding.appBar.setLifted(!top));
binding.recyclerView.addOnScrollListener(new RecyclerView.OnScrollListener() {
@Override
public void onScrollStateChanged(@NonNull RecyclerView recyclerView, int newState) {
@ -369,9 +354,6 @@ public class ModulesFragment extends BaseFragment implements ModuleUtil.ModuleLi
}
}
});
var insets = requireActivity().getWindow().getDecorView().getRootWindowInsets();
if (insets != null)
binding.recyclerView.onApplyWindowInsets(insets);
RecyclerViewKt.fixEdgeEffect(binding.recyclerView, false, true);
return binding.getRoot();
}

View File

@ -41,7 +41,6 @@ import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.recyclerview.widget.LinearLayoutManager;
import androidx.recyclerview.widget.RecyclerView;
import androidx.viewpager2.widget.ViewPager2;
import com.google.android.material.button.MaterialButton;
import com.google.android.material.dialog.MaterialAlertDialogBuilder;
@ -78,11 +77,9 @@ import okhttp3.Headers;
import okhttp3.Request;
import okhttp3.Response;
import rikka.core.util.ResourceUtils;
import rikka.insets.WindowInsetsHelperKt;
import rikka.recyclerview.RecyclerViewKt;
import rikka.widget.borderview.BorderNestedScrollView;
import rikka.widget.borderview.BorderRecyclerView;
import rikka.widget.borderview.BorderView;
public class RepoItemFragment extends BaseFragment implements RepoLoader.Listener {
FragmentPagerBinding binding;
@ -96,21 +93,9 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
if (module == null) return binding.getRoot();
String modulePackageName = module.getName();
String moduleName = module.getDescription();
binding.getRoot().bringChildToFront(binding.appBar);
setupToolbar(binding.toolbar, moduleName, R.menu.menu_repo_item);
binding.appBar.setLiftable(true);
binding.toolbar.setSubtitle(modulePackageName);
binding.viewPager.setAdapter(new PagerAdapter());
binding.viewPager.registerOnPageChangeCallback(new ViewPager2.OnPageChangeCallback() {
@Override
public void onPageSelected(int position) {
BorderView borderView = binding.viewPager.findViewWithTag(position);
if (borderView != null) {
binding.appBar.setLifted(!borderView.getBorderViewDelegate().isShowingTopBorder());
}
}
});
int[] titles = new int[]{R.string.module_readme, R.string.module_releases, R.string.module_information};
new TabLayoutMediator(binding.tabLayout, binding.viewPager, (tab, position) -> tab.setText(titles[position])).attach();
@ -443,8 +428,6 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
public void onBindViewHolder(@NonNull PagerAdapter.ViewHolder holder, int position) {
switch (position) {
case 0:
holder.scrollView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> binding.appBar.setLifted(!top));
holder.scrollView.setTag(position);
if (module != null)
renderGithubMarkdown(holder.webView, module.getReadmeHTML());
break;
@ -455,15 +438,7 @@ public class RepoItemFragment extends BaseFragment implements RepoLoader.Listene
} else {
holder.recyclerView.setAdapter(new InformationAdapter(module));
}
int height = ResourceUtils.resolveDimensionPixelOffset(requireActivity().getTheme(), androidx.appcompat.R.attr.actionBarSize, 0)
+ getResources().getDimensionPixelOffset(R.dimen.tab_layout_height);
WindowInsetsHelperKt.setInitialPadding(holder.recyclerView, 0, height, 0, 0);
holder.recyclerView.setTag(position);
holder.recyclerView.setLayoutManager(new LinearLayoutManager(requireActivity()));
holder.recyclerView.getBorderViewDelegate().setBorderVisibilityChangedListener((top, oldTop, bottom, oldBottom) -> binding.appBar.setLifted(!top));
var insets = requireActivity().getWindow().getDecorView().getRootWindowInsets();
if (insets != null)
holder.recyclerView.onApplyWindowInsets(insets);
RecyclerViewKt.fixEdgeEffect(holder.recyclerView, false, true);
break;
}

View File

@ -27,39 +27,38 @@
app:edgeToEdge="true"
app:fitsSystemWindowsInsets="start|end">
<com.google.android.material.appbar.AppBarLayout
android:id="@+id/app_bar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:fitsSystemWindows="true">
<LinearLayout
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:elevation="0dp"
app:layout_scrollFlags="scroll|enterAlways"
app:layout_scrollEffect="none" />
<com.google.android.material.appbar.MaterialToolbar
android:id="@+id/toolbar"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:minHeight="?attr/actionBarSize"
android:elevation="0dp" />
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/tab_layout_height"
android:background="@android:color/transparent"
app:tabGravity="center"
app:tabIndicatorAnimationMode="elastic"
app:tabMode="scrollable" />
</LinearLayout>
<com.google.android.material.tabs.TabLayout
android:id="@+id/tab_layout"
android:layout_width="match_parent"
android:layout_height="@dimen/tab_layout_height"
android:background="@android:color/transparent"
app:layout_scrollFlags="scroll|enterAlways"
app:tabGravity="center"
app:tabIndicatorAnimationMode="elastic"
app:tabMode="scrollable" />
</com.google.android.material.appbar.AppBarLayout>
<androidx.viewpager2.widget.ViewPager2
android:id="@+id/view_pager"
android:layout_width="match_parent"
android:layout_height="match_parent" />
android:layout_height="match_parent"
app:layout_behavior="@string/appbar_scrolling_view_behavior" />
<com.google.android.material.floatingactionbutton.FloatingActionButton
android:id="@+id/fab"

View File

@ -29,4 +29,4 @@
app:borderTopVisibility="whenTop"
app:borderTopDrawable="@null"
app:borderBottomVisibility="never"
app:fitsSystemWindowsInsets="top|bottom" />
app:fitsSystemWindowsInsets="bottom" />