Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.appypie.snappy.appsheet.pagedata.view.fragments.newentry.view.adapter
- import android.annotation.SuppressLint
- import android.app.DatePickerDialog
- import android.app.TimePickerDialog
- import android.content.Context
- import android.graphics.BitmapFactory
- import android.os.Bundle
- import android.os.Handler
- import android.os.Looper
- import android.text.Editable
- import android.text.TextWatcher
- import android.util.SparseArray
- import android.view.View
- import android.view.ViewGroup
- import android.widget.EditText
- import android.widget.TextView
- import android.widget.TimePicker
- import androidx.recyclerview.widget.LinearLayoutManager
- import androidx.recyclerview.widget.RecyclerView
- import com.appypie.snappy.AppypieApplication
- import com.appypie.snappy.R
- import com.appypie.snappy.appsheet.AppConstant
- import com.appypie.snappy.appsheet.AppsheetUtils
- import com.appypie.snappy.appsheet.asformula.ASFormulaUtil
- import com.appypie.snappy.appsheet.asformula.ASFormulaUtil.fieldsList
- import com.appypie.snappy.appsheet.extensions.*
- import com.appypie.snappy.appsheet.pagedata.listeners.ItemClickListener
- import com.appypie.snappy.appsheet.pagedata.listeners.SelectedItemListener
- import com.appypie.snappy.appsheet.pagedata.model.FieldItem
- import com.appypie.snappy.appsheet.pagedata.model.appsheet.Column
- import com.appypie.snappy.appsheet.pagedata.model.ascompletedata.ASIntentData
- import com.appypie.snappy.appsheet.pagedata.model.ascompletedata.TableInfo
- import com.appypie.snappy.appsheet.pagedata.view.fragments.newentry.view.MainThreadExecutor
- import com.appypie.snappy.appsheet.pagedata.view.fragments.newentry.view.afterTextChangeEvents
- import com.appypie.snappy.appsheet.utility.InfoUtils
- import com.appypie.snappy.databinding.*
- import com.appypie.snappy.radioStream.AudioPlayerActivity.index
- import com.appypie.snappy.utils.Utils
- import com.bumptech.glide.Glide
- import com.google.android.gms.maps.model.LatLng
- import com.google.android.material.textfield.TextInputLayout
- import java.text.ParseException
- import java.text.SimpleDateFormat
- import java.util.*
- import java.util.concurrent.TimeUnit
- import kotlin.collections.ArrayList
- import kotlin.collections.HashMap
- /*
- this is used to show common page list view
- */
- class NewAddSheetAdapter() : RecyclerView.Adapter<RecyclerView.ViewHolder>() {
- val timeUnit: TimeUnit = TimeUnit.MILLISECONDS
- val timeout: Long = 300
- var formulaColumns: SparseArray<FieldItem> = SparseArray()
- lateinit var context: Context
- private var fieldsList: ArrayList<FieldItem> = ArrayList()
- private var sheetData: List<String>? = null
- private var isValidateNotify: Boolean = false
- var keyColumnType: String? = null
- private var itemClickListener: ItemClickListener<Any>? = null
- var selectableItemStateMap: HashMap<Int, ArrayList<Boolean>> = HashMap()
- private val asIntentData: ASIntentData by lazy {
- AppypieApplication.getApplicationInstance().asIntentData
- }
- private var tableInfo: TableInfo? = null
- private var isEditMode: Boolean = false
- init {
- setHasStableIds(true)
- }
- constructor(context: Context,
- tableId: String?,
- sheetData: List<String>?,
- itemClickListener: ItemClickListener<Any>) : this() {
- this.context = context
- this.sheetData = sheetData
- this.isValidateNotify = false
- this.itemClickListener = itemClickListener
- this.tableInfo = asIntentData.ascolumndata?.filterIndexed { index, tableInfo ->
- tableInfo.tableId?.equals(tableId) ?: false
- }?.getOrNull(0)
- formulaColumns = SparseArray()
- for (index in 1 until (tableInfo?.tableData?.size ?: 0)) {
- val fieldItem = createField(tableInfo?.tableData?.getOrNull(index), "", index - 1)
- sheetData?.let {
- fieldItem.fieldValue = it.getOrNull(index - 1)
- }
- if (sheetData == null && validateIsFormulaField(fieldItem)) {
- formulaColumns.put(index, fieldItem)
- }
- if(!fieldItem.isHideField){
- fieldsList.add(fieldItem)
- }
- }
- if (sheetData != null && sheetData.size > 0) {
- this.isEditMode = true
- }
- }
- override fun getItemCount(): Int {
- return this.fieldsList.size
- }
- override fun getItemId(position: Int): Long = position.toLong()
- fun validationNotifyData(isValidateNotify: Boolean) {
- this.isValidateNotify = isValidateNotify
- notifyDataSetChanged()
- }
- fun getNewAddSheetListData(): ArrayList<FieldItem> {
- return this.fieldsList
- }
- override fun onBindViewHolder(holder: RecyclerView.ViewHolder, position: Int) {
- when (getItemViewType(position)) {
- AppConstant.FIELD_EDIT_TEXT -> {
- val editTextFieldViewHolder = holder as EditTextFieldViewHolder
- editTextFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_FILE -> {
- val fileFieldViewHolder = holder as FileFieldViewHolder
- fileFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_IMAGE -> {
- val imageFieldViewHolder = holder as ImageFieldViewHolder
- imageFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_SIGNATURE -> {
- val signatureFieldViewHolder = holder as SignatureFieldViewHolder
- signatureFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_EMAIL -> {
- val emailFieldViewHolder = holder as EmailFieldViewHolder
- emailFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_REFERENCE -> {
- val refFieldViewHolder = holder as RefFieldViewHolder
- refFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_ADDRESS -> {
- val addressFieldViewHolder = holder as AddressFieldViewHolder
- addressFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_LATLONG -> {
- val latLongFieldViewHolder = holder as LatLongFieldViewHolder
- latLongFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_COLOR -> {
- val colorFieldViewHolder = holder as ColorFieldViewHolder
- colorFieldViewHolder.binding.fieldItem = fieldsList.get(position)
- colorFieldViewHolder.binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- colorFieldViewHolder.binding.colorList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.HORIZONTAL, false)
- if (isValidateNotify) else {
- colorFieldViewHolder.binding.colorList.adapter = ColorArrayAdapter(
- context,
- fieldsList.get(position).list,
- fieldsList.getOrNull(position)?.fieldValue ?: "",
- object : ItemClickListener<String?> {
- override fun onItemUtilityClick(clrPosition: Int, type: String, data: String?) {
- fieldsList.get(clrPosition).fieldValue = data
- }
- override fun onItemClick(position: Int, type: String, data: String?) {
- }
- }, position)
- }
- //set error msg
- setLabelErrorValidation(colorFieldViewHolder.binding.label, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify, "#000000")
- }
- AppConstant.FIELD_EDIT_TEXT_ENUM -> {
- val enumFieldViewHolder = holder as EnumFieldViewHolder
- enumFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_ENUMLIST -> {
- val enumListFieldViewHolder = holder as EnumListFieldViewHolder
- enumListFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_LONGTEXT -> {
- val longTextFieldViewHolder = holder as LongTextFieldViewHolder
- longTextFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_PERCENT -> {
- val percentFieldViewHolder = holder as PercentFieldViewHolder
- percentFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_PRICE -> {
- val priceFieldViewHolder = holder as PriceFieldViewHolder
- priceFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_YES_NO -> {
- val yesNoFieldViewHolder = holder as YesNoFieldViewHolder
- yesNoFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_VIDEO -> {
- val videoFieldViewHolder = holder as VideoFieldViewHolder
- videoFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_DECIMAL -> {
- val decimalFieldViewHolder = holder as DecimalFieldViewHolder
- decimalFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_URL -> {
- val urlFieldViewHolder = holder as UrlFieldViewHolder
- urlFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_PHONE -> {
- val phoneEditTextFieldViewHolder = holder as PhoneEditTextFieldViewHolder
- phoneEditTextFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_DRAWING -> {
- val editTextFieldViewHolder = holder as EditTextFieldViewHolder
- editTextFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_DURATION -> {
- val durationFieldViewHolder = holder as DurationFieldViewHolder
- durationFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_TIME -> {
- val timeFieldViewHolder = holder as TimeFieldViewHolder
- timeFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_DATETIME -> {
- val dateTimeFieldViewHolder = holder as DateTimeFieldViewHolder
- dateTimeFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_DATE -> {
- val dateFieldViewHolder = holder as DateFieldViewHolder
- dateFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_NUMBER -> {
- val numberFieldViewHolder = holder as NumberFieldViewHolder
- numberFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_NAME -> {
- val nameFieldViewHolder = holder as NameFieldViewHolder
- nameFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_PROGRESS -> {
- val progressFieldViewHolder = holder as ProgressFieldViewHolder
- progressFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_CHANGE_LOCATION -> {
- val changeLocationFieldViewHolder = holder as ChangeLocationFieldViewHolder
- changeLocationFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- AppConstant.FIELD_EDIT_TEXT_CHANGE_TIMESTAMP -> {
- val changeTimestampFieldViewHolder = holder as ChangeTimestampFieldViewHolder
- changeTimestampFieldViewHolder.bindData(fieldsList.getOrNull(position), position)
- }
- }
- }
- override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
- return when (viewType) {
- AppConstant.FIELD_EDIT_TEXT_NAME -> {
- val binding: NameItemBinding = parent.inflateBinding(R.layout.name_item)
- NameFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_EMAIL -> {
- val binding: EmailItemBinding = parent.inflateBinding(R.layout.email_item)
- EmailFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_NUMBER -> {
- val binding: NumberItemBinding = parent.inflateBinding(R.layout.number_item)
- NumberFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_DATE -> {
- val binding: DateItemBinding = parent.inflateBinding(R.layout.date_item)
- DateFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_TIME -> {
- val binding: TimeItemBinding = parent.inflateBinding(R.layout.time_item)
- TimeFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_IMAGE -> {
- val binding: AddImageNewItemBinding = parent.inflateBinding(R.layout.add_image_new_item)
- ImageFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_FILE -> {
- val binding: FileItemBinding = parent.inflateBinding(R.layout.file_item)
- FileFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_ADDRESS -> {
- val binding: AddressNewItemBinding = parent.inflateBinding(R.layout.address_new_item)
- AddressFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_SIGNATURE -> {
- val binding: SignatureImageNewItemBinding = parent.inflateBinding(R.layout.signature_image_new_item)
- SignatureFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_PERCENT -> {
- val binding: PercentItemBinding = parent.inflateBinding(R.layout.percent_item)
- PercentFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_PROGRESS -> {
- val binding: ProgressItemBinding = parent.inflateBinding(R.layout.progress_item)
- ProgressFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_COLOR -> {
- val binding: ColorRecyclerItemBinding = parent.inflateBinding(R.layout.color_recycler_item)
- ColorFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_LATLONG -> {
- val binding: LatlongItemBinding = parent.inflateBinding(R.layout.latlong_item)
- LatLongFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_LONGTEXT -> {
- val binding: LongTextItemBinding = parent.inflateBinding(R.layout.long_text_item)
- LongTextFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_DURATION -> {
- val binding: DurationItemBinding = parent.inflateBinding(R.layout.duration_item)
- DurationFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_PHONE -> {
- val binding: PhoneEditItemBinding = parent.inflateBinding(R.layout.phone_edit_item)
- PhoneEditTextFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_YES_NO -> {
- val binding: YesNoItemBinding = parent.inflateBinding(R.layout.yes_no_item)
- YesNoFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_ENUM -> {
- val binding: EnumItemBinding = parent.inflateBinding(R.layout.enum_item)
- EnumFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_ENUMLIST -> {
- val binding: EnumListItemBinding = parent.inflateBinding(R.layout.enum_list_item)
- EnumListFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_VIDEO -> {
- val binding: VideoItemBinding = parent.inflateBinding(R.layout.video_item)
- VideoFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_DECIMAL -> {
- val binding: DecimalItemBinding = parent.inflateBinding(R.layout.decimal_item)
- DecimalFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_URL -> {
- val binding: UrlItemBinding = parent.inflateBinding(R.layout.url_item)
- UrlFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_CHANGE_LOCATION -> {
- val binding: ChangeLocationItemBinding = parent.inflateBinding(R.layout.change_location_item)
- ChangeLocationFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_CHANGE_TIMESTAMP -> {
- val binding: ChangeTimestampItemBinding = parent.inflateBinding(R.layout.change_timestamp_item)
- ChangeTimestampFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_DATETIME -> {
- val binding: DateTimeItemBinding = parent.inflateBinding(R.layout.date_time_item)
- DateTimeFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_PRICE -> {
- val binding: PriceItemBinding = parent.inflateBinding(R.layout.price_item)
- PriceFieldViewHolder(binding)
- }
- AppConstant.FIELD_EDIT_TEXT_REFERENCE -> {
- val binding: EnumItemBinding = parent.inflateBinding(R.layout.enum_item)
- RefFieldViewHolder(binding)
- }
- else -> {
- val binding: AddNewItemBinding = parent.inflateBinding(R.layout.add_new_item)
- EditTextFieldViewHolder(binding)
- }
- }
- }
- //apply formula after any change
- fun validateIsFormulaField(fieldItem: FieldItem?): Boolean {
- val formulaNotApplicable = arrayOf("ref", "enum", "enumlist", "color")
- val type = fieldItem?.fieldType ?: ""
- val formula = fieldItem?.fieldFormula ?: ""
- if (formula.isNotEmpty() && !formulaNotApplicable.any { it == type }) {
- return true
- }
- return false
- }
- //apply formula after any change
- fun observeChangesForFormula(callTypePosition: String?) {
- fieldsList.forEachIndexed { index, fieldItem ->
- val formulaNotApplicable = arrayOf("ref", "enum", "enumlist", "color")
- val type = fieldItem.fieldType ?: ""
- val formula = fieldItem.fieldFormula ?: ""
- if (formula.isNotEmpty() && !formulaNotApplicable.any { it == type }) {
- val taskExcuter = Runnable {
- val formulaResult = ASFormulaUtil.manageFormulaStack(context, formula, fieldsList)
- fieldsList.get(index).fieldValue = formulaResult
- notifyItemChanged(index)
- }
- MainThreadExecutor().execute(taskExcuter)
- }
- }
- }
- fun applyFormula() {
- for (index in 0 until formulaColumns.size()) {
- val formula = formulaColumns.valueAt(index)?.fieldFormula ?: ""
- val taskExcuter = Runnable {
- val formulaResult = ASFormulaUtil.manageFormulaStack(context, formula, fieldsList)
- if (fieldsList.size > formulaColumns.keyAt(index)) {
- fieldsList.get(formulaColumns.keyAt(index)).fieldValue = formulaResult
- notifyItemChanged(formulaColumns.keyAt(index))
- }
- }
- MainThreadExecutor().execute(taskExcuter)
- }
- }
- inner class PriceFieldViewHolder(var binding: PriceItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe { qryTxt ->
- if (fieldsList.size > position) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class PercentFieldViewHolder(var binding: PercentItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe { qryTxt ->
- if (fieldsList.size > position) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class EditTextFieldViewHolder(var binding: AddNewItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem.let {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- var timer = Timer()
- binding.nameInput.onChange {qryTxt->
- timer.cancel()
- timer = Timer()
- timer.schedule(
- object:TimerTask() {
- override fun run() {
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt
- observeChangesForFormula("")
- }
- }
- },
- timeout
- )
- }
- /* binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe { qryTxt ->
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt?.text?.toString()) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }*/
- binding.nameInput.onFocusChangeListener = object:View.OnFocusChangeListener{
- override fun onFocusChange(v: View?, hasFocus: Boolean) {
- }
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class DecimalFieldViewHolder(var binding: DecimalItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe { qryTxt ->
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt?.text?.toString()) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- handleInputFields(binding.nameInput,position)
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class NumberFieldViewHolder(var binding: NumberItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- var timer = Timer()
- binding.nameInput.onChange {qryTxt->
- timer.cancel()
- timer = Timer()
- timer.schedule(
- object:TimerTask() {
- override fun run() {
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt
- observeChangesForFormula("")
- }
- }
- },
- timeout
- )
- }
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class PhoneEditTextFieldViewHolder(var binding: PhoneEditItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- }
- inner class UrlFieldViewHolder(var binding: UrlItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe{ qryTxt ->
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(qryTxt?.text?.toString()))) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldsList.getOrNull(adapterPosition)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class LongTextFieldViewHolder(var binding: LongTextItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- var timer = Timer()
- binding.nameInput.onChange {qryTxt->
- timer.cancel()
- timer = Timer()
- timer.schedule(
- object:TimerTask() {
- override fun run() {
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt
- observeChangesForFormula("")
- }
- }
- },
- timeout
- )
- }
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- inner class DurationFieldViewHolder(var binding: DurationItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.nameInput.clickWithDebounce {
- val hour = Calendar.getInstance().getTime().hours
- val minute = Calendar.getInstance().getTime().minutes
- val mTimePicker: TimePickerDialog
- mTimePicker =
- TimePickerDialog(context, object : TimePickerDialog.OnTimeSetListener {
- override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
- fieldsList.getOrNull(position)?.fieldValue = "${hourOfDay}:${minute}:00"
- notifyItemChanged(position)
- observeChangesForFormula("")
- }
- }, hour, minute, true)
- mTimePicker.setTitle(
- "Select ${fieldsList.getOrNull(position)?.fieldLebal
- ?: "Duration"}"
- )
- mTimePicker.show()
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class DateTimeFieldViewHolder(var binding: DateTimeItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.nameInput.clickWithDebounce {
- val calendar = Calendar.getInstance()
- val mYear = calendar.get(Calendar.YEAR)
- val mMonth = calendar.get(Calendar.MONTH)
- val mDay = calendar.get(Calendar.DAY_OF_MONTH)
- val hour = calendar.get(Calendar.HOUR_OF_DAY)
- val minute = calendar.get(Calendar.MINUTE)
- val datePickerDialog = DatePickerDialog(context,
- DatePickerDialog.OnDateSetListener { datepicker, year, month, day ->
- var month = month
- month++
- val finalMonth = month
- val timePickerDialog = TimePickerDialog(context,
- TimePickerDialog.OnTimeSetListener { view, hourOfDay, minute1 ->
- val dateTime =
- StringBuilder().append(day).append("-").append(finalMonth)
- .append("-").append(year).append(" ").append(hourOfDay)
- .append(":").append(minute1).append(":00").toString()
- try {
- val date_time = SimpleDateFormat(asIntentData?.asData?.languageSetting?.datetime_formate).format(
- SimpleDateFormat(
- "d-M-yyyy H:m:ss",
- Locale.ENGLISH
- ).parse(dateTime)
- )
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(date_time))) {
- fieldsList.getOrNull(position)?.fieldValue = date_time
- notifyItemChanged(position)
- observeChangesForFormula("")
- }
- } catch (e: ParseException) {
- e.printStackTrace()
- }
- }, hour, minute, true
- )
- timePickerDialog.show()
- }, mYear, mMonth, mDay
- )
- datePickerDialog.show()
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class VideoFieldViewHolder(var binding: VideoItemBinding) : RecyclerView.ViewHolder(binding.root) {
- @SuppressLint("CheckResult")
- fun bindData(fieldItem: FieldItem?, position: Int) {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe{ qryTxt ->
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt?.text?.toString()) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldsList.getOrNull(adapterPosition)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- }
- }
- inner class NameFieldViewHolder(var binding: NameItemBinding) : RecyclerView.ViewHolder(binding.root) {
- @SuppressLint("CheckResult")
- fun bindData(fieldItem: FieldItem?, position: Int) {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe{ qryTxt ->
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt?.text?.toString()) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- }
- }
- inner class EmailFieldViewHolder(var binding: EmailItemBinding) : RecyclerView.ViewHolder(binding.root) {
- @SuppressLint("CheckResult")
- fun bindData(fieldItem: FieldItem?, position: Int) {
- binding.nameInput.afterTextChangeEvents()
- .debounce(timeout, timeUnit)
- .subscribe{ qryTxt ->
- if (fieldsList.size > position && fieldsList.getOrNull(position)?.fieldValue != qryTxt?.text?.toString()) {
- fieldsList.getOrNull(position)?.fieldValue = qryTxt?.text?.toString()
- observeChangesForFormula("")
- }
- }
- binding.fieldItem = fieldsList.getOrNull(adapterPosition)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- }
- }
- inner class DateFieldViewHolder(var binding: DateItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.nameInput.clickWithDebounce {
- val calender = Calendar.getInstance()
- DatePickerDialog(
- context,
- DatePickerDialog.OnDateSetListener { view, year, monthOfYear, dayOfMonth ->
- val date_time = SimpleDateFormat(asIntentData?.asData?.languageSetting?.date_formate).format(
- SimpleDateFormat(
- "yyyy:MM:dd",
- Locale.ENGLISH
- ).parse("${year}:${monthOfYear}:${dayOfMonth}")
- ) ?: ""
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(date_time))) {
- fieldsList.getOrNull(position)?.fieldValue = date_time
- notifyItemChanged(position)
- observeChangesForFormula("")
- }
- },
- calender.get(Calendar.YEAR),
- calender.get(Calendar.MONTH),
- calender.get(Calendar.DAY_OF_MONTH)
- ).show()
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, fieldItem)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- }
- }
- inner class TimeFieldViewHolder(var binding: TimeItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.nameInput.clickWithDebounce {
- val calender = Calendar.getInstance()
- val hour = calender.getTime().hours
- val minute = calender.getTime().minutes
- val mTimePicker =
- TimePickerDialog(context, object : TimePickerDialog.OnTimeSetListener {
- override fun onTimeSet(view: TimePicker?, hourOfDay: Int, minute: Int) {
- val selectedTime = "${hourOfDay}:${minute}"
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(selectedTime))) {
- fieldsList.getOrNull(position)?.fieldValue = selectedTime
- notifyItemChanged(position)
- observeChangesForFormula("")
- }
- }
- }, hour, minute, android.text.format.DateFormat.is24HourFormat(context))
- mTimePicker.setTitle("Select Time")
- mTimePicker.show()
- }
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class ImageFieldViewHolder(var binding: AddImageNewItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = it
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- if (sheetData != null && !fieldsList.getOrNull(position)?.fieldValue.isNullOrBlank()) {
- val fileUrl = fieldsList.getOrNull(position)?.fieldValue
- // set profile image and name
- Glide.with(context)
- .load(fileUrl)
- .placeholder(R.drawable.no_image)
- .into(binding.captureImage)
- AppsheetUtils.setDrawableViewOut(binding.captureImage, "#B3B0AE", "${android.R.color.transparent}", 5, 10.0f, true)
- binding.captureImageView.visibility = View.VISIBLE
- binding.clickCaptureImage.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList[position].fieldValue = ""
- notifyItemChanged(position)
- }
- } else if (!fieldsList[position].fieldValue.isNullOrBlank()) {
- val bitmap = BitmapFactory.decodeFile(fieldsList[position].fieldValue)
- binding.captureImage.setImageBitmap(bitmap)
- AppsheetUtils.setDrawableViewOut(binding.captureImage, "#B3B0AE", "${android.R.color.transparent}", 5, 10.0f, true)
- binding.captureImageView.visibility = View.VISIBLE
- binding.clickCaptureImage.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList[position].fieldValue = ""
- notifyItemChanged(position)
- }
- } else {
- binding.captureImageView.visibility = View.GONE
- binding.clickCaptureImage.visibility = View.VISIBLE
- binding.clickCaptureImage.clickWithDebounce {
- if (itemClickListener != null) {
- itemClickListener!!.onItemClick(
- position,
- getItemViewType(position).toString(),
- binding.fieldItem
- )
- }
- }
- }
- //set error msg
- setLabelErrorValidation(binding.label, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify, "#000000")
- //enable and disable field
- setIsEnableField(binding.mImageView, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class FileFieldViewHolder(var binding: FileItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- var bundleData = Bundle()
- binding.fieldItem = it
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- if (sheetData != null && fieldsList.getOrNull(position)?.fieldValue?.isNotEmpty() ?: false) {
- AppsheetUtils.setDrawableViewOut(binding.captureFile, asIntentData.asData?.styleAndNavigation?.fileDotCol
- ?: "#B3B0AE", "#ffffff", 5, 10.0f, true)
- binding.captureFileView.visibility = View.VISIBLE
- binding.clickCaptureFile.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList[position].fieldValue = ""
- notifyItemChanged(position)
- }
- } else if (fieldsList[position].fieldValue?.isNotEmpty() ?: false) {
- AppsheetUtils.setDrawableViewOut(binding.captureFile, asIntentData.asData?.styleAndNavigation?.fileDotCol
- ?: "#B3B0AE", "#ffffff", 5, 10.0f, true)
- binding.captureFileView.visibility = View.VISIBLE
- binding.clickCaptureFile.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList.getOrNull(position)?.fieldValue = ""
- notifyItemChanged(position)
- }
- } else {
- binding.captureFileView.visibility = View.GONE
- binding.clickCaptureFile.visibility = View.VISIBLE
- binding.clickCaptureFile.clickWithDebounce {
- if (itemClickListener != null) {
- itemClickListener?.onItemClick(
- position,
- getItemViewType(position).toString(),
- binding.fieldItem
- )
- }
- }
- }
- //set error msg
- setLabelErrorValidation(binding.label, fieldsList.getOrNull(position)?.errorMsg
- ?: "", adapterPosition, isValidateNotify, "#000000")
- //enable and disable field
- setIsEnableField(binding.mFileView, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class SignatureFieldViewHolder(var binding: SignatureImageNewItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- var bundleData = Bundle()
- binding.fieldItem = it
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- if (sheetData != null && fieldsList.getOrNull(position)?.fieldValue?.isNotEmpty() == true) {
- val fileUrl = fieldsList.getOrNull(position)?.fieldValue
- // set profile image and name
- Glide.with(context)
- .load(fileUrl)
- .placeholder(R.drawable.no_image)
- .into(binding.signatureImage)
- AppsheetUtils.setDrawableViewOut(binding.signatureImage, asIntentData.asData?.styleAndNavigation?.fileDotCol
- ?: "#B3B0AE", null, 5, 10.0f, true)
- binding.captureSignatureView.visibility = View.VISIBLE
- binding.clickCaptureSignature.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList.getOrNull(position)?.fieldValue = ""
- notifyItemChanged(position)
- }
- } else if (fieldsList.getOrNull(position)?.fieldValue?.isNotEmpty() == true) {
- val bitmap = BitmapFactory.decodeFile(fieldsList[position].fieldValue)
- binding.signatureImage.setImageBitmap(bitmap)
- binding.captureSignatureView.visibility = View.VISIBLE
- binding.clickCaptureSignature.visibility = View.GONE
- binding.delete.clickWithDebounce {
- fieldsList.getOrNull(position)?.fieldValue = ""
- notifyItemChanged(position)
- }
- } else {
- binding.captureSignatureView.visibility = View.GONE
- binding.clickCaptureSignature.visibility = View.VISIBLE
- binding.clickCaptureSignature.clickWithDebounce {
- if (itemClickListener != null) {
- itemClickListener?.onItemClick(
- position,
- getItemViewType(position).toString(),
- binding.fieldItem
- )
- }
- }
- }
- //set error msg
- setLabelErrorValidation(binding.label, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify, "#000000")
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class AddressFieldViewHolder(var binding: AddressNewItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.nameInput.clickWithDebounce {
- itemClickListener?.let {
- it.onItemClick(
- position,
- getItemViewType(position).toString(),
- fieldsList.getOrNull(position)?.latLng
- )
- }
- observeChangesForFormula("onChange")
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class LatLongFieldViewHolder(var binding: LatlongItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- val latLngValue = "${fieldsList.getOrNull(position)?.latLng?.latitude
- ?: "0.0"} , ${fieldsList.getOrNull(position)?.latLng?.longitude ?: "0.0"}"
- fieldsList.getOrNull(position)?.fieldValue = latLngValue
- binding.latlongName.setText(latLngValue)
- binding.latlongName.clickWithDebounce {
- itemClickListener?.let {
- it.onItemClick(
- position,
- getItemViewType(position).toString(),
- fieldsList.getOrNull(position)?.latLng
- )
- }
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- //enable and disable field
- setIsEnableField(binding.latlongName, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class ProgressFieldViewHolder(var binding: ProgressItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- val arrayList: ArrayList<String> = fieldsList[adapterPosition].list!!
- var itemStateList: ArrayList<Boolean> = ArrayList()
- if (selectableItemStateMap[adapterPosition] != null) {
- itemStateList = selectableItemStateMap[adapterPosition] ?: ArrayList()
- } else {
- if (!fieldsList.getOrNull(adapterPosition)?.fieldValue.isNullOrEmpty()) {
- val data = fieldsList.getOrNull(adapterPosition)?.fieldValue ?: ""
- for (index in arrayList.indices) {
- val posData = fieldsList.getOrNull(adapterPosition)?.list?.getOrNull(index)
- if (data.equals(posData, true)) {
- itemStateList.add(true)
- } else {
- itemStateList.add(false)
- }
- }
- } else {
- for (i in arrayList.indices) {
- itemStateList.add(false)
- }
- }
- }
- binding.progressInput.clickWithDebounce {
- context.showListDialog(
- fieldsList.getOrNull(adapterPosition)?.fieldLebal ?: "Progress",
- "radio",
- object : ItemClickListener<Any> {
- override fun onItemClick(position: Int, type: String, data: Any?) {
- }
- override fun onItemUtilityClick(
- position: Int,
- type: String,
- data: Any?
- ) {
- selectableItemStateMap.put(
- position,
- data as ArrayList<Boolean>
- )
- if (selectableItemStateMap[position] != null) {
- for (index in selectableItemStateMap[position]!!.indices) {
- if (selectableItemStateMap[position]!![index]) {
- fieldsList.getOrNull(position)?.fieldValue = arrayList[index]
- notifyItemChanged(position)
- observeChangesForFormula(null)
- }
- }
- }
- if (selectableItemStateMap.get(position) != null) {
- loopBrk@ for (index in 0 until (selectableItemStateMap.get(position)?.size?:0)){
- if( selectableItemStateMap.get(position)?.getOrNull(index) ?: false){
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(arrayList.get(index)))) {
- fieldsList.getOrNull(position)?.fieldValue = arrayList.get(index)
- notifyItemChanged(position)
- observeChangesForFormula("onChange")
- break@loopBrk
- }
- }
- }
- }
- }
- },
- fieldsList.getOrNull(adapterPosition)?.list ?: ArrayList(),
- itemStateList,
- adapterPosition
- )
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- //enable and disable field
- setIsEnableField(binding.progressInput, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class EnumFieldViewHolder(var binding: EnumItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, pos: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(pos)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- val arrayList: ArrayList<String> = fieldsList.getOrNull(pos)?.list ?: ArrayList()
- var itemStateList: ArrayList<Boolean> = ArrayList()
- if (selectableItemStateMap.get(pos) != null) {
- itemStateList = selectableItemStateMap.get(pos) ?: ArrayList()
- } else {
- if (!fieldsList.getOrNull(adapterPosition)?.fieldValue.isNullOrEmpty()) {
- val data = fieldsList.getOrNull(adapterPosition)?.fieldValue ?: ""
- for (index in arrayList.indices) {
- val posData = fieldsList.getOrNull(adapterPosition)?.list?.getOrNull(index)
- if (data.equals(posData, true)) {
- itemStateList.add(true)
- } else {
- itemStateList.add(false)
- }
- }
- } else {
- for (i in arrayList.indices) {
- itemStateList.add(false)
- }
- }
- }
- binding.nameInput.clickWithDebounce {
- context.showListDialog(
- fieldsList.getOrNull(pos)?.fieldLebal ?: "Enum",
- "radio",
- object : ItemClickListener<Any> {
- override fun onItemClick(position: Int, type: String, data: Any?) {
- }
- override fun onItemUtilityClick(
- position: Int,
- type: String,
- data: Any?
- ) {
- selectableItemStateMap.put(
- position,
- data as ArrayList<Boolean>
- )
- if (selectableItemStateMap.get(position) != null) {
- loopBrk@ for (index in 0 until (selectableItemStateMap.get(position)?.size?:0)){
- if( selectableItemStateMap.get(position)?.getOrNull(index) ?: false){
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(arrayList.get(index)))) {
- fieldsList.getOrNull(position)?.fieldValue = arrayList.get(index)
- notifyItemChanged(position)
- observeChangesForFormula("onChange")
- break@loopBrk
- }
- }
- }
- }
- }
- },
- fieldsList.getOrNull(adapterPosition)?.list ?: ArrayList(),
- itemStateList,
- adapterPosition
- )
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(adapterPosition)?.errorMsg
- ?: "", adapterPosition, isValidateNotify)
- //enable and disable field
- setIsEnableField(binding.nameInput, it)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class ColorFieldViewHolder(var binding: ColorRecyclerItemBinding) : RecyclerView.ViewHolder(binding.root) {
- }
- inner class YesNoFieldViewHolder(var binding: YesNoItemBinding) : RecyclerView.ViewHolder(binding.root) {
- init {
- setYesNoBtnColor(binding.yes, binding.no, "")
- }
- fun bindData(fieldItem: FieldItem?, position: Int) {
- binding.no.clickWithDebounce {
- setYesNoBtnColor(binding.yes, binding.no, "FALSE")
- //set value
- fieldsList.getOrNull(position)?.fieldValue = "FALSE"
- observeChangesForFormula("onChange")
- }
- binding.yes.clickWithDebounce {
- setYesNoBtnColor(binding.yes, binding.no, "TRUE")
- //set value
- fieldsList.getOrNull(position)?.fieldValue = "TRUE"
- observeChangesForFormula("onChange")
- }
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- binding.languageSetting = asIntentData.asData?.languageSetting
- //set error msg
- setLabelErrorValidation(binding.label, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify, "#000000")
- if (fieldItem?.fieldFormula?.isNotEmpty() ?: false || fieldItem?.key ?: false) {
- binding.yes.isEnabled = false
- binding.yes.isFocusable = false
- binding.no.isEnabled = false
- binding.no.isFocusable = false
- } else {
- binding.yes.isEnabled = true
- binding.yes.isFocusable = true
- binding.no.isEnabled = true
- binding.no.isFocusable = true
- }
- if (fieldItem?.fieldValue?.isNotEmpty() ?: false) {
- setYesNoBtnColor(binding.yes, binding.no, fieldItem?.fieldValue ?: "")
- }
- }
- }
- inner class EnumListFieldViewHolder(var binding: EnumListItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, pos: Int) {
- binding.fieldItem = fieldItem
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- val arrayList: ArrayList<String> = fieldsList.getOrNull(pos)?.list ?: ArrayList()
- var itemStateList: ArrayList<Boolean> = ArrayList()
- if (selectableItemStateMap[pos] != null) {
- itemStateList = selectableItemStateMap?.get(pos) ?: ArrayList()
- } else {
- if (!fieldsList.getOrNull(pos)?.fieldValue.isNullOrEmpty()) {
- val data = fieldsList.getOrNull(pos)?.fieldValue?.split(",")
- for (index in arrayList.indices) {
- val posData = fieldsList[pos].list!![index]
- if (data?.size ?: 0 > index && (data?.get(index)?.equals(posData, true)) ?: false) {
- itemStateList.add(true)
- } else {
- itemStateList.add(false)
- }
- }
- } else {
- for (i in arrayList.indices) {
- itemStateList.add(false)
- }
- }
- }
- binding.nameInput.clickWithDebounce {
- context.showListDialog(
- fieldsList.getOrNull(pos)?.fieldLebal ?: "Enum List",
- "checkbox",
- object : ItemClickListener<Any> {
- override fun onItemClick(position: Int, type: String, data: Any?) {
- }
- override fun onItemUtilityClick(
- position: Int,
- type: String,
- data: Any?
- ) {
- selectableItemStateMap.put(
- position,
- data as ArrayList<Boolean>
- )
- var selectedData:StringBuffer? = null
- if (selectableItemStateMap.get(position) != null) {
- selectedData = StringBuffer()
- for (index in 0 until (selectableItemStateMap.get(position)?.size?:0)){
- if( selectableItemStateMap.get(position)?.getOrNull(index) ?: false){
- if (selectedData.isEmpty()) {
- selectedData.append(arrayList[index])
- } else {
- selectedData.append("," + arrayList[index])
- }
- }
- }
- }
- if (fieldsList.size > position && !(fieldsList.getOrNull(position)?.fieldValue.equals(selectedData?.toString()?:""))) {
- fieldsList.getOrNull(position)?.fieldValue = selectedData.toString()
- notifyItemChanged(position)
- observeChangesForFormula("onChange")
- }
- }
- },
- fieldsList.getOrNull(pos)?.list ?: ArrayList(),
- itemStateList,
- pos
- )
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(pos)?.errorMsg
- ?: "", pos, isValidateNotify)
- }
- }
- inner class ChangeLocationFieldViewHolder(var binding: ChangeLocationItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- if (fieldsList.getOrNull(position)?.fieldValue.isNullOrBlank()) {
- // Get the Layout Parameters for ListView Current Item View
- val params = binding.addNewItem.getLayoutParams()
- // Set the height of the Item View
- params.height = 0
- binding.addNewItem.setLayoutParams(params)
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- //enable and disable field
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class ChangeTimestampFieldViewHolder(var binding: ChangeTimestampItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let {
- binding.fieldItem = fieldsList.getOrNull(position)
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- val date = Utils.simpleDateFormatUtil(asIntentData.asData?.languageSetting?.datetime_formate, null, Date())
- fieldsList.getOrNull(position)?.fieldValue = date
- binding.changeTimestamp.setText(date)
- if (!(fieldsList.getOrNull(position)?.editable ?: false)) {
- binding.changeTimestamp.isClickable = false
- } else {
- binding.changeTimestamp.isClickable = true
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.getOrNull(position)?.errorMsg
- ?: "", position, isValidateNotify)
- //enable and disable field
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- inner class RefFieldViewHolder(var binding: EnumItemBinding) : RecyclerView.ViewHolder(binding.root) {
- fun bindData(fieldItem: FieldItem?, position: Int) {
- fieldItem?.let { it ->
- var refTableId = ""
- binding.fieldItem = it
- binding.styleNavigation = asIntentData.asData?.styleAndNavigation
- try {
- refTableId = fieldItem.fieldFormula?.getStrBtTwoDelimilers("(", ")")?.trim()
- ?: ""
- val tableInfo = AppypieApplication.getApplicationInstance().asIntentData?.ascolumndata?.filterIndexed { index, tableInfo ->
- tableInfo.tableId?.equals(refTableId) ?: false
- }?.getOrNull(0)
- /* val keyList = asIntentData.asKeyData?.get(tableInfo?.tableId)?.map {
- it.getOrNull(tableInfo?.keyPosition?:1)?:""
- }?:ArrayList()*/
- var keyListResult = asIntentData.asKeyData?.get(tableInfo?.tableId)?.mapNotNull { item ->
- (item.getOrNull(tableInfo?.keyPosition ?: 1)
- ?: "").takeIf { it.toString().isNotEmpty() }
- }
- if (keyListResult?.size ?: 0 > 0) {
- (keyListResult as ArrayList).removeAt(0)
- fieldItem.list = keyListResult
- }
- } catch (ex: Exception) {
- ex.printStackTrace()
- }
- binding.nameInput.clickWithDebounce {
- val refData = fieldsList.getOrNull(position)?.list ?: ArrayList()
- context.showRefListDialog(fieldsList.getOrNull(position)?.fieldLebal, object : SelectedItemListener {
- override fun <T> onItemClick(position: Int, type: String, data: T?) {
- if (type.equals(AppConstant.ADD_NEW_REF)) {
- itemClickListener?.onItemUtilityClick(position, AppConstant.ADD_NEW_REF, refTableId)
- } else {
- fieldsList.getOrNull(position)?.fieldValue = data.toString()
- binding.fieldItem = fieldsList?.get(position)
- observeChangesForFormula("onChange")
- }
- }
- }, refData, -1, position)
- }
- //set error msg
- setErrorValidation(binding.name, fieldsList.get(position).errorMsg
- ?: "", adapterPosition, isValidateNotify)
- binding.executePendingBindings()
- } ?: kotlin.run {
- binding.unbind()
- }
- }
- }
- override fun getItemViewType(position: Int): Int {
- return fieldsList[position].fieldTypeId
- }
- fun createField(column: Column?, errorMsg: String?, index: Int): FieldItem {
- val fieldItem = FieldItem()
- fieldItem.fieldType = column?.dataType
- fieldItem.isHideField = column?.hidden ?: false
- fieldItem.readOnly = column?.readOnly ?: false
- fieldItem.fieldTitle = column?.title
- fieldItem.fieldLebal = column?.displayName
- fieldItem.fieldFormula = column?.formula
- if (column?.key ?: false) {
- fieldItem.key = true
- keyColumnType = column?.dataType
- }
- if (column?.required ?: false) {
- fieldItem.fieldLebal += "*"
- fieldItem.mandatory = column?.required ?: false
- }
- when (column?.dataType) {
- "name" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_NAME
- fieldItem.errorMsg = errorMsg ?: "Please enter name."
- }
- "email" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_EMAIL
- fieldItem.errorMsg = errorMsg ?: "Please enter valid email."
- }
- "number" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_NUMBER
- fieldItem.errorMsg = errorMsg ?: "Please enter number."
- }
- "date" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_DATE
- fieldItem.errorMsg = errorMsg ?: "Please enter date."
- }
- "date_time" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_DATETIME
- fieldItem.errorMsg = errorMsg ?: "Please enter date time."
- }
- "time" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_TIME
- fieldItem.errorMsg = errorMsg ?: "Please enter time."
- }
- "decimal" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_DECIMAL
- fieldItem.errorMsg = errorMsg ?: "Please enter valid decimal."
- }
- "url" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_URL
- fieldItem.errorMsg = errorMsg ?: "Please enter valid url."
- }
- "phone" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_PHONE
- fieldItem.errorMsg = errorMsg ?: "Please enter valid phone."
- }
- "duration" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_DURATION
- fieldItem.errorMsg = errorMsg ?: "Please enter valid duration."
- }
- "ref" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_REFERENCE
- fieldItem.errorMsg = errorMsg ?: "Please enter valid reference."
- }
- "file" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_FILE
- }
- "image" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_IMAGE
- }
- "signature" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_SIGNATURE
- }
- "address" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_ADDRESS
- fieldItem.errorMsg = errorMsg ?: "Please enter valid address."
- if (sheetData != null && sheetData?.size ?: 0 > 0 && sheetData?.size ?: 0 > index && !sheetData?.get(index).isNullOrEmpty()) {
- fieldItem.fieldValue = sheetData?.get(index)
- try {
- var latLng = AppsheetUtils.getLatLongFromAddress(context, sheetData?.get(index))
- fieldItem.latLng = latLng
- } catch (ex: Exception) {
- InfoUtils(context).logError(ex.message
- ?: "", "NewAddSheetAdapter", "latnlong")
- }
- } else {
- var latlong = AppsheetUtils.getGpsLocation(context)
- if (latlong != null) {
- var address = AppsheetUtils.getAddressFromLatLong(
- context,
- latlong.latitude,
- latlong.longitude
- )
- fieldItem.fieldValue = address
- fieldItem.latLng = latlong
- }
- }
- }
- "color" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_COLOR
- val stringListData = column.formula?.split(",") ?: ArrayList()
- fieldItem.list!!.addAll(stringListData)
- }
- "text" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT
- fieldItem.errorMsg = errorMsg ?: "Please enter valid text."
- }
- "enum" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_ENUM
- fieldItem.errorMsg = errorMsg ?: "Please select valid enum."
- val stringListData = column.formula?.split(",") ?: ArrayList()
- fieldItem.list!!.addAll(stringListData)
- }
- "enumlist" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_ENUMLIST
- fieldItem.errorMsg = errorMsg ?: "Please select valid enum list."
- val stringListData = column.formula?.split(",") ?: ArrayList()
- fieldItem.list!!.addAll(stringListData)
- }
- "latnlong" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_LATLONG
- fieldItem.errorMsg = errorMsg ?: "Please enter valid latlong."
- if (sheetData != null && sheetData?.size ?: 0 > 0 && sheetData?.size ?: 0 > index && !sheetData?.get(index).isNullOrEmpty()) {
- val latlong = sheetData?.getOrNull(index)?.split(",")
- if (latlong?.size ?: 0 > 1) {
- try {
- fieldItem.latLng = LatLng((latlong?.get(0)
- ?: "0.0").toDouble(), (latlong?.get(1) ?: "0.0").toDouble())
- } catch (ex: Exception) {
- InfoUtils(context).logError(ex.message
- ?: "", "NewAddSheetAdapter", "latnlong")
- }
- }
- } else if (sheetData != null && sheetData?.size ?: 0 > 0) {
- try {
- fieldItem.latLng = LatLng(("0.0").toDouble(), ("0.0").toDouble())
- } catch (ex: Exception) {
- InfoUtils(context).logError(ex.message
- ?: "", "NewAddSheetAdapter", "latnlong")
- }
- } else {
- val latlong = AppsheetUtils.getGpsLocation(context)
- if (latlong != null) {
- val address = AppsheetUtils.getAddressFromLatLong(
- context,
- latlong.latitude,
- latlong.longitude
- )
- fieldItem.fieldValue = address
- fieldItem.latLng = latlong
- }
- }
- }
- "longtext" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_LONGTEXT
- fieldItem.errorMsg = errorMsg ?: "Please enter valid long text."
- }
- "percent" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_PERCENT
- fieldItem.errorMsg = errorMsg ?: "Please enter valid percent value."
- }
- "price" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_PRICE
- fieldItem.errorMsg = errorMsg ?: "Please enter valid percent value."
- }
- "progress" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_PROGRESS
- fieldItem.errorMsg = errorMsg ?: "Please select valid progress."
- val laguageData = asIntentData.asData?.languageSetting
- fieldItem.list?.add(laguageData?.to_start ?: "")
- fieldItem.list?.add(laguageData?.partially_done ?: "")
- fieldItem.list?.add(laguageData?.half_completed ?: "")
- fieldItem.list?.add(laguageData?.almost_done ?: "")
- fieldItem.list?.add(laguageData?.completed ?: "")
- }
- "video" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_VIDEO
- fieldItem.errorMsg = errorMsg ?: "Please enter valid video link."
- }
- "yesno" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_YES_NO
- }
- "change_location" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_CHANGE_LOCATION
- fieldItem.errorMsg = errorMsg ?: "Please enter valid change location"
- if (sheetData != null && sheetData?.size ?: 0 > 0 && sheetData?.size ?: 0 > index) {
- fieldItem.fieldValue = sheetData?.get(index) ?: ""
- } else {
- val latlong = AppsheetUtils.getGpsLocation(context)
- if (latlong != null) {
- val address = AppsheetUtils.getAddressFromLatLong(
- context,
- latlong.latitude,
- latlong.longitude
- )
- fieldItem.fieldValue = address
- fieldItem.latLng = latlong
- }
- }
- }
- "change_timestamp" -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT_CHANGE_TIMESTAMP
- fieldItem.errorMsg = errorMsg ?: "Please enter valid change timestamp"
- }
- else -> {
- fieldItem.fieldTypeId = AppConstant.FIELD_EDIT_TEXT
- fieldItem.errorMsg = errorMsg ?: "Please enter valid text"
- }
- }
- return fieldItem
- }
- fun setErrorValidation(textInputLayout: TextInputLayout, errorMsg: String, position: Int, isValidateNotify: Boolean) {
- textInputLayout.setError(errorMsg)
- if (fieldsList.getOrNull(position)?.mandatory ?: false && fieldsList.getOrNull(position)?.fieldValue.isNullOrBlank() && isValidateNotify) {
- textInputLayout.isErrorEnabled = true
- } else {
- textInputLayout.isErrorEnabled = false
- }
- }
- fun setLabelErrorValidation(label: TextView, errorMsg: String, position: Int, isValidateNotify: Boolean, color: String) {
- if (fieldsList.getOrNull(position)?.mandatory ?: false && fieldsList.getOrNull(position)?.fieldValue.isNullOrBlank() && isValidateNotify) {
- label.setTextColor(context.resources.getColor(R.color.errorText))
- } else {
- label.setTextColor(AppsheetUtils.getColor(color))
- }
- }
- fun setYesNoBtnColor(yesTxt: TextView, noTxt: TextView, type: String) {
- val primarybgColor = asIntentData?.asData?.styleAndNavigation?.button?.get(2) ?: "#4891DB"
- val primaryTxtColor = asIntentData?.asData?.styleAndNavigation?.button?.get(3) ?: "#FFFFFF"
- val secbgColor = asIntentData?.asData?.styleAndNavigation?.secondaryButton?.get(2) ?: "#EEE"
- val secTxtColor = asIntentData?.asData?.styleAndNavigation?.secondaryButton?.get(3)
- ?: "#000000"
- if (type.equals("TRUE", true)) {
- yesTxt.setTextColor(
- AppsheetUtils.getColor(
- primaryTxtColor
- )
- )
- AppsheetUtils.setDrawableViewOut(
- yesTxt,
- primarybgColor,
- primarybgColor,
- 1,
- 5.0f
- , false)
- noTxt.setTextColor(
- AppsheetUtils.getColor(
- secTxtColor
- )
- )
- AppsheetUtils.setDrawableViewOut(
- noTxt,
- secbgColor,
- secbgColor,
- 1,
- 5.0f
- , false)
- } else if (type.equals("FALSE", true)) {
- noTxt.setTextColor(
- AppsheetUtils.getColor(
- primaryTxtColor
- )
- )
- AppsheetUtils.setDrawableViewOut(
- noTxt,
- primarybgColor,
- primarybgColor,
- 1,
- 5.0f
- , false)
- yesTxt.setTextColor(
- AppsheetUtils.getColor(
- secTxtColor
- )
- )
- AppsheetUtils.setDrawableViewOut(
- yesTxt,
- secbgColor,
- secbgColor,
- 1,
- 5.0f
- , false)
- } else {
- AppsheetUtils.setDrawableViewOut(noTxt, secbgColor, secbgColor, 1, 5.0f, false)
- AppsheetUtils.setDrawableViewOut(yesTxt, secbgColor, secbgColor, 1, 5.0f, false)
- }
- }
- //is use to enable and disable field
- fun setIsEnableField(view: View, fieldItem: FieldItem?) {
- var condition: Boolean = false
- val formulaNotApplicable = arrayOf("ref", "enum", "enumlist", "color")
- if (fieldItem?.fieldFormula?.isNotEmpty() ?: false && !formulaNotApplicable.any { it == fieldItem?.fieldType }) {
- condition = true
- }
- if (fieldItem?.key ?: false && isEditMode) {
- condition = true
- }
- if (fieldItem?.readOnly ?: false) {
- condition = true
- }
- if (condition) {
- view.isEnabled = false
- view.isFocusable = false
- view.isClickable = false
- } else {
- view.isEnabled = true
- view.isFocusable = true
- view.isClickable = true
- }
- }
- fun handleInputFields(nameInput:EditText,pos: Int){
- nameInput.addTextChangedListener(object : TextWatcher {
- override fun afterTextChanged(s: Editable?) {}
- override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
- override fun onTextChanged(qryTxt: CharSequence?, start: Int, before: Int, count: Int) {
- if (fieldsList.size > pos ) {
- fieldsList.getOrNull(pos)?.fieldValue = qryTxt?.toString()?:""
- observeChangesForFormula("onChange")
- }
- }
- })
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement