Simplified FilterOptionsDialog changing the way it is constructed and take advantage of Kotlin synthetic features to automatically obtain a reference to the views in the layout.
This commit is contained in:
parent
484e4bde68
commit
0144938052
2 changed files with 52 additions and 48 deletions
|
@ -1,13 +1,13 @@
|
||||||
package cy.agorise.bitsybitshareswallet.fragments
|
package cy.agorise.bitsybitshareswallet.fragments
|
||||||
|
|
||||||
|
|
||||||
import android.app.Dialog
|
|
||||||
import android.content.res.Resources
|
import android.content.res.Resources
|
||||||
import android.os.Bundle
|
import android.os.Bundle
|
||||||
|
import android.view.LayoutInflater
|
||||||
import android.view.View
|
import android.view.View
|
||||||
|
import android.view.ViewGroup
|
||||||
import androidx.fragment.app.DialogFragment
|
import androidx.fragment.app.DialogFragment
|
||||||
import android.widget.*
|
import android.widget.*
|
||||||
import androidx.appcompat.app.AlertDialog
|
|
||||||
import androidx.core.os.ConfigurationCompat
|
import androidx.core.os.ConfigurationCompat
|
||||||
import androidx.fragment.app.Fragment
|
import androidx.fragment.app.Fragment
|
||||||
import androidx.lifecycle.ViewModelProviders
|
import androidx.lifecycle.ViewModelProviders
|
||||||
|
@ -20,6 +20,7 @@ import cy.agorise.bitsybitshareswallet.models.FilterOptions
|
||||||
import cy.agorise.bitsybitshareswallet.utils.Constants
|
import cy.agorise.bitsybitshareswallet.utils.Constants
|
||||||
import cy.agorise.bitsybitshareswallet.viewmodels.BalanceDetailViewModel
|
import cy.agorise.bitsybitshareswallet.viewmodels.BalanceDetailViewModel
|
||||||
import cy.agorise.bitsybitshareswallet.views.DatePickerFragment
|
import cy.agorise.bitsybitshareswallet.views.DatePickerFragment
|
||||||
|
import kotlinx.android.synthetic.main.dialog_filter_options.*
|
||||||
import java.text.SimpleDateFormat
|
import java.text.SimpleDateFormat
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.ClassCastException
|
import kotlin.ClassCastException
|
||||||
|
@ -43,23 +44,6 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
|
|
||||||
private lateinit var mFilterOptions: FilterOptions
|
private lateinit var mFilterOptions: FilterOptions
|
||||||
|
|
||||||
// Widgets TODO use android-kotlin-extensions {onViewCreated}
|
|
||||||
private lateinit var rbTransactionAll: RadioButton
|
|
||||||
private lateinit var rbTransactionSent: RadioButton
|
|
||||||
private lateinit var rbTransactionReceived: RadioButton
|
|
||||||
private lateinit var cbDateRange: CheckBox
|
|
||||||
private lateinit var llDateRange: LinearLayout
|
|
||||||
private lateinit var tvStartDate: TextView
|
|
||||||
private lateinit var tvEndDate: TextView
|
|
||||||
private lateinit var cbAsset: CheckBox
|
|
||||||
private lateinit var sAsset: Spinner
|
|
||||||
private lateinit var cbEquivalentValue: CheckBox
|
|
||||||
private lateinit var llEquivalentValue: LinearLayout
|
|
||||||
private lateinit var etFromEquivalentValue: EditText
|
|
||||||
private lateinit var etToEquivalentValue: EditText
|
|
||||||
private lateinit var tvEquivalentValueSymbol: TextView
|
|
||||||
private lateinit var switchAgoriseFees: Switch
|
|
||||||
|
|
||||||
private var mCallback: OnFilterOptionsSelectedListener? = null
|
private var mCallback: OnFilterOptionsSelectedListener? = null
|
||||||
|
|
||||||
private var dateFormat: SimpleDateFormat = SimpleDateFormat("d/MMM/yyyy",
|
private var dateFormat: SimpleDateFormat = SimpleDateFormat("d/MMM/yyyy",
|
||||||
|
@ -111,27 +95,20 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
fun onFilterOptionsSelected(filterOptions: FilterOptions)
|
fun onFilterOptionsSelected(filterOptions: FilterOptions)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
override fun onCreateView(inflater: LayoutInflater, container: ViewGroup?, savedInstanceState: Bundle?): View? {
|
||||||
|
return inflater.inflate(R.layout.dialog_filter_options, container, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
||||||
|
super.onViewCreated(view, savedInstanceState)
|
||||||
|
|
||||||
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
|
|
||||||
onAttachToParentFragment(parentFragment!!)
|
onAttachToParentFragment(parentFragment!!)
|
||||||
|
|
||||||
Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
|
Crashlytics.setString(Constants.CRASHLYTICS_KEY_LAST_SCREEN, TAG)
|
||||||
|
|
||||||
mFilterOptions = arguments?.getParcelable(KEY_FILTER_OPTIONS)!!
|
mFilterOptions = arguments?.getParcelable(KEY_FILTER_OPTIONS)!!
|
||||||
|
|
||||||
val builder = AlertDialog.Builder(context!!)
|
|
||||||
.setTitle(getString(R.string.title_filter_options))
|
|
||||||
.setPositiveButton(getString(R.string.button__filter)) { _, _ -> validateFields() }
|
|
||||||
.setNegativeButton(getString(android.R.string.cancel)) { _, _ -> dismiss() }
|
|
||||||
|
|
||||||
// Inflate layout
|
|
||||||
val inflater = activity!!.layoutInflater
|
|
||||||
val view = inflater.inflate(R.layout.dialog_filter_options, null)
|
|
||||||
|
|
||||||
// Initialize Transactions direction
|
// Initialize Transactions direction
|
||||||
rbTransactionAll = view.findViewById(R.id.rbTransactionAll)
|
|
||||||
rbTransactionSent = view.findViewById(R.id.rbTransactionSent)
|
|
||||||
rbTransactionReceived = view.findViewById(R.id.rbTransactionReceived)
|
|
||||||
when (mFilterOptions.transactionsDirection) {
|
when (mFilterOptions.transactionsDirection) {
|
||||||
0 -> rbTransactionAll.isChecked = true
|
0 -> rbTransactionAll.isChecked = true
|
||||||
1 -> rbTransactionSent.isChecked = true
|
1 -> rbTransactionSent.isChecked = true
|
||||||
|
@ -139,15 +116,10 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
}
|
}
|
||||||
|
|
||||||
// Initialize Date range
|
// Initialize Date range
|
||||||
cbDateRange = view.findViewById(R.id.cbDateRange)
|
|
||||||
llDateRange = view.findViewById(R.id.llDateRange)
|
|
||||||
cbDateRange.setOnCheckedChangeListener { _, isChecked ->
|
cbDateRange.setOnCheckedChangeListener { _, isChecked ->
|
||||||
llDateRange.visibility = if(isChecked) View.GONE else View.VISIBLE }
|
llDateRange.visibility = if(isChecked) View.GONE else View.VISIBLE }
|
||||||
cbDateRange.isChecked = mFilterOptions.dateRangeAll
|
cbDateRange.isChecked = mFilterOptions.dateRangeAll
|
||||||
|
|
||||||
tvStartDate = view.findViewById(R.id.tvStartDate)
|
|
||||||
tvEndDate = view.findViewById(R.id.tvEndDate)
|
|
||||||
|
|
||||||
tvStartDate.setOnClickListener(mDateClickListener)
|
tvStartDate.setOnClickListener(mDateClickListener)
|
||||||
|
|
||||||
tvEndDate.setOnClickListener(mDateClickListener)
|
tvEndDate.setOnClickListener(mDateClickListener)
|
||||||
|
@ -155,8 +127,6 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
updateDateTextViews()
|
updateDateTextViews()
|
||||||
|
|
||||||
// Initialize Asset
|
// Initialize Asset
|
||||||
cbAsset = view.findViewById(R.id.cbAsset)
|
|
||||||
sAsset = view.findViewById(R.id.sAsset)
|
|
||||||
cbAsset.setOnCheckedChangeListener { _, isChecked ->
|
cbAsset.setOnCheckedChangeListener { _, isChecked ->
|
||||||
sAsset.visibility = if(isChecked) View.GONE else View.VISIBLE
|
sAsset.visibility = if(isChecked) View.GONE else View.VISIBLE
|
||||||
}
|
}
|
||||||
|
@ -184,8 +154,6 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
})
|
})
|
||||||
|
|
||||||
// Initialize Equivalent Value
|
// Initialize Equivalent Value
|
||||||
cbEquivalentValue = view.findViewById(R.id.cbEquivalentValue)
|
|
||||||
llEquivalentValue = view.findViewById(R.id.llEquivalentValue)
|
|
||||||
cbEquivalentValue.setOnCheckedChangeListener { _, isChecked ->
|
cbEquivalentValue.setOnCheckedChangeListener { _, isChecked ->
|
||||||
llEquivalentValue.visibility = if(isChecked) View.GONE else View.VISIBLE }
|
llEquivalentValue.visibility = if(isChecked) View.GONE else View.VISIBLE }
|
||||||
cbEquivalentValue.isChecked = mFilterOptions.equivalentValueAll
|
cbEquivalentValue.isChecked = mFilterOptions.equivalentValueAll
|
||||||
|
@ -194,26 +162,31 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
val currencySymbol = "usd"
|
val currencySymbol = "usd"
|
||||||
mCurrency = Currency.getInstance(currencySymbol)
|
mCurrency = Currency.getInstance(currencySymbol)
|
||||||
|
|
||||||
etFromEquivalentValue = view.findViewById(R.id.etFromEquivalentValue)
|
|
||||||
val fromEquivalentValue = mFilterOptions.fromEquivalentValue /
|
val fromEquivalentValue = mFilterOptions.fromEquivalentValue /
|
||||||
Math.pow(10.0, mCurrency.defaultFractionDigits.toDouble()).toLong()
|
Math.pow(10.0, mCurrency.defaultFractionDigits.toDouble()).toLong()
|
||||||
etFromEquivalentValue.setText("$fromEquivalentValue", TextView.BufferType.EDITABLE)
|
etFromEquivalentValue.setText("$fromEquivalentValue", TextView.BufferType.EDITABLE)
|
||||||
|
|
||||||
etToEquivalentValue = view.findViewById(R.id.etToEquivalentValue)
|
|
||||||
val toEquivalentValue = mFilterOptions.toEquivalentValue /
|
val toEquivalentValue = mFilterOptions.toEquivalentValue /
|
||||||
Math.pow(10.0, mCurrency.defaultFractionDigits.toDouble()).toLong()
|
Math.pow(10.0, mCurrency.defaultFractionDigits.toDouble()).toLong()
|
||||||
etToEquivalentValue.setText("$toEquivalentValue", TextView.BufferType.EDITABLE)
|
etToEquivalentValue.setText("$toEquivalentValue", TextView.BufferType.EDITABLE)
|
||||||
|
|
||||||
tvEquivalentValueSymbol = view.findViewById(R.id.tvEquivalentValueSymbol)
|
|
||||||
tvEquivalentValueSymbol.text = currencySymbol.toUpperCase()
|
tvEquivalentValueSymbol.text = currencySymbol.toUpperCase()
|
||||||
|
|
||||||
// Initialize transaction network fees
|
// Initialize transaction network fees
|
||||||
switchAgoriseFees = view.findViewById(R.id.switchAgoriseFees)
|
|
||||||
switchAgoriseFees.isChecked = mFilterOptions.agoriseFees
|
switchAgoriseFees.isChecked = mFilterOptions.agoriseFees
|
||||||
|
|
||||||
builder.setView(view)
|
// Setup cancel and filter buttons
|
||||||
|
btnCancel.setOnClickListener { dismiss() }
|
||||||
|
btnFilter.setOnClickListener { validateFields() }
|
||||||
|
}
|
||||||
|
|
||||||
return builder.create()
|
override fun onResume() {
|
||||||
|
super.onResume()
|
||||||
|
|
||||||
|
// Force dialog fragment to use the full width of the screen
|
||||||
|
// TODO use the same width as standard fragments
|
||||||
|
val dialogWindow = dialog?.window
|
||||||
|
dialogWindow?.setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -280,5 +253,6 @@ class FilterOptionsDialog : DialogFragment(), DatePickerFragment.OnDateSetListen
|
||||||
mFilterOptions.agoriseFees = switchAgoriseFees.isChecked
|
mFilterOptions.agoriseFees = switchAgoriseFees.isChecked
|
||||||
|
|
||||||
mCallback!!.onFilterOptionsSelected(mFilterOptions)
|
mCallback!!.onFilterOptionsSelected(mFilterOptions)
|
||||||
|
dismiss()
|
||||||
}
|
}
|
||||||
}
|
}
|
|
@ -10,13 +10,22 @@
|
||||||
android:paddingEnd="@dimen/spacing_different_topic"
|
android:paddingEnd="@dimen/spacing_different_topic"
|
||||||
android:paddingBottom="@dimen/spacing_same_topic">
|
android:paddingBottom="@dimen/spacing_same_topic">
|
||||||
|
|
||||||
|
<TextView
|
||||||
|
android:id="@+id/tvTitle"
|
||||||
|
android:layout_width="match_parent"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@string/title_filter_options"
|
||||||
|
android:textAppearance="@style/TextAppearance.Bitsy.Headline5"
|
||||||
|
app:layout_constraintTop_toTopOf="parent"/>
|
||||||
|
|
||||||
<TextView
|
<TextView
|
||||||
android:id="@+id/tvTransactionDirection"
|
android:id="@+id/tvTransactionDirection"
|
||||||
android:layout_width="match_parent"
|
android:layout_width="match_parent"
|
||||||
android:layout_height="wrap_content"
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/spacing_different_topic"
|
||||||
android:text="@string/title_transactions"
|
android:text="@string/title_transactions"
|
||||||
android:textSize="16sp"
|
android:textSize="16sp"
|
||||||
app:layout_constraintTop_toTopOf="parent"/>
|
app:layout_constraintTop_toBottomOf="@id/tvTitle"/>
|
||||||
|
|
||||||
<RadioGroup
|
<RadioGroup
|
||||||
android:id="@+id/rgTransactionDirection"
|
android:id="@+id/rgTransactionDirection"
|
||||||
|
@ -208,4 +217,25 @@
|
||||||
|
|
||||||
</LinearLayout>
|
</LinearLayout>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnFilter"
|
||||||
|
style="@style/Widget.Bitsy.Button.TextButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:layout_marginTop="@dimen/spacing_same_topic"
|
||||||
|
android:text="@string/button__filter"
|
||||||
|
app:layout_constraintTop_toBottomOf="@id/llEquivalentValue"
|
||||||
|
app:layout_constraintEnd_toEndOf="parent"
|
||||||
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
|
<com.google.android.material.button.MaterialButton
|
||||||
|
android:id="@+id/btnCancel"
|
||||||
|
style="@style/Widget.Bitsy.Button.TextButton"
|
||||||
|
android:layout_width="wrap_content"
|
||||||
|
android:layout_height="wrap_content"
|
||||||
|
android:text="@android:string/cancel"
|
||||||
|
app:layout_constraintTop_toTopOf="@id/btnFilter"
|
||||||
|
app:layout_constraintEnd_toStartOf="@id/btnFilter"
|
||||||
|
android:textColor="@color/colorPrimary"/>
|
||||||
|
|
||||||
</androidx.constraintlayout.widget.ConstraintLayout>
|
</androidx.constraintlayout.widget.ConstraintLayout>
|
Loading…
Reference in a new issue