[app] Add compressing toolbar to modules and repo item
This commit is contained in:
parent
80d7cdd428
commit
dfee8f04d6
|
|
@ -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();
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -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"
|
||||
|
|
|
|||
|
|
@ -29,4 +29,4 @@
|
|||
app:borderTopVisibility="whenTop"
|
||||
app:borderTopDrawable="@null"
|
||||
app:borderBottomVisibility="never"
|
||||
app:fitsSystemWindowsInsets="top|bottom" />
|
||||
app:fitsSystemWindowsInsets="bottom" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue