Apply ripple effect on grade details header only if item is expandable (#239)

Resolves #234
This commit is contained in:
Mikołaj Pich 2019-02-14 22:23:52 +01:00 committed by Rafał Borcz
parent f305a7a599
commit c56cfec564
21 changed files with 146 additions and 61 deletions

View File

@ -8,6 +8,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -66,6 +67,10 @@ class AttendanceFragment : BaseSessionFragment(), AttendanceView, MainView.MainC
attendanceRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = attendanceAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
attendanceSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
attendancePreviousButton.setOnClickListener { presenter.onPreviousDay() }

View File

@ -8,6 +8,7 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -56,6 +57,10 @@ class ExamFragment : BaseSessionFragment(), ExamView, MainView.MainChildView, Ma
examRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = examAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider(R.layout.item_exam)
.withDrawDividerOnLastItem(false)
)
}
examSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
examPreviousButton.setOnClickListener { presenter.onPreviousWeek() }

View File

@ -78,6 +78,9 @@ class GradeDetailsFragment : BaseSessionFragment(), GradeDetailsView, GradeView.
gradeDetailsRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = gradeDetailsAdapter
addItemDecoration(GradeDetailsHeaderItemDecoration(context)
.withDefaultDivider(R.layout.header_grade_details)
)
}
gradeDetailsSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -38,6 +38,7 @@ class GradeDetailsHeader(
gradeHeaderAverage.text = average
gradeHeaderNumber.text = number
gradeHeaderNote.visibility = if (newGrades > 0) VISIBLE else GONE
gradeHeaderContainer.isEnabled = isExpandable
isViewExpandable = isExpandable
}

View File

@ -0,0 +1,38 @@
package io.github.wulkanowy.ui.modules.grade.details
import android.content.Context
import android.graphics.Canvas
import androidx.recyclerview.widget.RecyclerView
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
class GradeDetailsHeaderItemDecoration(context: Context) : FlexibleItemDecoration(context) {
override fun drawVertical(canvas: Canvas, parent: RecyclerView) {
canvas.save()
val left: Int
val right: Int
if (parent.clipToPadding) {
left = parent.paddingLeft
right = parent.width - parent.paddingRight
canvas.clipRect(left, parent.paddingTop, right,
parent.height - parent.paddingBottom)
} else {
left = 0
right = parent.width
}
val itemCount = parent.childCount
for (i in 1 until itemCount) {
val child = parent.getChildAt(i)
val viewHolder = parent.getChildViewHolder(child)
if (shouldDrawDivider(viewHolder)) {
parent.getDecoratedBoundsWithMargins(child, mBounds)
val bottom = mBounds.top + Math.round(child.translationY)
val top = bottom - mDivider.intrinsicHeight
mDivider.setBounds(left, top, right, bottom)
mDivider.draw(canvas)
}
}
canvas.restore()
}
}

View File

@ -5,6 +5,7 @@ import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -51,6 +52,10 @@ class HomeworkFragment : BaseSessionFragment(), HomeworkView, MainView.TitledVie
homeworkRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = homeworkAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
homeworkSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
homeworkPreviousButton.setOnClickListener { presenter.onPreviousDay() }

View File

@ -8,6 +8,7 @@ import android.view.View.INVISIBLE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -66,6 +67,10 @@ class MessageTabFragment : BaseSessionFragment(), MessageTabView, MessageView.Me
messageTabRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = tabAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
messageTabSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -7,6 +7,7 @@ import android.view.View.GONE
import android.view.View.VISIBLE
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -53,6 +54,10 @@ class NoteFragment : BaseSessionFragment(), NoteView, MainView.TitledView {
noteRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = noteAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
noteSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
}

View File

@ -8,6 +8,7 @@ import android.view.MenuItem
import android.view.View
import android.view.ViewGroup
import eu.davidea.flexibleadapter.FlexibleAdapter
import eu.davidea.flexibleadapter.common.FlexibleItemDecoration
import eu.davidea.flexibleadapter.common.SmoothScrollLinearLayoutManager
import eu.davidea.flexibleadapter.items.AbstractFlexibleItem
import io.github.wulkanowy.R
@ -69,6 +70,10 @@ class TimetableFragment : BaseSessionFragment(), TimetableView, MainView.MainChi
timetableRecycler.run {
layoutManager = SmoothScrollLinearLayoutManager(context)
adapter = timetableAdapter
addItemDecoration(FlexibleItemDecoration(context)
.withDefaultDivider()
.withDrawDividerOnLastItem(false)
)
}
timetableSwipe.setOnRefreshListener { presenter.onSwipeRefresh() }
timetablePreviousButton.setOnClickListener { presenter.onPreviousDay() }

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="?colorControlHighlight"
@ -8,7 +9,8 @@
android:paddingLeft="20dp"
android:paddingTop="10dp"
android:paddingRight="20dp"
android:paddingBottom="10dp">
android:paddingBottom="10dp"
tools:context=".ui.modules.exam.ExamHeader">
<TextView
android:id="@+id/examHeaderDay"

View File

@ -1,14 +1,15 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/gradeHeaderContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:background="?attr/selectableItemBackground"
android:paddingLeft="16dp"
android:paddingTop="10dp"
android:paddingRight="16dp"
android:paddingBottom="10dp">
android:paddingBottom="10dp"
tools:context=".ui.modules.grade.details.GradeDetailsHeader">
<TextView
android:id="@+id/gradeHeaderSubject"
@ -55,5 +56,5 @@
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_all_round_note_24dp"
tool:ignore="contentDescription" />
tools:ignore="contentDescription" />
</RelativeLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/selectableItemBackground"
@ -8,7 +9,8 @@
android:paddingStart="24dp"
android:paddingLeft="24dp"
android:paddingEnd="24dp"
android:paddingRight="24dp">
android:paddingRight="24dp"
tools:context=".ui.modules.account.AccountItem">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/accountItemImage"

View File

@ -1,17 +1,17 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/attendanceItemContainer"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:background="?attr/selectableItemBackground"
android:paddingStart="12dp"
android:paddingLeft="12dp"
android:paddingTop="7dp"
android:paddingEnd="12dp"
android:paddingRight="12dp"
android:paddingBottom="7dp">
android:paddingBottom="7dp"
tools:context=".ui.modules.attendance.AttendanceItem">
<TextView
android:id="@+id/attendanceItemNumber"
@ -22,7 +22,7 @@
android:maxLength="2"
android:text="0"
android:textSize="32sp"
tool:ignore="all" />
tools:ignore="all" />
<TextView
android:id="@+id/attendanceItemSubject"
@ -39,7 +39,7 @@
android:maxLines="1"
android:text="@string/app_name"
android:textSize="17sp"
tool:ignore="all" />
tools:ignore="all" />
<TextView
android:id="@+id/attendanceItemDescription"
@ -61,6 +61,6 @@
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_all_note_24dp"
tool:ignore="contentDescription" />
tools:ignore="contentDescription" />
</RelativeLayout>

View File

@ -1,9 +1,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/exams_subitem_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless">
android:background="?attr/selectableItemBackground"
tools:context=".ui.modules.exam.ExamItem">
<TextView
android:id="@+id/examItemSubject"

View File

@ -1,16 +1,17 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/grade_subitem_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:paddingBottom="7dp"
android:paddingEnd="12dp"
android:paddingLeft="12dp"
android:paddingRight="12dp"
android:background="?attr/selectableItemBackground"
android:paddingStart="12dp"
android:paddingTop="7dp">
android:paddingLeft="12dp"
android:paddingTop="7dp"
android:paddingEnd="12dp"
android:paddingRight="12dp"
android:paddingBottom="7dp"
tools:context=".ui.modules.grade.details.GradeDetailsItem">
<TextView
android:id="@+id/gradeItemValue"
@ -29,14 +30,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_marginEnd="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="20dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/gradeItemValue"
android:layout_toLeftOf="@id/gradeItemNote"
android:layout_toRightOf="@+id/gradeItemValue"
android:layout_marginLeft="10dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:layout_toStartOf="@id/gradeItemNote"
android:layout_toLeftOf="@id/gradeItemNote"
android:layout_toEndOf="@+id/gradeItemValue"
android:layout_toRightOf="@+id/gradeItemValue"
android:ellipsize="end"
android:maxLines="1"
android:text="@string/all_description"
@ -46,9 +47,9 @@
android:id="@+id/gradeItemDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/gradeItemValue"
android:layout_alignLeft="@+id/gradeItemDescription"
android:layout_alignStart="@+id/gradeItemDescription"
android:layout_alignLeft="@+id/gradeItemDescription"
android:layout_alignBottom="@+id/gradeItemValue"
android:text="@string/all_date"
android:textSize="12sp" />
@ -57,14 +58,14 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignBottom="@+id/gradeItemValue"
android:layout_marginEnd="20dp"
android:layout_marginLeft="10dp"
android:layout_marginRight="20dp"
android:layout_marginStart="10dp"
android:layout_toEndOf="@+id/gradeItemDate"
android:layout_toLeftOf="@id/gradeItemNote"
android:layout_toRightOf="@+id/gradeItemDate"
android:layout_marginLeft="10dp"
android:layout_marginEnd="20dp"
android:layout_marginRight="20dp"
android:layout_toStartOf="@id/gradeItemNote"
android:layout_toLeftOf="@id/gradeItemNote"
android:layout_toEndOf="@+id/gradeItemDate"
android:layout_toRightOf="@+id/gradeItemDate"
android:text="@string/grade_weight"
android:textSize="12sp" />
@ -76,5 +77,5 @@
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_all_round_note_24dp"
tool:ignore="contentDescription" />
tools:ignore="contentDescription" />
</RelativeLayout>

View File

@ -1,9 +1,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/homework_subitem_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless">
android:background="?attr/selectableItemBackground"
tools:context=".ui.modules.homework.HomeworkItem">
<TextView
android:id="@+id/homeworkItemSubject"

View File

@ -1,12 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout 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"
android:layout_width="match_parent"
android:layout_height="72dp"
android:background="?attr/selectableItemBackground"
android:clickable="true"
android:focusable="true"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:padding="16dp">
android:padding="16dp"
tools:context=".ui.modules.login.studentselect.LoginStudentSelectItem">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/loginItemImage"
@ -14,7 +16,7 @@
android:layout_height="40dp"
android:layout_marginEnd="16dp"
android:layout_marginRight="16dp"
android:tint="@android:color/black"
android:tint="?android:attr/textColorPrimary"
app:srcCompat="@drawable/ic_all_account_24dp" />
<TextView

View File

@ -1,13 +1,13 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tool="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:background="?attr/selectableItemBackground"
android:paddingLeft="16dp"
android:paddingTop="10dp"
android:paddingRight="16dp"
android:paddingBottom="10dp">
android:paddingBottom="10dp"
tools:context=".ui.modules.message.MessageItem">
<TextView
android:id="@+id/messageItemAuthor"
@ -19,7 +19,7 @@
android:ellipsize="end"
android:maxLines="1"
android:textSize="15sp"
tool:text="@tools:sample/full_names" />
tools:text="@tools:sample/full_names" />
<TextView
android:id="@+id/messageItemDate"
@ -33,7 +33,7 @@
android:layout_toRightOf="@id/messageItemAuthor"
android:gravity="end"
android:textSize="13sp"
tool:text="@tools:sample/date/mmddyy" />
tools:text="@tools:sample/date/mmddyy" />
<TextView
android:id="@+id/messageItemSubject"
@ -47,6 +47,6 @@
android:maxLines="1"
android:textColor="?android:attr/android:textColorSecondary"
android:textSize="12sp"
tool:text="@tools:sample/lorem" />
tools:text="@tools:sample/lorem" />
</RelativeLayout>

View File

@ -1,6 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 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"
android:layout_width="match_parent"
android:layout_height="56dp"
android:background="?attr/selectableItemBackground"
@ -8,7 +9,8 @@
android:paddingLeft="16dp"
android:paddingTop="8dp"
android:paddingRight="16dp"
android:paddingBottom="8dp">
android:paddingBottom="8dp"
tools:context=".ui.modules.more.MoreItem">
<androidx.appcompat.widget.AppCompatImageView
android:id="@+id/moreItemImage"

View File

@ -1,9 +1,10 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/note_subitem_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless">
android:background="?attr/selectableItemBackground"
tools:context=".ui.modules.note.NoteItem">
<TextView
android:id="@+id/noteItemDate"

View File

@ -1,17 +1,17 @@
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tool="http://schemas.android.com/tools"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/timetable_subitem_container"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/ic_all_divider"
android:foreground="?attr/selectableItemBackgroundBorderless"
android:background="?attr/selectableItemBackground"
android:paddingStart="12dp"
android:paddingLeft="12dp"
android:paddingTop="7dp"
android:paddingEnd="12dp"
android:paddingRight="12dp"
android:paddingBottom="7dp">
android:paddingBottom="7dp"
tools:context=".ui.modules.timetable.TimetableItem">
<TextView
android:id="@+id/timetableItemNumber"
@ -22,7 +22,7 @@
android:maxLength="2"
android:text="0"
android:textSize="32sp"
tool:ignore="all" />
tools:ignore="all" />
<TextView
android:id="@+id/timetableItemSubject"
@ -39,7 +39,7 @@
android:maxLines="1"
android:text="@string/app_name"
android:textSize="17sp"
tool:ignore="RelativeOverlap" />
tools:ignore="RelativeOverlap" />
<TextView
android:id="@+id/timetableItemTime"
@ -68,7 +68,7 @@
android:text="@string/app_name"
android:textColor="?android:attr/android:textColorSecondary"
android:textSize="12sp"
tool:ignore="RelativeOverlap" />
tools:ignore="RelativeOverlap" />
<ImageView
android:id="@+id/timetableItemAlert"
@ -78,6 +78,6 @@
android:layout_alignParentRight="true"
android:layout_marginTop="10dp"
app:srcCompat="@drawable/ic_timetable_swap_30dp"
tool:ignore="contentDescription" />
tools:ignore="contentDescription" />
</RelativeLayout>