Added custom recycler divider, further changes to ViewHolders

This commit is contained in:
Arty Bishop committed 2020-10-17 14:52:19 +01:00
1 parent 1c6d22ccf9
commit 69b3e4f70b
14 files changed
+98 -89

No files matched your search

@@ -4,11 +4,9 @@ import android.content.Intent
import android.os.Bundle
import android.view.View
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.navigation.findNavController
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import com.rtbishop.look4sat.R
import com.rtbishop.look4sat.SharedViewModel
@@ -16,6 +14,7 @@ import com.rtbishop.look4sat.data.SatEntry
import com.rtbishop.look4sat.data.TleSource
import com.rtbishop.look4sat.databinding.FragmentEntriesBinding
import com.rtbishop.look4sat.ui.adapters.EntriesAdapter
import com.rtbishop.look4sat.utility.RecyclerDivider
import com.rtbishop.look4sat.utility.Utilities.snack
import dagger.hilt.android.AndroidEntryPoint
@@ -23,9 +22,9 @@ import dagger.hilt.android.AndroidEntryPoint
class EntriesFragment : Fragment(R.layout.fragment_entries) {
private lateinit var binding: FragmentEntriesBinding
private lateinit var entriesAdapter: EntriesAdapter
private val viewModel: SharedViewModel by activityViewModels()
private val pickFileReqCode = 100
private val entriesAdapter = EntriesAdapter()
private var tleSources = listOf<TleSource>()
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@@ -36,17 +35,13 @@ class EntriesFragment : Fragment(R.layout.fragment_entries) {
}
private fun setupComponents() {
entriesAdapter = EntriesAdapter()
binding.apply {
entriesRecycler.apply {
val linearLayoutMgr = LinearLayoutManager(requireContext())
val divider = DividerItemDecoration(requireContext(), linearLayoutMgr.orientation)
val drawable = ResourcesCompat
.getDrawable(resources, R.drawable.rec_entries_divider, requireActivity().theme)
drawable?.let { divider.setDrawable(it) }
layoutManager = linearLayoutMgr
adapter = entriesAdapter
addItemDecoration(divider)
setHasFixedSize(true)
adapter = entriesAdapter
layoutManager = LinearLayoutManager(requireContext())
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_light))
}
importWeb.setOnClickListener { showImportFromWebDialog() }
importFile.setOnClickListener { showImportFromFileDialog() }
@@ -22,10 +22,8 @@ package com.rtbishop.look4sat.ui.fragments
import android.animation.ObjectAnimator
import android.os.Bundle
import android.view.View
import androidx.core.content.res.ResourcesCompat
import androidx.fragment.app.Fragment
import androidx.fragment.app.activityViewModels
import androidx.recyclerview.widget.DividerItemDecoration
import androidx.recyclerview.widget.LinearLayoutManager
import androidx.recyclerview.widget.SimpleItemAnimator
import com.rtbishop.look4sat.R
@@ -35,6 +33,7 @@ import com.rtbishop.look4sat.data.SatPass
import com.rtbishop.look4sat.databinding.FragmentPassesBinding
import com.rtbishop.look4sat.ui.adapters.PassesAdapter
import com.rtbishop.look4sat.utility.PrefsManager
import com.rtbishop.look4sat.utility.RecyclerDivider
import com.rtbishop.look4sat.utility.Utilities
import com.rtbishop.look4sat.utility.Utilities.getRotationAnimator
import dagger.hilt.android.AndroidEntryPoint
@@ -78,17 +77,12 @@ class PassesFragment : Fragment(R.layout.fragment_passes) {
passesAdapter = PassesAdapter(requireContext(), prefsManager.shouldUseUTC())
binding.apply {
passesRecycler.apply {
val linearLayoutMgr = LinearLayoutManager(requireContext())
val divider = DividerItemDecoration(requireContext(), linearLayoutMgr.orientation)
val drawable = ResourcesCompat
.getDrawable(resources, R.drawable.rec_passes_divider, requireActivity().theme)
drawable?.let { divider.setDrawable(it) }
layoutManager = linearLayoutMgr
setHasFixedSize(true)
adapter = passesAdapter
isVerticalScrollBarEnabled = false
layoutManager = LinearLayoutManager(context)
(itemAnimator as SimpleItemAnimator).supportsChangeAnimations = false
addItemDecoration(divider)
setHasFixedSize(true)
addItemDecoration(RecyclerDivider(R.drawable.rec_divider_dark))
}
animator = passesFab.getRotationAnimator()
passesFab.setOnClickListener {
@@ -0,0 +1,26 @@
package com.rtbishop.look4sat.utility
import android.graphics.Canvas
import androidx.core.content.ContextCompat
import androidx.recyclerview.widget.RecyclerView
class RecyclerDivider(private val resId: Int) : RecyclerView.ItemDecoration() {
override fun onDrawOver(c: Canvas, parent: RecyclerView) {
val divider = ContextCompat.getDrawable(parent.context, resId)!!
val left = parent.paddingLeft
val right = parent.width - parent.paddingRight
parent.adapter?.itemCount?.let { childCount ->
for (i in 0 until childCount) {
if (i == (childCount - 1)) continue
parent.getChildAt(i)?.let {
val params = it.layoutParams as RecyclerView.LayoutParams
val top = it.bottom + params.bottomMargin
val bottom = top + divider.intrinsicHeight
divider.setBounds(left, top, right, bottom)
divider.draw(c)
}
}
}
}
}
@@ -1,5 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/themeLight" android:state_selected="true" />
<item android:color="@color/greyLight" android:state_selected="false" />
</selector>
@@ -5,7 +5,7 @@
<size
android:width="1dp"
android:height="2dp" />
<solid android:color="#121212" />
<solid android:color="@color/greyDark" />
</shape>
</item>
</layer-list>
@@ -7,7 +7,7 @@
<size
android:width="1dp"
android:height="0.5dp" />
<solid android:color="#808080" />
<solid android:color="@color/greyDivider" />
</shape>
</item>
</layer-list>
@@ -21,8 +21,6 @@
android:layout_width="match_parent"
android:layout_height="48dp"
app:elevation="1dp"
app:itemIconTint="@color/nav_bottom_item"
app:itemTextColor="@color/nav_bottom_item"
app:labelVisibilityMode="labeled"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
+29 -4
View File
@@ -51,14 +51,39 @@
app:layout_constraintStart_toStartOf="@id/passes_bar"
app:layout_constraintTop_toTopOf="parent" />
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="4dp"
android:fontFamily="@font/digital_dismay"
android:text="@string/timer_placeholder"
android:textColor="@color/themeLight"
android:textSize="48sp"
app:layout_constraintBottom_toBottomOf="@+id/passes_timer"
app:layout_constraintEnd_toStartOf="@+id/passes_timer"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@+id/passes_timer" />
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:elevation="4dp"
android:fontFamily="@font/digital_dismay"
android:text="@string/timer_placeholder"
android:textColor="@color/themeLight"
android:textSize="48sp"
app:layout_constraintBottom_toBottomOf="@+id/passes_timer"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/passes_timer"
app:layout_constraintTop_toTopOf="@+id/passes_timer" />
<androidx.recyclerview.widget.RecyclerView
android:id="@+id/passes_recycler"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="2dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="2dp"
android:layout_marginBottom="2dp"
android:padding="2dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
+20 -36
View File
@@ -22,11 +22,7 @@
android:id="@+id/pass_geo_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginStart="4dp"
android:layout_marginTop="2dp"
android:layout_marginEnd="4dp"
android:layout_marginBottom="2dp"
app:cardElevation="1dp">
app:cardCornerRadius="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
@@ -38,70 +34,58 @@
android:layout_height="0dp"
android:contentDescription="@string/placeholder"
android:scaleType="centerCrop"
android:src="@drawable/card_pass_bg"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<ImageView
android:id="@+id/pass_geo_img"
android:layout_width="20dp"
android:layout_height="20dp"
android:contentDescription="@string/placeholder"
app:layout_constraintBottom_toBottomOf="@+id/pass_geo_name"
app:layout_constraintStart_toStartOf="@+id/pass_geo_az"
app:layout_constraintTop_toTopOf="@+id/pass_geo_name"
app:srcCompat="@drawable/ic_pass_active" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/pass_geo_name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="3dp"
android:text="@string/pass_satName"
android:textColor="@color/themeLight"
android:textSize="16sp"
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_id"
app:layout_constraintEnd_toStartOf="@+id/pass_geo_id"
app:layout_constraintHorizontal_bias="0.02"
app:layout_constraintStart_toEndOf="@+id/pass_geo_img" />
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/pass_geo_id"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="6dp"
android:text="@string/pass_satId"
android:textColor="@color/themeLight"
android:textSize="16sp"
app:layout_constraintEnd_toEndOf="@+id/pass_geo_el"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_name"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/pass_geo_name" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/pass_geo_az"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="1dp"
android:layout_marginBottom="3dp"
android:text="@string/pat_azimuth"
android:textSize="15sp"
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_el"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@+id/pass_geo_el"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="parent" />
app:layout_constraintStart_toEndOf="@+id/pass_geo_bg"
app:layout_constraintStart_toStartOf="@+id/pass_geo_name"
app:layout_constraintTop_toBottomOf="@+id/pass_geo_name" />
<com.google.android.material.textview.MaterialTextView
android:id="@+id/pass_geo_el"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:layout_marginEnd="6dp"
android:layout_marginBottom="4dp"
android:text="@string/pat_elevation"
android:textSize="15sp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@+id/pass_geo_az"
app:layout_constraintTop_toBottomOf="@+id/pass_geo_id" />
app:layout_constraintBaseline_toBaselineOf="@+id/pass_geo_az"
app:layout_constraintEnd_toEndOf="@+id/pass_geo_id"
app:layout_constraintStart_toEndOf="@+id/pass_geo_az" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
+3 -6
View File
@@ -22,7 +22,7 @@
android:id="@+id/pass_leo_card"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:cardCornerRadius="4dp">
app:cardCornerRadius="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
@@ -47,7 +47,6 @@
android:text="@string/pass_los_az"
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_aosAz"
app:layout_constraintEnd_toEndOf="@+id/pass_leo_satId"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/pass_leo_aosAz" />
<com.google.android.material.textview.MaterialTextView
@@ -56,7 +55,6 @@
android:layout_height="wrap_content"
android:layout_marginEnd="6dp"
android:text="@string/pass_satId"
android:textSize="15sp"
android:textColor="@color/themeLight"
app:layout_constraintBaseline_toBaselineOf="@+id/pass_leo_satName"
app:layout_constraintEnd_toEndOf="parent" />
@@ -75,8 +73,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="6dp"
android:layout_marginTop="2dp"
android:textSize="15sp"
android:layout_marginTop="4dp"
android:text="@string/pass_satName"
android:textColor="@color/themeLight"
app:layout_constraintStart_toStartOf="parent"
@@ -86,9 +83,9 @@
android:id="@+id/pass_leo_aosAz"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="1dp"
android:text="@string/pass_aos_az"
app:layout_constraintEnd_toStartOf="@+id/pass_leo_losAz"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintHorizontal_chainStyle="spread_inside"
app:layout_constraintStart_toStartOf="@+id/pass_leo_satName"
app:layout_constraintTop_toBottomOf="@+id/pass_leo_satName" />
+3 -2
View File
@@ -20,11 +20,12 @@
<com.google.android.material.checkbox.MaterialCheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/sat_entry_checkbox"
android:layout_width="match_parent"
android:layout_height="34dp"
android:layout_height="32dp"
android:background="@null"
android:button="@null"
android:drawableEnd="?android:attr/listChoiceIndicatorMultiple"
android:paddingStart="24dp"
android:paddingEnd="20dp"
android:text="@string/placeholder"
android:textSize="17sp" />
android:textColor="@color/greyLight"
android:textSize="16sp" />
+3 -1
View File
@@ -20,8 +20,10 @@
<resources>
<!-- theme colors -->
<color name="themeLight">#FFE082</color>
<color name="themeDark">#FFCA28</color>
<color name="greyDark">#121212</color>
<color name="greyLight">#E0E0E0</color>
<color name="greyLight">#C0C0C0</color>
<color name="greyDivider">#808080</color>
<color name="greySurface">#1d1d1d</color>
<!-- map colors -->
<color name="satTrack">#B00020</color>
+1
View File
@@ -128,4 +128,5 @@
<string name="osmCopyright" translatable="false">Wikimedia maps | Map data © OpenStreetMap contributors</string>
<string name="sat_import">Import satellite data</string>
<string name="timer_zero" translatable="false">00:00:00</string>
<string name="timer_placeholder" translatable="false">-</string>
</resources>
+1 -10
View File
@@ -21,17 +21,8 @@
<style name="AppTheme" parent="Theme.MaterialComponents.NoActionBar">
<item name="colorPrimary">@color/themeLight</item>
<item name="colorOnPrimary">@color/greyDark</item>
<item name="colorSecondary">@color/themeLight</item>
<item name="colorOnSecondary">@color/greyDark</item>
<item name="colorSurface">@color/greyDark</item>
<item name="colorOnSurface">@color/greyLight</item>
<item name="android:colorBackground">@color/greyDark</item>
<item name="colorOnBackground">@color/greyLight</item>
<item name="colorPrimaryVariant">@color/themeDark</item>
<item name="android:statusBarColor">@android:color/transparent</item>
</style>