Improve filters list

dev
Aurelien Hubert 7 years ago
parent 1c8ff102c6
commit 85a38071be
  1. 13
      app/src/main/java/net/pokeranalytics/android/model/realm/Filter.kt
  2. 13
      app/src/main/java/net/pokeranalytics/android/ui/activity/DataListActivity.kt
  3. 6
      app/src/main/java/net/pokeranalytics/android/ui/extensions/UIExtensions.kt
  4. 46
      app/src/main/java/net/pokeranalytics/android/ui/fragment/DataListFragment.kt
  5. 2
      app/src/main/java/net/pokeranalytics/android/ui/fragment/FiltersFragment.kt
  6. 10
      app/src/main/java/net/pokeranalytics/android/ui/view/RowRepresentable.kt
  7. 9
      app/src/main/java/net/pokeranalytics/android/ui/view/RowViewType.kt
  8. 8
      app/src/main/res/layout/row_title_value_action.xml

@ -12,7 +12,9 @@ import net.pokeranalytics.android.model.interfaces.Deletable
import net.pokeranalytics.android.model.interfaces.DeleteValidityStatus
import net.pokeranalytics.android.model.interfaces.Identifiable
import net.pokeranalytics.android.ui.interfaces.FilterableType
import net.pokeranalytics.android.ui.view.ImageDecorator
import net.pokeranalytics.android.ui.view.RowRepresentable
import net.pokeranalytics.android.ui.view.RowViewType
import net.pokeranalytics.android.ui.view.rowrepresentable.FilterCategoryRow
import java.util.*
@ -21,7 +23,7 @@ import java.util.*
* It contains a list of [FilterCondition] describing the complete query to launch
* The [Filter] is working closely with a [Filterable] interface providing the entity we want the query being launched on
*/
open class Filter : RealmObject(), RowRepresentable, Identifiable, Deletable {
open class Filter : RealmObject(), RowRepresentable, Identifiable, Deletable, ImageDecorator {
companion object {
@ -68,6 +70,15 @@ open class Filter : RealmObject(), RowRepresentable, Identifiable, Deletable {
private var filterableTypeOrdinal: Int? = null
override val viewType: Int
get() = RowViewType.TITLE_VALUE_ACTION.ordinal
override val imageRes: Int?
get() = R.drawable.ic_outline_settings
override val imageTint: Int?
get() = R.color.green
override val imageClickable: Boolean?
get() = true
val filterableType: FilterableType
get() {
this.filterableTypeOrdinal?.let {

@ -15,7 +15,8 @@ class DataListActivity : PokerAnalyticsActivity() {
enum class IntentKey(val keyName: String) {
DATA_TYPE("DATA_TYPE"),
LIVE_DATA_TYPE("LIVE_DATA_TYPE"),
ITEM_DELETED("ITEM_DELETED")
ITEM_DELETED("ITEM_DELETED"),
SHOW_ADD_BUTTON("SHOW_ADD_BUTTON"),
}
companion object {
@ -23,14 +24,15 @@ class DataListActivity : PokerAnalyticsActivity() {
context.startActivity(getIntent(context, dataType))
}
fun newSelectInstance(fragment: Fragment, dataType: Int) {
fun newSelectInstance(fragment: Fragment, dataType: Int, showAddButton: Boolean = true) {
val context = fragment.requireContext()
fragment.startActivityForResult(getIntent(context, dataType), FilterActivityRequestCode.SELECT_FILTER.ordinal)
fragment.startActivityForResult(getIntent(context, dataType, showAddButton), FilterActivityRequestCode.SELECT_FILTER.ordinal)
}
private fun getIntent(context:Context, dataType:Int) : Intent {
private fun getIntent(context: Context, dataType: Int, showAddButton: Boolean = true): Intent {
val intent = Intent(context, DataListActivity::class.java)
intent.putExtra(IntentKey.DATA_TYPE.keyName, dataType)
intent.putExtra(IntentKey.SHOW_ADD_BUTTON.keyName, showAddButton)
return intent
}
}
@ -46,10 +48,11 @@ class DataListActivity : PokerAnalyticsActivity() {
* Init UI
*/
private fun initUI() {
val dataType = intent.getIntExtra(IntentKey.DATA_TYPE.keyName, 0)
val showAddButton = intent.getBooleanExtra(IntentKey.SHOW_ADD_BUTTON.keyName, true)
val fragment = dataListFragment as DataListFragment
fragment.setData(dataType)
fragment.updateUI(showAddButton)
}
}

@ -5,6 +5,7 @@ import android.content.Context
import android.content.Intent
import android.content.res.Resources
import android.net.Uri
import android.util.TypedValue
import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AlertDialog
@ -150,3 +151,8 @@ fun View.showWithAnimation() {
animate().cancel()
animate().alpha(1f).start()
}
fun View.addCircleRipple() = with(TypedValue()) {
context.theme.resolveAttribute(android.R.attr.selectableItemBackgroundBorderless, this, true)
setBackgroundResource(resourceId)
}

@ -19,6 +19,7 @@ import net.pokeranalytics.android.ui.activity.FiltersActivity
import net.pokeranalytics.android.ui.adapter.LiveRowRepresentableDataSource
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.adapter.RowRepresentableDelegate
import net.pokeranalytics.android.ui.extensions.toast
import net.pokeranalytics.android.ui.fragment.components.DeletableItemFragment
import net.pokeranalytics.android.ui.helpers.SwipeToDeleteCallback
import net.pokeranalytics.android.ui.view.RowRepresentable
@ -41,20 +42,6 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
return this.items
}
/**
* Set fragment data
*/
fun setData(dataType: Int) {
this.dataType = LiveData.values()[dataType]
this.identifiableClass = this.dataType.relatedEntity
setToolbarTitle(this.dataType.localizedTitle(requireContext()))
val realm = getRealm()
this.items = realm.sorted(this.identifiableClass)
}
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
super.onCreateView(inflater, container, savedInstanceState)
return inflater.inflate(R.layout.fragment_data_list, container, false)
@ -124,11 +111,17 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
when (this.dataType) {
LiveData.FILTER -> {
if (fromAction) {
// Open filter params
toast("Hey")
} else {
// Select filter
val intent = Intent()
intent.putExtra(FiltersActivity.IntentKey.FILTER_ID.keyName, (row as Filter).id)
activity?.setResult(Activity.RESULT_OK, intent)
activity?.finish()
}
}
else -> {
val identifier = (row as Identifiable).id
EditableDataActivity.newInstanceForResult(this, this.dataType, identifier, REQUEST_CODE_DETAILS)
@ -136,4 +129,29 @@ class DataListFragment : DeletableItemFragment(), LiveRowRepresentableDataSource
}
}
/**
* Set fragment data
*/
fun setData(dataType: Int) {
this.dataType = LiveData.values()[dataType]
this.identifiableClass = this.dataType.relatedEntity
setToolbarTitle(this.dataType.localizedTitle(requireContext()))
val realm = getRealm()
this.items = realm.sorted(this.identifiableClass)
}
/**
* Update UI
*/
fun updateUI(showAddButton: Boolean) {
if (showAddButton) {
this.addButton.show()
} else {
this.addButton.hide()
}
}
}

@ -156,7 +156,7 @@ open class FiltersFragment : RealmFragment(), StaticRowRepresentableDataSource,
}
moreFilters.setOnClickListener {
DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal)
DataListActivity.newSelectInstance(this, LiveData.FILTER.ordinal, false)
}
}

@ -34,15 +34,13 @@ interface DefaultEditDataSource : EditDataSource, Localizable {
interface ImageDecorator {
val imageRes: Int?
get() {
return null
}
get() = null
val imageTint: Int?
get() {
return null
}
get() = null
val imageClickable: Boolean?
get() = false
}
/**

@ -31,6 +31,7 @@ import net.pokeranalytics.android.model.realm.Session
import net.pokeranalytics.android.model.realm.Transaction
import net.pokeranalytics.android.ui.adapter.RowRepresentableAdapter
import net.pokeranalytics.android.ui.extensions.ChipGroupExtension
import net.pokeranalytics.android.ui.extensions.addCircleRipple
import net.pokeranalytics.android.ui.extensions.px
import net.pokeranalytics.android.ui.extensions.setTextFormat
import net.pokeranalytics.android.ui.graph.AxisFormatting
@ -204,6 +205,14 @@ enum class RowViewType(private var layoutRes: Int) {
row.imageTint?.let { color ->
imageView.setColorFilter(ContextCompat.getColor(imageView.context, color))
}
if (row.imageClickable == true) {
imageView.addCircleRipple()
imageView.setOnClickListener {
adapter.delegate?.onRowSelected(position, row, true)
}
} else {
imageView.setBackgroundResource(0)
}
}
// Listener

@ -25,6 +25,7 @@
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:layout_marginEnd="8dp"
android:ellipsize="end"
android:gravity="end|center_vertical"
android:maxLines="1"
@ -39,14 +40,15 @@
android:id="@+id/action"
android:layout_width="32dp"
android:layout_height="32dp"
android:layout_marginStart="16dp"
android:background="?selectableItemBackgroundBorderless"
android:padding="4dp"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="@+id/guidelineEnd"
app:layout_constraintStart_toEndOf="@+id/value"
app:layout_constraintTop_toTopOf="parent"
tools:src="@drawable/ic_close" />
tools:src="@drawable/ic_close"
tools:visibility="visible" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guidelineStart"
@ -60,7 +62,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="vertical"
app:layout_constraintGuide_end="16dp" />
app:layout_constraintGuide_end="8dp" />
</androidx.constraintlayout.widget.ConstraintLayout>
Loading…
Cancel
Save