Refinements in filter
This commit is contained in:
parent
3d934da006
commit
7114c6199a
@ -5,6 +5,7 @@
|
||||
<map>
|
||||
<entry key="app/src/main/res/layout/activity_main.xml" value="0.5307291666666667" />
|
||||
<entry key="app/src/main/res/layout/fragment_beer_detail.xml" value="0.536" />
|
||||
<entry key="app/src/main/res/layout/fragment_beers_list.xml" value="0.634963768115942" />
|
||||
<entry key="app/src/main/res/layout/fragment_beers_listitem.xml" value="0.5307291666666667" />
|
||||
</map>
|
||||
</option>
|
||||
|
@ -1,10 +0,0 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="RunConfigurationProducerService">
|
||||
<option name="ignoredProducers">
|
||||
<set>
|
||||
<option value="com.android.tools.idea.compose.preview.runconfiguration.ComposePreviewRunConfigurationProducer" />
|
||||
</set>
|
||||
</option>
|
||||
</component>
|
||||
</project>
|
@ -17,7 +17,7 @@ class BeersRepository {
|
||||
|
||||
var listener: Listener? = null
|
||||
var page = 1
|
||||
var filter = BeersFilter
|
||||
var filter = BeersFilter()
|
||||
private var more = true
|
||||
|
||||
/**
|
||||
|
@ -1,14 +1,8 @@
|
||||
package it.danieleverducci.subitobeers.entities
|
||||
|
||||
import com.google.gson.annotations.SerializedName
|
||||
import org.json.JSONException
|
||||
import org.json.JSONObject
|
||||
import java.time.LocalDate
|
||||
import java.time.format.DateTimeFormatter
|
||||
import java.util.*
|
||||
|
||||
class Beer// Parse date
|
||||
@Throws(JSONException::class) constructor() {
|
||||
class Beer {
|
||||
val id: Int = 0
|
||||
val name: String = ""
|
||||
val tagline: String = ""
|
||||
@ -17,5 +11,4 @@ class Beer// Parse date
|
||||
val imageUrl: String = ""
|
||||
@SerializedName("first_brewed")
|
||||
val firstBrewed: String = ""
|
||||
|
||||
}
|
@ -1,6 +1,65 @@
|
||||
package it.danieleverducci.subitobeers.networking
|
||||
|
||||
object BeersFilter {
|
||||
import android.util.Log
|
||||
import java.util.*
|
||||
|
||||
class BeersFilter {
|
||||
// The date format is like "09/2007" (MM/YYYY). Month start from 1.
|
||||
var brewedBefore: String? = null
|
||||
var brewedAfter: String? = null
|
||||
|
||||
val brewedBeforeYear: Int
|
||||
get() = getYear(brewedBefore)
|
||||
val brewedAfterYear: Int
|
||||
get() = getYear(brewedAfter)
|
||||
val brewedBeforeMonth: Int
|
||||
get() = getMonth(brewedBefore)
|
||||
val brewedAfterMonth: Int
|
||||
get() = getMonth(brewedAfter)
|
||||
|
||||
fun clear() {
|
||||
brewedBefore = null
|
||||
brewedAfter = null
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the end filter date.
|
||||
* Uses Calendar month format (January is 0, December is 11).
|
||||
* @param month Month starting from 0
|
||||
* @param year Year as 4-digit
|
||||
*/
|
||||
fun setBrewedBefore(month: Int, year: Int) {
|
||||
brewedBefore = "${String.format("%02d", month + 1)}-${String.format("%04d", year)}"
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the start filter date.
|
||||
* Uses Calendar month format (January is 0, December is 11).
|
||||
* @param month Month starting from 0
|
||||
* @param year Year as 4-digit
|
||||
*/
|
||||
fun setBrewedAfter(month: Int, year: Int) {
|
||||
brewedAfter = "${String.format("%02d", month + 1)}-${String.format("%04d", year)}"
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the selected year, if any, otherwise returns current year
|
||||
* @param filter value String?
|
||||
* @return the selected year
|
||||
*/
|
||||
private fun getYear(value: String?): Int {
|
||||
if (value == null) return Calendar.getInstance().get(Calendar.YEAR)
|
||||
return value.substring(3).toInt()
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the selected month, if any, otherwise returns current month
|
||||
* Uses Calendar month format (January is 0, December is 11)
|
||||
* @param filter value String?
|
||||
* @return the selected month
|
||||
*/
|
||||
private fun getMonth(value: String?): Int {
|
||||
if (value == null) return Calendar.getInstance().get(Calendar.MONTH)
|
||||
return value.substring(0,2).toInt()
|
||||
}
|
||||
}
|
@ -3,6 +3,7 @@ package it.danieleverducci.subitobeers.ui
|
||||
import android.app.DatePickerDialog
|
||||
import android.content.res.Resources
|
||||
import android.os.Bundle
|
||||
import android.util.Log
|
||||
import android.view.*
|
||||
import androidx.fragment.app.Fragment
|
||||
import androidx.recyclerview.widget.LinearLayoutManager
|
||||
@ -21,7 +22,7 @@ import java.util.*
|
||||
*/
|
||||
class BeersFragment : Fragment(), BeersRepository.Listener, BeerRecyclerAdapter.Listener {
|
||||
|
||||
enum class FILTERTYPE {SINCE, TO}
|
||||
enum class FILTERTYPE {SINCE, TO, CLEAR}
|
||||
|
||||
private val rvAdapter = BeerRecyclerAdapter()
|
||||
private val repo = BeersRepository()
|
||||
@ -43,6 +44,7 @@ class BeersFragment : Fragment(), BeersRepository.Listener, BeerRecyclerAdapter.
|
||||
// Register filter buttons listeners
|
||||
binding.listFilterSinceBt.setOnClickListener { onFilterButtonClicked(FILTERTYPE.SINCE) }
|
||||
binding.listFilterToBt.setOnClickListener { onFilterButtonClicked(FILTERTYPE.TO) }
|
||||
binding.listFilterClear.setOnClickListener { onFilterButtonClicked(FILTERTYPE.CLEAR) }
|
||||
|
||||
// Set the adapter
|
||||
with(binding.list) {
|
||||
@ -93,24 +95,34 @@ class BeersFragment : Fragment(), BeersRepository.Listener, BeerRecyclerAdapter.
|
||||
|
||||
/**
|
||||
* Called when a filter button is clicked
|
||||
* @param type whether is start or end date
|
||||
* @param type whether is start or end date, or the filter has been cleared
|
||||
*/
|
||||
fun onFilterButtonClicked(type: FILTERTYPE) {
|
||||
val dpd = DatePickerDialog(requireContext())
|
||||
// Hide day selector
|
||||
// dpd.datePicker.findViewById<View>(
|
||||
// Resources.getSystem().getIdentifier("day", "id", "android")
|
||||
// ).visibility = View.GONE
|
||||
dpd.setOnDateSetListener(DatePickerDialog.OnDateSetListener { view, year, month, dayOfMonth ->
|
||||
// On date chosen
|
||||
val formattedDate = "${String.format("%02d", month)}-${String.format("%04d", year)}"
|
||||
if (type == FILTERTYPE.SINCE)
|
||||
repo.filter.brewedAfter = formattedDate
|
||||
else
|
||||
repo.filter.brewedBefore = formattedDate
|
||||
if (type == FILTERTYPE.CLEAR) {
|
||||
repo.filter.clear()
|
||||
loadBeers(true)
|
||||
binding.listFilterSinceBt.setText(R.string.list_filter_brewed_after)
|
||||
binding.listFilterToBt.setText(R.string.list_filter_brewed_before)
|
||||
return
|
||||
}
|
||||
|
||||
val listener = DatePickerDialog.OnDateSetListener { view, selYear, selMonth, dayOfMonth ->
|
||||
// On date chosen (month starts from 0)
|
||||
|
||||
if (type == FILTERTYPE.SINCE) {
|
||||
repo.filter.setBrewedAfter(selMonth, selYear)
|
||||
binding.listFilterSinceBt.setText(repo.filter.brewedAfter)
|
||||
} else {
|
||||
repo.filter.setBrewedBefore(selMonth, selYear)
|
||||
binding.listFilterToBt.setText(repo.filter.brewedBefore)
|
||||
}
|
||||
|
||||
// Update list
|
||||
loadBeers(true)
|
||||
})
|
||||
}
|
||||
val year = if (type == FILTERTYPE.SINCE) repo.filter.brewedAfterYear else repo.filter.brewedBeforeYear
|
||||
val month = if (type == FILTERTYPE.SINCE) repo.filter.brewedAfterMonth else repo.filter.brewedBeforeMonth
|
||||
val dpd = DatePickerDialog(requireContext(), listener, year, month - 1,1)
|
||||
dpd.show()
|
||||
}
|
||||
|
||||
|
10
app/src/main/res/drawable/ic_clear.xml
Normal file
10
app/src/main/res/drawable/ic_clear.xml
Normal file
@ -0,0 +1,10 @@
|
||||
<vector xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
android:width="24dp"
|
||||
android:height="24dp"
|
||||
android:viewportWidth="24"
|
||||
android:viewportHeight="24"
|
||||
android:tint="?attr/colorControlNormal">
|
||||
<path
|
||||
android:fillColor="@android:color/white"
|
||||
android:pathData="M19,6.41L17.59,5 12,10.59 6.41,5 5,6.41 10.59,12 5,17.59 6.41,19 12,13.41 17.59,19 19,17.59 13.41,12z"/>
|
||||
</vector>
|
@ -11,13 +11,15 @@
|
||||
android:layout_width="match_parent"
|
||||
android:layout_height="wrap_content"
|
||||
android:background="@drawable/filter_dropdown_rounded_background"
|
||||
android:padding="10dp"
|
||||
android:paddingLeft="10dp"
|
||||
android:paddingTop="10dp"
|
||||
android:paddingBottom="10dp"
|
||||
android:visibility="gone">
|
||||
|
||||
<Button
|
||||
android:id="@+id/list_filter_since_bt"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:layout_marginEnd="10dp"
|
||||
android:text="@string/list_filter_brewed_after"
|
||||
@ -27,12 +29,23 @@
|
||||
<Button
|
||||
android:id="@+id/list_filter_to_bt"
|
||||
android:layout_width="0dp"
|
||||
android:layout_height="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="1"
|
||||
android:text="@string/list_filter_brewed_before"
|
||||
app:drawableLeftCompat="@drawable/ic_firstbrewed"
|
||||
android:drawableTint="@color/white"/>
|
||||
|
||||
<ImageButton
|
||||
android:id="@+id/list_filter_clear"
|
||||
android:layout_width="wrap_content"
|
||||
android:layout_height="match_parent"
|
||||
android:layout_weight="0"
|
||||
android:paddingLeft="15dp"
|
||||
android:paddingRight="15dp"
|
||||
android:background="@color/transparent"
|
||||
android:src="@drawable/ic_clear"
|
||||
app:tint="@color/white"/>
|
||||
|
||||
</LinearLayout>
|
||||
|
||||
<androidx.recyclerview.widget.RecyclerView
|
||||
|
@ -7,4 +7,5 @@
|
||||
<color name="secondary_700">#D54300</color>
|
||||
<color name="black">#FF000000</color>
|
||||
<color name="white">#FFFFFFFF</color>
|
||||
<color name="transparent">#0fff</color>
|
||||
</resources>
|
@ -6,7 +6,7 @@ buildscript {
|
||||
mavenCentral()
|
||||
}
|
||||
dependencies {
|
||||
classpath "com.android.tools.build:gradle:4.2.2"
|
||||
classpath 'com.android.tools.build:gradle:7.0.2'
|
||||
classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
|
||||
|
||||
// NOTE: Do not place your application dependencies here; they belong
|
||||
|
2
gradle/wrapper/gradle-wrapper.properties
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@ -1,6 +1,6 @@
|
||||
#Tue Aug 31 07:45:08 CEST 2021
|
||||
distributionBase=GRADLE_USER_HOME
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-6.7.1-bin.zip
|
||||
distributionUrl=https\://services.gradle.org/distributions/gradle-7.0.2-bin.zip
|
||||
distributionPath=wrapper/dists
|
||||
zipStorePath=wrapper/dists
|
||||
zipStoreBase=GRADLE_USER_HOME
|
||||
|
Loading…
Reference in New Issue
Block a user