From f96f29a950ff8ca285ebfcfd517e91f432c1f768 Mon Sep 17 00:00:00 2001 From: Guixin Zhu Date: Fri, 12 Oct 2018 17:57:22 +0900 Subject: [PATCH] user can pick a date for expiry --- .../ui/orderinput/DatePickerFragment.kt | 32 +++++++++++++++++++ .../ui/orderinput/OrderInputFragment.kt | 8 ++++- .../ui/orderinput/OrderInputViewModel.kt | 9 +++++- 3 files changed, 47 insertions(+), 2 deletions(-) create mode 100644 exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/DatePickerFragment.kt diff --git a/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/DatePickerFragment.kt b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/DatePickerFragment.kt new file mode 100644 index 0000000..5f7bcba --- /dev/null +++ b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/DatePickerFragment.kt @@ -0,0 +1,32 @@ +package it.trade.android.japanapp.ui.orderinput + +import android.app.DatePickerDialog +import android.app.Dialog +import android.os.Bundle +import android.support.v4.app.DialogFragment +import android.util.Log +import android.widget.DatePicker +import java.util.* + +class DatePickerFragment : DialogFragment(), DatePickerDialog.OnDateSetListener { + + private lateinit var cb: (String) -> Unit + + override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { + val c = Calendar.getInstance() + val year = c.get(Calendar.YEAR) + val month = c.get(Calendar.MONTH) + val day = c.get(Calendar.DAY_OF_MONTH) + return DatePickerDialog(activity!!, this, year, month, day) + } + + fun setDateSetPickerCallBack(cb: (String) -> Unit) { + this.cb = cb + } + + override fun onDateSet(view: DatePicker?, year: Int, month: Int, dayOfMonth: Int) { + Log.d("OrderInputDatePicker", "picked a date: $year - ${month + 1} - $dayOfMonth") + cb(String.format("%d%02d%02d", year, month + 1, dayOfMonth)) + } +} + diff --git a/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputFragment.kt b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputFragment.kt index 4ee56ea..0fe656b 100644 --- a/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputFragment.kt +++ b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputFragment.kt @@ -139,7 +139,13 @@ class OrderInputFragment : Fragment() { viewModel.setExpiry(OrderExpiry.WEEK) } btTillDate.setOnClickListener { - viewModel.setExpiry(OrderExpiry.TILL_DATE) + btTillDate.isChecked = !btTillDate.isChecked + val datePicker = DatePickerFragment() + datePicker.setDateSetPickerCallBack { date -> + Log.d(TAG, "picked $date") + viewModel.setTillDate(date) + } + datePicker.show(activity!!.supportFragmentManager, "OrderInputDatePicker") } btSession.setOnClickListener { // the button status should only updated by the viewModel instead of the click event diff --git a/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputViewModel.kt b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputViewModel.kt index ada5e04..c749301 100644 --- a/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputViewModel.kt +++ b/exampleAppJapan/src/main/kotlin/it/trade/android/japanapp/ui/orderinput/OrderInputViewModel.kt @@ -140,6 +140,12 @@ class OrderInputViewModel(private val symbol: String) : ViewModel() { } } } + + fun setTillDate(date: String) { + orderForm.value = orderForm.value?.apply { + orderInfo = orderInfo.copy(expiry = OrderExpiry.TILL_DATE, expiryDate = date) + } + } } class OrderInputViewModelFactory(private val symbol: String) : ViewModelProvider.NewInstanceFactory() { @@ -156,6 +162,7 @@ class OrderForm(val symbol: JapanSymbol, val buyingPower: BuyingPower, val avail limitPrice = symbol.price, type = OrderType.LIMIT, expiry = OrderExpiry.DAY, + expiryDate = "", accountType = AccountType.SPECIFIC ) @@ -210,7 +217,7 @@ data class JapanSymbol(val name: String, val symbol: String, val exchange: Strin val lotSize: Int) data class OrderInfo(val quantity: Int, val limitPrice: Double, val type: OrderType, - val expiry: OrderExpiry, val accountType: AccountType) + val expiry: OrderExpiry, val expiryDate: String, val accountType: AccountType) data class BuyingPower(val availableCash: Double, val availableNisaLimit: Double)