forked from MarcoBuster/Magisk
For example, switching pages in home should only have scale and alpha animations, but a "translate y" animation shows. This is because Data Binding is triggered later (like "in the next frame"), causing the animation runs before view attribute changes. This commit introduces WindowInsetsHelper class and use it to handle all window insets. With the help of LayoutInflaterFactory from the previous commit, we can control insets behavior by adding our attributes to the XML and anything is done by WindowInsetsHelper class. As changes are highly coupling, this commit also contains new ItemDecoration for lists, replacing the random combination of padding and empty drawable. And "fixEdgeEffect" extension for RecyclerView, making edge effects respect padding.
126 lines
4.8 KiB
XML
126 lines
4.8 KiB
XML
<?xml version="1.0" encoding="utf-8"?>
|
|
<layout xmlns:android="http://schemas.android.com/apk/res/android"
|
|
xmlns:app="http://schemas.android.com/apk/res-auto"
|
|
xmlns:tools="http://schemas.android.com/tools">
|
|
|
|
<data>
|
|
|
|
<import type="com.topjohnwu.magisk.core.Config" />
|
|
|
|
<variable
|
|
name="viewModel"
|
|
type="com.topjohnwu.magisk.ui.module.ModuleViewModel" />
|
|
|
|
</data>
|
|
|
|
<FrameLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent">
|
|
|
|
<!--
|
|
The list is reverted to use LinearLayoutManager only. The issue of random crashes lies in
|
|
the way StaggeredGridLayoutManager invalidates view in LazySpanLookup. Since we're adding
|
|
items in between full-span items the array is not yet invalidated and consecutively crashes
|
|
due to index of -end- being out of bounds of the current array.
|
|
|
|
If you'd like to use StaggeredGridLayoutManager, do so without adding single span items in
|
|
between of full-span items.
|
|
https://issuetracker.google.com/issues/37034096
|
|
-->
|
|
|
|
<androidx.recyclerview.widget.RecyclerView
|
|
android:id="@+id/module_list"
|
|
adapter="@{viewModel.adapter}"
|
|
gone="@{viewModel.loading && viewModel.items.empty}"
|
|
itemBinding="@{viewModel.itemBinding}"
|
|
items="@{viewModel.items}"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:clipToPadding="false"
|
|
android:orientation="vertical"
|
|
android:paddingTop="@dimen/internal_action_bar_size"
|
|
app:fitsSystemWindowsInsets="top|bottom"
|
|
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
|
|
tools:listitem="@layout/item_module_md2" />
|
|
|
|
<com.google.android.material.floatingactionbutton.FloatingActionButton
|
|
android:id="@+id/module_filter_toggle"
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:layout_gravity="bottom|end"
|
|
android:layout_marginStart="@dimen/l1"
|
|
android:layout_marginEnd="@dimen/l1"
|
|
android:layout_marginBottom="@dimen/l1"
|
|
app:layout_fitsSystemWindowsInsets="bottom"
|
|
app:backgroundTint="?colorSurfaceSurfaceVariant"
|
|
app:srcCompat="@drawable/ic_search_md2"
|
|
app:tint="?colorPrimary"
|
|
tools:layout_marginBottom="64dp" />
|
|
|
|
<com.google.android.material.circularreveal.cardview.CircularRevealCardView
|
|
android:id="@+id/module_filter"
|
|
style="@style/WidgetFoundation.Card"
|
|
app:cardBackgroundColor="?colorSurface"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:layout_gravity="bottom"
|
|
android:visibility="invisible"
|
|
app:cardCornerRadius="0dp">
|
|
|
|
<include
|
|
android:id="@+id/module_filter_include"
|
|
layout="@layout/include_module_filter"
|
|
viewModel="@{viewModel}"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent" />
|
|
|
|
</com.google.android.material.circularreveal.cardview.CircularRevealCardView>
|
|
|
|
<LinearLayout
|
|
goneUnless="@{viewModel.loading && viewModel.items.empty}"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="wrap_content"
|
|
android:layout_gravity="center"
|
|
android:gravity="center"
|
|
android:orientation="vertical">
|
|
|
|
<TextView
|
|
android:layout_width="wrap_content"
|
|
android:layout_height="wrap_content"
|
|
android:text="@string/loading"
|
|
android:textAppearance="@style/AppearanceFoundation.Title"
|
|
android:textStyle="bold" />
|
|
|
|
<ProgressBar
|
|
style="@style/WidgetFoundation.ProgressBar.Indeterminate"
|
|
android:layout_marginTop="@dimen/l1" />
|
|
|
|
</LinearLayout>
|
|
|
|
<FrameLayout
|
|
goneUnless="@{viewModel.remoteLoading}"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="4dp"
|
|
android:layout_gravity="bottom">
|
|
|
|
<FrameLayout
|
|
android:layout_width="match_parent"
|
|
android:layout_height="16dp"
|
|
android:layout_gravity="center"
|
|
tools:ignore="UselessParent">
|
|
|
|
<ProgressBar
|
|
style="@style/WidgetFoundation.ProgressBar.Indeterminate"
|
|
android:layout_width="match_parent"
|
|
android:layout_height="match_parent"
|
|
android:layout_gravity="center" />
|
|
|
|
</FrameLayout>
|
|
|
|
</FrameLayout>
|
|
|
|
</FrameLayout>
|
|
|
|
|
|
</layout>
|