From 2c3435ee799e461d145871ab79cb36af6caf60db Mon Sep 17 00:00:00 2001 From: Anuphap Suwannamas Date: Sun, 9 Feb 2020 12:45:46 +0700 Subject: [PATCH 1/4] CA-1980 - Fixed when review offline, totals should be updated --- .../org/rfcx/ranger/data/local/EventDb.kt | 2 +- .../remote/domain/alert/EventRepositoryImp.kt | 5 +- .../remote/domain/alert/GetEventsUseCase.kt | 3 +- .../main/java/org/rfcx/ranger/di/UiModule.kt | 4 +- .../view/alert/AlertBottomDialogFragment.kt | 94 +++++++------------ .../view/alert/AlertBottomDialogViewModel.kt | 34 +++++-- .../ranger/view/alerts/AllAlertsViewModel.kt | 32 +------ .../view/alerts/adapter/AlertsAdapter.kt | 7 +- .../ranger/view/status/StatusViewModel.kt | 37 ++------ .../view/status/adapter/StatusAdapter.kt | 12 +-- .../status/adapter/viewholder/AlertView.kt | 26 ++--- app/src/main/res/layout/item_status_alert.xml | 10 ++ 12 files changed, 119 insertions(+), 147 deletions(-) diff --git a/app/src/main/java/org/rfcx/ranger/data/local/EventDb.kt b/app/src/main/java/org/rfcx/ranger/data/local/EventDb.kt index 2c347cf6d..816b647ef 100644 --- a/app/src/main/java/org/rfcx/ranger/data/local/EventDb.kt +++ b/app/src/main/java/org/rfcx/ranger/data/local/EventDb.kt @@ -56,7 +56,7 @@ class EventDb(val realm: Realm) { } } - fun updateEvents(event: Event) { + fun saveEvent(event: Event) { Realm.getDefaultInstance().use { it -> it.executeTransaction { it.insertOrUpdate(event) diff --git a/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/EventRepositoryImp.kt b/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/EventRepositoryImp.kt index 642757ded..12a480a88 100644 --- a/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/EventRepositoryImp.kt +++ b/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/EventRepositoryImp.kt @@ -46,7 +46,10 @@ class EventRepositoryImp(private val eventService: EventService, private val eve override fun getEvent(eventGuID: String): Single { return eventService.getEvent(eventGuID).map { - it.toEvent() + val event = it.toEvent() + eventDb.saveEvent(event) + + event } } } \ No newline at end of file diff --git a/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/GetEventsUseCase.kt b/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/GetEventsUseCase.kt index 3259d0b42..259eb1c78 100644 --- a/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/GetEventsUseCase.kt +++ b/app/src/main/java/org/rfcx/ranger/data/remote/domain/alert/GetEventsUseCase.kt @@ -57,7 +57,8 @@ class GetEventsUseCase(private val eventRepository: EventRepository, if (isStarting) { val eventCached = eventDb.getEvents() val r = events.filter { - eventCached.firstOrNull { cached -> cached.id == it.id } == null // new event? + eventCached.firstOrNull { cached -> cached.id == it.id && + cached.reviewCreated.time == it.reviewCreated.time } == null // new event? } // has new event? if (r.isNotEmpty()) { diff --git a/app/src/main/java/org/rfcx/ranger/di/UiModule.kt b/app/src/main/java/org/rfcx/ranger/di/UiModule.kt index 4fd729e22..bc0a6a454 100644 --- a/app/src/main/java/org/rfcx/ranger/di/UiModule.kt +++ b/app/src/main/java/org/rfcx/ranger/di/UiModule.kt @@ -40,13 +40,13 @@ object UiModule { val statusModule = module { viewModel { StatusViewModel(androidContext(), get(), get(), get(), get(), get(), get(), - get(), get(), get()) + get(), get()) } viewModel { ReportDetailViewModel(get(), get(), get()) } } val alertModule = module { - viewModel { AllAlertsViewModel(androidContext(), get(), get(), get(), get(), get()) } + viewModel { AllAlertsViewModel(androidContext(), get(), get(), get(), get()) } viewModel { AlertBottomDialogViewModel(androidContext(), get(), get(), get()) } viewModel { GroupAlertsViewModel(androidContext(), get(), get()) } viewModel { GuardianListDetailViewModel(get()) } diff --git a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt index 70a59acd8..9cc48701f 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt @@ -3,7 +3,6 @@ package org.rfcx.ranger.view.alert import android.annotation.SuppressLint import android.content.Context import android.content.Intent -import android.graphics.drawable.Drawable import android.net.Uri import android.os.Build import android.os.Bundle @@ -11,7 +10,6 @@ import android.view.LayoutInflater import android.view.View import android.view.ViewGroup import android.widget.Toast -import androidx.core.content.ContextCompat import androidx.lifecycle.Observer import androidx.recyclerview.widget.GridLayoutManager import com.google.android.exoplayer2.Player @@ -128,7 +126,11 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { timeTextView.text = " ${context?.let { it1 -> it.beginsAt.toTimeSinceStringAlternativeTimeAgo(it1) }}" reviewedTextView.text = context?.getString(if (it.firstNameReviewer.isNotBlank()) R.string.last_reviewed_by else R.string.not_have_review) ?: "" - nameReviewerTextView.text = it.firstNameReviewer + nameReviewerTextView.text = if (it.firstNameReviewer.isNotBlank()) { + it.firstNameReviewer + } else { + if (state != "NONE" && context != null) context.getNameEmail() else "" + } nameReviewerTextView.visibility = if (it.firstNameReviewer.isNotBlank()) View.VISIBLE else View.INVISIBLE linearLayout.visibility = View.INVISIBLE agreeTextView.text = it.confirmedCount.toString() @@ -136,17 +138,17 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { if (state == "CONFIRM") { linearLayout.visibility = View.VISIBLE - - if (context !== null) { - agreeImageView.background = context!!.getImage(R.drawable.bg_circle_red) - agreeImageView.setImageDrawable(context!!.getImage(R.drawable.ic_confirm_event_white)) + updateConfirmCount(it) + context?.let { it2 -> + agreeImageView.background = it2.getImage(R.drawable.bg_circle_red) + agreeImageView.setImageDrawable(it2.getImage(R.drawable.ic_confirm_event_white)) } } else if (state == "REJECT") { linearLayout.visibility = View.VISIBLE - - if (context !== null) { - rejectImageView.background = context!!.getImage(R.drawable.bg_circle_grey) - rejectImageView.setImageDrawable(context!!.getImage(R.drawable.ic_reject_event_white)) + updateRejectCount(it) + context?.let { it2 -> + rejectImageView.background = it2.getImage(R.drawable.bg_circle_grey) + rejectImageView.setImageDrawable(it2.getImage(R.drawable.ic_reject_event_white)) } } @@ -267,14 +269,16 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { alertViewModel.reviewEvent.observe(this, Observer { it -> it.success( { + val reviewConfirm = it.second.reviewConfirm + val newEvent = it.first hideLoading() - event?.let { it1 -> alertListener?.onReviewed(it.reviewConfirm, it1) } + alertListener?.onReviewed(reviewConfirm, newEvent) // is rejectEvent? - if (it.reviewConfirm == ReviewEventFactory.rejectEvent) { + if (reviewConfirm == ReviewEventFactory.rejectEvent) { dismiss() } - showCountReviewer(it) + showCountReviewer(newEvent, reviewConfirm) }, { hideLoading() @@ -287,69 +291,43 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { }) } - private fun showCountReviewer(reviewEventFactory: ReviewEventFactory) { + private fun showCountReviewer(event: Event, reviewConfirm: String) { nameReviewerTextView.visibility = View.VISIBLE reviewedTextView.text = context?.getString(R.string.last_reviewed_by) - nameReviewerTextView.text = context.getNameEmail() + nameReviewerTextView.text = if (event.firstNameReviewer.isNotBlank()) { + event.firstNameReviewer + } else { + context.getNameEmail() + } + agreeTextView.text = event.confirmedCount.toString() + rejectTextView.text = event.rejectedCount.toString() - if (reviewEventFactory.reviewConfirm == ReviewEventFactory.confirmEvent) { + if (reviewConfirm == ReviewEventFactory.confirmEvent) { agreeImageView.background = context?.getImage(R.drawable.bg_circle_red) agreeImageView.setImageDrawable(context?.getImage(R.drawable.ic_confirm_event_white)) rejectImageView.setImageDrawable(context?.getImage(R.drawable.ic_reject_event_gray)) context?.getBackgroundColor(R.color.transparent)?.let { rejectImageView.setBackgroundColor(it) } - - } else if (reviewEventFactory.reviewConfirm == ReviewEventFactory.rejectEvent) { + updateConfirmCount(event) + } else { rejectImageView.background = context!!.getImage(R.drawable.bg_circle_grey) rejectImageView.setImageDrawable(context!!.getImage(R.drawable.ic_reject_event_white)) agreeImageView.setImageDrawable(context?.getImage(R.drawable.ic_confirm_event_gray)) context?.getBackgroundColor(R.color.transparent)?.let { agreeImageView.setBackgroundColor(it) } - - } - - if (event !== null) { - if (event!!.firstNameReviewer == context.getNameEmail()) { - if (event!!.reviewConfirmed!!) { - if (reviewEventFactory.reviewConfirm == ReviewEventFactory.rejectEvent) { - rejectedCount() - } - } else { - if (reviewEventFactory.reviewConfirm == ReviewEventFactory.confirmEvent) { - confirmedCount() - } - } - } else { - if (reviewEventFactory.reviewConfirm == ReviewEventFactory.confirmEvent) { - confirmedCount() - - } else if (reviewEventFactory.reviewConfirm == ReviewEventFactory.rejectEvent) { - rejectedCount() - - } - } + updateRejectCount(event) } } - private fun confirmedCount() { - agreeTextView.text = (event?.confirmedCount?.plus(1)).toString() - - if (event?.firstNameReviewer == context.getNameEmail()) { - rejectTextView.text = event?.rejectedCount?.minus(1).toString() - } else { - rejectTextView.text = event?.rejectedCount.toString() - } + private fun updateConfirmCount(event: Event) { + val confirmCount = if (event.confirmedCount > 0) event.confirmedCount else 1 + agreeTextView.text = confirmCount.toString() } - private fun rejectedCount() { - rejectTextView.text = (event?.rejectedCount?.plus(1)).toString() - - if (event?.firstNameReviewer == context.getNameEmail()) { - agreeTextView.text = event?.confirmedCount?.minus(1).toString() - } else { - agreeTextView.text = event?.confirmedCount.toString() - } + private fun updateRejectCount(event: Event) { + val rejectCount = if (event.rejectedCount > 0) event.rejectedCount else 1 + rejectTextView.text = rejectCount.toString() } companion object { diff --git a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt index 3bba6cb19..d00a0e76d 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt @@ -65,8 +65,8 @@ class AlertBottomDialogViewModel(private val context: Context, val classifiedCation: LiveData>> get() = _classifiedCation - private var _reviewEvent: MutableLiveData> = MutableLiveData() - val reviewEvent: LiveData> + private var _reviewEvent: MutableLiveData>> = MutableLiveData() + val reviewEvent: LiveData>> get() = _reviewEvent init { @@ -160,7 +160,6 @@ class AlertBottomDialogViewModel(private val context: Context, _playerState.value = Player.STATE_BUFFERING } - private val exoPlayerListener = object : Player.EventListener { override fun onPlayerStateChanged(playWhenReady: Boolean, playbackState: Int) { _playerState.value = playbackState @@ -189,7 +188,6 @@ class AlertBottomDialogViewModel(private val context: Context, updateSoundProgress() playerTimeHandler.postDelayed(this, delayTime) } - } private fun updateSoundProgress() { @@ -225,9 +223,7 @@ class AlertBottomDialogViewModel(private val context: Context, val requests = ReviewEventFactory(it.id, if (confirm) ReviewEventFactory.confirmEvent else ReviewEventFactory.rejectEvent) reviewEventUseCase.execute(object : DisposableSingleObserver() { override fun onSuccess(t: Unit) { - _reviewEvent.value = Result.Success(requests) - // invoke state to review - _eventState.value = EventState.REVIEWED + requestUpdateEvent(requests) } override fun onError(e: Throwable) { @@ -235,7 +231,8 @@ class AlertBottomDialogViewModel(private val context: Context, // save to review unsent eventDb.save(EventReview(requests.eventGuID, requests.reviewConfirm, EventReview.UNSENT)) - _reviewEvent.value = Result.Success(requests) + _reviewEvent.value = Result.Success(Pair(eventResult!!, requests)) + _eventState.value = EventState.REVIEWED // invoke state to review } }, requests) @@ -247,6 +244,27 @@ class AlertBottomDialogViewModel(private val context: Context, } } + fun requestUpdateEvent(requests: ReviewEventFactory) { + if (!context.isNetworkAvailable()) { + _reviewEvent.value = Result.Success(Pair(eventResult!!, requests)) + } + + getEventUseCase.execute(object : DisposableSingleObserver() { + override fun onSuccess(event: Event) { + _reviewEvent.value = Result.Success(Pair(event, requests)) + // invoke state to review + _eventState.value = EventState.REVIEWED + } + + override fun onError(e: Throwable) { + e.printStackTrace() + + _event.value = Result.Error(e) + _reviewEvent.value = Result.Success(Pair(eventResult!!, requests)) + } + }, requests.eventGuID) + } + override fun onCleared() { super.onCleared() diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/AllAlertsViewModel.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/AllAlertsViewModel.kt index 63a9437fa..1c03211b8 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/AllAlertsViewModel.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/AllAlertsViewModel.kt @@ -3,7 +3,6 @@ package org.rfcx.ranger.view.alerts import android.content.Context import android.widget.Toast import androidx.lifecycle.* -import io.reactivex.observers.DisposableSingleObserver import io.realm.RealmResults import org.rfcx.ranger.R import org.rfcx.ranger.adapter.entity.BaseItem @@ -22,7 +21,6 @@ import org.rfcx.ranger.view.alerts.adapter.LoadingItem class AllAlertsViewModel(private val context: Context, private val eventsUserCase: GetEventsUseCase, - private val eventUseCase: GetEventUseCase, private val eventDb: EventDb, private val profileData: ProfileData, pref: Preferences) : ViewModel() { @@ -129,44 +127,24 @@ class AllAlertsViewModel(private val context: Context, _alerts.value = Result.Success(items) } - fun onEventReviewed(reviewValue: String, event: Event) { - val eventItem = _alertsList.firstOrNull { it.event.id == event.id } + fun onEventReviewed(reviewValue: String, newEvent: Event) { + val eventItem = _alertsList.firstOrNull { it.event.id == newEvent.id } eventItem?.let { + it.event = newEvent eventItem.state = when (reviewValue) { ReviewEventFactory.confirmEvent -> EventItem.State.CONFIRM ReviewEventFactory.rejectEvent -> EventItem.State.REJECT else -> EventItem.State.NONE } - getEventDetail(eventItem) + _alertsList.replace(eventItem) { it2 -> it2.event.id == newEvent.id } + _alerts.value = Result.Success(_alertsList) } ?: run { _alerts.value = Result.Success(_alertsList) } } - private fun getEventDetail(eventItem: EventItem) { - _alerts.value = Result.Loading - val eventId = eventItem.event.id - eventUseCase.execute(object : DisposableSingleObserver() { - override fun onSuccess(event: Event) { - updateEventItem(eventItem, event) - } - - override fun onError(e: Throwable) { - // just need update view - updateEventItem(eventItem, eventItem.event) - } - }, eventId) - } - - private fun updateEventItem(eventItem: EventItem, newEvent: Event) { - eventItem.event = newEvent // set new event - - _alertsList.replace(eventItem) { it.event.id == newEvent.id } - _alerts.value = Result.Success(_alertsList) - } - // Loading more update list fun getItemsWithLoading(): List { val listResult = arrayListOf() diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt index 1be05742e..ffd986fb4 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt @@ -110,7 +110,9 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter 0) item.event.confirmedCount else 1 + tvAgreeValue.text = confirmCount.toString() } EventItem.State.REJECT -> { ivStatusRead.visibility = View.INVISIBLE @@ -121,6 +123,9 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter 0) item.event.rejectedCount else 1 + tvRejectValue.text = rejectedCount.toString() } EventItem.State.NONE -> { ivStatusRead.visibility = View.VISIBLE diff --git a/app/src/main/java/org/rfcx/ranger/view/status/StatusViewModel.kt b/app/src/main/java/org/rfcx/ranger/view/status/StatusViewModel.kt index 86595a1d6..a1e19de7b 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/StatusViewModel.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/StatusViewModel.kt @@ -17,7 +17,6 @@ import org.rfcx.ranger.data.local.EventDb import org.rfcx.ranger.data.local.ProfileData import org.rfcx.ranger.data.local.WeeklySummaryData import org.rfcx.ranger.data.remote.ResponseCallback -import org.rfcx.ranger.data.remote.domain.alert.GetEventUseCase import org.rfcx.ranger.data.remote.domain.alert.GetEventsUseCase import org.rfcx.ranger.data.remote.site.GetSiteNameUseCase import org.rfcx.ranger.entity.event.Event @@ -38,7 +37,7 @@ import org.rfcx.ranger.view.status.adapter.StatusAdapter import java.util.concurrent.TimeUnit class StatusViewModel(private val context: Context, private val reportDb: ReportDb, private val reportImageDb: ReportImageDb, - private val locationDb: LocationDb, private val profileData: ProfileData, private val eventUseCase: GetEventUseCase, + private val locationDb: LocationDb, private val profileData: ProfileData, private val weeklySummaryData: WeeklySummaryData, private val eventDb: EventDb, private val eventsUserCase: GetEventsUseCase, private val getSiteName: GetSiteNameUseCase) : ViewModel() { @@ -214,47 +213,25 @@ class StatusViewModel(private val context: Context, private val reportDb: Report eventsLiveData.observeForever(eventObserve) } - fun onEventReviewed(event: Event, reviewValue: String) { - val eventItem = _alertsList.firstOrNull { it.alert.id == event.id } + fun onEventReviewed(newEvent: Event, reviewValue: String) { + val eventItem = _alertsList.firstOrNull { it.event.id == newEvent.id } eventItem?.let { - eventItem.state = when (reviewValue) { + it.event = newEvent + it.state = when (reviewValue) { ReviewEventFactory.confirmEvent -> StatusAdapter.AlertItem.State.CONFIRM ReviewEventFactory.rejectEvent -> StatusAdapter.AlertItem.State.REJECT else -> StatusAdapter.AlertItem.State.NONE } - getEventDetail(eventItem) + _alertsList.replace(eventItem) { it2-> it2.event.id == newEvent.id } + _alertItems.value = _alertsList } ?: run { _alertItems.value = _alertsList } } - private fun getEventDetail(eventItem: StatusAdapter.AlertItem?) { - val eventId = eventItem?.alert?.id.toString() - eventUseCase.execute(object : DisposableSingleObserver() { - override fun onSuccess(event: Event) { - updateEventItem(eventItem, event) - } - - override fun onError(e: Throwable) { - // just need update view - if (eventItem != null) { - updateEventItem(eventItem, eventItem.alert) - } - } - }, eventId) - } - - private fun updateEventItem(eventItem: StatusAdapter.AlertItem?, newEvent: Event) { - if (eventItem != null) { - eventItem.alert = newEvent // set new event - _alertsList.replace(eventItem) { it.alert.id == newEvent.id } - } - _alertItems.value = _alertsList - } - private fun combinedReports() { val newItemsList = arrayListOf() diff --git a/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt index 9df6c586a..98e9df1a9 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt @@ -385,8 +385,8 @@ class StatusAdapter(private val statusTitle: String?, private val alertTitle: St } } - data class AlertItem(var alert: Event, var state: State) : StatusItemBase { - val count = alert.confirmedCount + alert.rejectedCount + data class AlertItem(var event: Event, var state: State) : StatusItemBase { + val count = event.confirmedCount + event.rejectedCount enum class State { CONFIRM, REJECT, NONE @@ -395,10 +395,10 @@ class StatusAdapter(private val statusTitle: String?, private val alertTitle: St override fun getViewType(): Int = ITEM_ALERT override fun getId(): Int = -3 - fun getGuardianShortname(): String = alert.guardianName - fun getImage(): Int = alert.value.toEventIcon() - fun getTime(context: Context): String = " ${alert.beginsAt.toTimeSinceStringAlternativeTimeAgo(context)}" - fun getReviewed(context: Context): String = context.getString(if (alert.firstNameReviewer.isNotBlank() || state !== State.NONE) R.string.last_reviewed_by else R.string.not_have_review) + fun getGuardianShortname(): String = event.guardianName + fun getImage(): Int = event.value.toEventIcon() + fun getTime(context: Context): String = " ${event.beginsAt.toTimeSinceStringAlternativeTimeAgo(context)}" + fun getReviewed(context: Context): String = context.getString(if (event.firstNameReviewer.isNotBlank() || state !== State.NONE) R.string.last_reviewed_by else R.string.not_have_review) fun getConfirmIcon(): Int = when (state) { State.CONFIRM -> R.drawable.ic_confirm_event_white diff --git a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt index b30ce764d..3dd477957 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt @@ -17,11 +17,9 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene binding.alertItem = item binding.context = binding.root.context binding.reviewedTextView.visibility = View.VISIBLE - - binding.agreeTextView.text = item.alert.confirmedCount.toString() - binding.rejectTextView.text = item.alert.rejectedCount.toString() - - if (item.alert.firstNameReviewer.isNotBlank() || item.state !== StatusAdapter.AlertItem.State.NONE) { + binding.confirmCount = item.event.confirmedCount.toString() + binding.rejectCount = item.event.rejectedCount.toString() + if (item.event.firstNameReviewer.isNotBlank() || item.state !== StatusAdapter.AlertItem.State.NONE) { binding.nameReviewerTextView.visibility = View.VISIBLE } else { binding.nameReviewerTextView.visibility = View.INVISIBLE @@ -29,12 +27,12 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene if (item.state !== StatusAdapter.AlertItem.State.NONE) { binding.nameReviewerTextView.text = binding.root.context.getNameEmail() - } else if (item.alert.firstNameReviewer.isNotBlank()) { - binding.nameReviewerTextView.text = item.alert.firstNameReviewer + } else if (item.event.firstNameReviewer.isNotBlank()) { + binding.nameReviewerTextView.text = item.event.firstNameReviewer } - when { - item.state == StatusAdapter.AlertItem.State.CONFIRM -> { + when (item.state) { + StatusAdapter.AlertItem.State.CONFIRM -> { binding.linearLayout.visibility = View.VISIBLE binding.agreeImageView.background = binding.root.context.getImage(R.drawable.bg_circle_red) @@ -43,8 +41,10 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene binding.rejectImageView.setImageDrawable(binding.root.context.getImage(R.drawable.ic_reject_event_gray)) binding.rejectImageView.setBackgroundColor(binding.root.context.getBackgroundColor(R.color.transparent)) + val confirmCount = if (item.event.confirmedCount > 0) item.event.confirmedCount else 1 + binding.confirmCount = confirmCount.toString() } - item.state == StatusAdapter.AlertItem.State.REJECT -> { + StatusAdapter.AlertItem.State.REJECT -> { binding.linearLayout.visibility = View.VISIBLE binding.rejectImageView.background = binding.root.context.getImage(R.drawable.bg_circle_grey) @@ -53,8 +53,10 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene binding.agreeImageView.setImageDrawable(binding.root.context.getImage(R.drawable.ic_confirm_event_gray)) binding.agreeImageView.setBackgroundColor(binding.root.context.getBackgroundColor(R.color.transparent)) + val rejectedCount = if (item.event.rejectedCount > 0) item.event.rejectedCount else 1 + binding.rejectCount = rejectedCount.toString() } - item.state == StatusAdapter.AlertItem.State.NONE -> { + StatusAdapter.AlertItem.State.NONE -> { binding.linearLayout.visibility = View.INVISIBLE binding.agreeImageView.setBackgroundColor(binding.root.context.getBackgroundColor(R.color.transparent)) binding.rejectImageView.setBackgroundColor(binding.root.context.getBackgroundColor(R.color.transparent)) @@ -69,7 +71,7 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene } else if (item.state == StatusAdapter.AlertItem.State.CONFIRM) { state = EventItem.State.CONFIRM } - listener?.onClickedAlertItem(item.alert, state) + listener?.onClickedAlertItem(item.event, state) } binding.executePendingBindings() } diff --git a/app/src/main/res/layout/item_status_alert.xml b/app/src/main/res/layout/item_status_alert.xml index 5560d09d7..b92a5be8f 100644 --- a/app/src/main/res/layout/item_status_alert.xml +++ b/app/src/main/res/layout/item_status_alert.xml @@ -18,6 +18,14 @@ + + + + From ed90d57e0a8efb60f7bb5cfc548dde326ff13685 Mon Sep 17 00:00:00 2001 From: Anuphap Suwannamas Date: Sun, 9 Feb 2020 14:04:11 +0700 Subject: [PATCH 2/4] CA-1980 - Fixed adapter item alert by type --- .../main/java/org/rfcx/ranger/di/UiModule.kt | 2 +- .../AlertDetailByTypeViewModel.kt | 34 ++++--------------- .../ItemAlertDetailByTypeAdapter.kt | 10 +++--- 3 files changed, 11 insertions(+), 35 deletions(-) diff --git a/app/src/main/java/org/rfcx/ranger/di/UiModule.kt b/app/src/main/java/org/rfcx/ranger/di/UiModule.kt index bc0a6a454..c5445ced4 100644 --- a/app/src/main/java/org/rfcx/ranger/di/UiModule.kt +++ b/app/src/main/java/org/rfcx/ranger/di/UiModule.kt @@ -51,7 +51,7 @@ object UiModule { viewModel { GroupAlertsViewModel(androidContext(), get(), get()) } viewModel { GuardianListDetailViewModel(get()) } viewModel { AlertViewModel(androidContext(), get(), get()) } - viewModel { AlertDetailByTypeViewModel(androidContext(), get(), get(), get()) } + viewModel { AlertDetailByTypeViewModel(androidContext(), get(), get()) } } val profileModule = module { diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/AlertDetailByTypeViewModel.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/AlertDetailByTypeViewModel.kt index 48efcda85..9a864467c 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/AlertDetailByTypeViewModel.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/AlertDetailByTypeViewModel.kt @@ -19,7 +19,6 @@ import org.rfcx.ranger.util.* class AlertDetailByTypeViewModel(private val context: Context, private val eventDb: EventDb, - private val eventUseCase: GetEventUseCase, private val getMoreEvent: GetMoreEventInGuardian) : ViewModel() { private val _arrayEvent = MutableLiveData>() // keep only 50 events val arrayEvent: LiveData> get() = _arrayEvent @@ -38,45 +37,24 @@ class AlertDetailByTypeViewModel(private val context: Context, _arrayEvent.value = Result.Success(EventGroupByValue(itemsEvent, EventGroupByValue.StateSeeOlder.DEFAULT)) } - fun onEventReviewed(event: Event, reviewValue: String) { - val eventItem = arrayEventGroupMore.events.firstOrNull { it.event.id == event.id } + fun onEventReviewed(newEvent: Event, reviewValue: String) { + val eventItem = arrayEventGroupMore.events.firstOrNull { it.event.id == newEvent.id } eventItem?.let { - eventItem.state = when (reviewValue) { + it.event = newEvent + it.state = when (reviewValue) { ReviewEventFactory.confirmEvent -> EventItem.State.CONFIRM ReviewEventFactory.rejectEvent -> EventItem.State.REJECT else -> EventItem.State.NONE } - - getEventDetail(eventItem) + arrayEventGroupMore.events.replace(eventItem) {it2 -> it2.event.id == newEvent.id } + _arrayEvent.value = Result.Success(arrayEventGroupMore) } ?: run { _arrayEvent.value = Result.Success(arrayEventGroupMore) } } - private fun getEventDetail(eventItem: EventItem) { - _arrayEvent.value = Result.Loading - val eventId = eventItem.event.id - eventUseCase.execute(object : DisposableSingleObserver() { - override fun onSuccess(event: Event) { - updateEventItem(eventItem, event) - } - - override fun onError(e: Throwable) { - // just need update view - updateEventItem(eventItem, eventItem.event) - } - }, eventId) - } - - private fun updateEventItem(eventItem: EventItem, newEvent: Event) { - eventItem.event = newEvent // set new event - - arrayEventGroupMore.events.replace(eventItem) { it.event.id == newEvent.id } - _arrayEvent.value = Result.Success(arrayEventGroupMore) - } - fun loadMoreEvents() { val lastEvent = arrayEventGroupMore.events[arrayEventGroupMore.events.size - 1].event val guid = lastEvent.guardianId diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt index 28849b811..525464dc6 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt @@ -1,11 +1,8 @@ package org.rfcx.ranger.view.alerts.guardianListDetail.alertDetailByType -import android.content.Context -import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.core.content.ContextCompat import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView @@ -55,8 +52,6 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen private val ivReject = itemView.rejectImageView private val linearLayout = itemView.linearLayout - var currentEvent: EventItem? = null - fun bind(item: EventItem) { eventsInEventsTextView.text = item.event.beginsAt.toTimeSinceStringAlternativeTimeAgo(itemView.context) item.event.value.toEventIcon().let { iconAlert.setImageResource(it) } @@ -65,7 +60,6 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen tvReviewed.text = context.getString(if (item.event.firstNameReviewer.isNotBlank() || item.state !== EventItem.State.NONE) R.string.last_reviewed_by else R.string.not_have_review) tvNameReviewer.visibility = if (item.event.firstNameReviewer.isNotBlank() || item.state !== EventItem.State.NONE) View.VISIBLE else View.INVISIBLE linearLayout.visibility = View.INVISIBLE - this.currentEvent = item if (item.state !== EventItem.State.NONE) { tvNameReviewer.text = context.getNameEmail() @@ -84,6 +78,8 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen ivReject.setImageDrawable(context.getImage(R.drawable.ic_reject_event_gray)) ivReject.setBackgroundColor(context.getBackgroundColor(R.color.transparent)) + val confirmCount = if (item.event.confirmedCount > 0) item.event.confirmedCount else 1 + tvAgreeValue.text = confirmCount.toString() } EventItem.State.REJECT -> { circleImageView.visibility = View.INVISIBLE @@ -94,6 +90,8 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen ivAgree.setImageDrawable(context.getImage(R.drawable.ic_confirm_event_gray)) ivAgree.setBackgroundColor(context.getBackgroundColor(R.color.transparent)) + val rejectedCount = if (item.event.rejectedCount > 0) item.event.rejectedCount else 1 + tvRejectValue.text = rejectedCount.toString() } EventItem.State.NONE -> { circleImageView.visibility = View.VISIBLE From c2889ddd520592216f9092acb70f5150d0d3f977 Mon Sep 17 00:00:00 2001 From: Anuphap Suwannamas Date: Sun, 9 Feb 2020 14:25:10 +0700 Subject: [PATCH 3/4] CA-1983 - Fix count review sometime it not correct and update text reviewer --- .../java/org/rfcx/ranger/entity/event/EventResponse.kt | 1 - .../ranger/view/alert/AlertBottomDialogFragment.kt | 10 +++++++--- .../rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt | 4 ++-- .../alertDetailByType/ItemAlertDetailByTypeAdapter.kt | 6 ++++-- .../ranger/view/status/adapter/viewholder/AlertView.kt | 6 ++++-- 5 files changed, 17 insertions(+), 10 deletions(-) diff --git a/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt b/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt index 192ba9dff..e32a1735c 100644 --- a/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt +++ b/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt @@ -83,7 +83,6 @@ data class EventResponse( } if (review != null) { event.reviewCreated = review.created -// event.reviewConfirmed = review.confirmed } reviewer?.let { diff --git a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt index 9cc48701f..77ebff340 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogFragment.kt @@ -126,11 +126,13 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { timeTextView.text = " ${context?.let { it1 -> it.beginsAt.toTimeSinceStringAlternativeTimeAgo(it1) }}" reviewedTextView.text = context?.getString(if (it.firstNameReviewer.isNotBlank()) R.string.last_reviewed_by else R.string.not_have_review) ?: "" + nameReviewerTextView.text = if (it.firstNameReviewer.isNotBlank()) { - it.firstNameReviewer + it.firstNameReviewer.capitalize() } else { - if (state != "NONE" && context != null) context.getNameEmail() else "" + if (state != "NONE" && context != null) context.getNameEmail().capitalize() else "" } + nameReviewerTextView.visibility = if (it.firstNameReviewer.isNotBlank()) View.VISIBLE else View.INVISIBLE linearLayout.visibility = View.INVISIBLE agreeTextView.text = it.confirmedCount.toString() @@ -291,6 +293,7 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { }) } + @SuppressLint("DefaultLocale") private fun showCountReviewer(event: Event, reviewConfirm: String) { nameReviewerTextView.visibility = View.VISIBLE @@ -299,7 +302,8 @@ class AlertBottomDialogFragment : BaseBottomSheetDialogFragment() { event.firstNameReviewer } else { context.getNameEmail() - } + }.capitalize() + agreeTextView.text = event.confirmedCount.toString() rejectTextView.text = event.rejectedCount.toString() diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt index ffd986fb4..5d81e51c7 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt @@ -95,9 +95,9 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter, val listen private val ivReject = itemView.rejectImageView private val linearLayout = itemView.linearLayout + @SuppressLint("DefaultLocale") fun bind(item: EventItem) { eventsInEventsTextView.text = item.event.beginsAt.toTimeSinceStringAlternativeTimeAgo(itemView.context) item.event.value.toEventIcon().let { iconAlert.setImageResource(it) } @@ -62,9 +64,9 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen linearLayout.visibility = View.INVISIBLE if (item.state !== EventItem.State.NONE) { - tvNameReviewer.text = context.getNameEmail() + tvNameReviewer.text = context.getNameEmail().capitalize() } else if (item.event.firstNameReviewer.isNotBlank()) { - tvNameReviewer.text = item.event.firstNameReviewer + tvNameReviewer.text = item.event.firstNameReviewer.capitalize() } when (item.state) { diff --git a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt index 3dd477957..0982c5232 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt @@ -1,5 +1,6 @@ package org.rfcx.ranger.view.status.adapter.viewholder +import android.annotation.SuppressLint import android.content.Context import android.graphics.drawable.Drawable import android.view.View @@ -13,6 +14,7 @@ import org.rfcx.ranger.view.status.StatusFragmentListener import org.rfcx.ranger.view.status.adapter.StatusAdapter class AlertView(private val binding: ItemStatusAlertBinding, private val listener: StatusFragmentListener?) : RecyclerView.ViewHolder(binding.root) { + @SuppressLint("DefaultLocale") fun bind(item: StatusAdapter.AlertItem) { binding.alertItem = item binding.context = binding.root.context @@ -26,9 +28,9 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene } if (item.state !== StatusAdapter.AlertItem.State.NONE) { - binding.nameReviewerTextView.text = binding.root.context.getNameEmail() + binding.nameReviewerTextView.text = binding.root.context.getNameEmail().capitalize() } else if (item.event.firstNameReviewer.isNotBlank()) { - binding.nameReviewerTextView.text = item.event.firstNameReviewer + binding.nameReviewerTextView.text = item.event.firstNameReviewer.capitalize() } when (item.state) { From f025cc45d6fde2987040b9e0d5b7e131a1017ff5 Mon Sep 17 00:00:00 2001 From: Anuphap Suwannamas Date: Mon, 10 Feb 2020 23:59:07 +0700 Subject: [PATCH 4/4] CA-1983 - Updated displaying reviewer name --- .../rfcx/ranger/entity/event/EventResponse.kt | 2 +- .../java/org/rfcx/ranger/entity/event/Review.kt | 3 --- .../main/java/org/rfcx/ranger/util/EventExt.kt | 16 ++++++++++++++++ .../view/alert/AlertBottomDialogViewModel.kt | 7 ++++++- .../ranger/view/alerts/adapter/AlertsAdapter.kt | 17 ++++------------- .../ItemAlertDetailByTypeAdapter.kt | 7 +------ .../ranger/view/status/adapter/StatusAdapter.kt | 10 ++++++++++ .../view/status/adapter/viewholder/AlertView.kt | 12 ------------ app/src/main/res/layout/item_status_alert.xml | 2 ++ 9 files changed, 40 insertions(+), 36 deletions(-) diff --git a/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt b/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt index e32a1735c..34a8e1105 100644 --- a/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt +++ b/app/src/main/java/org/rfcx/ranger/entity/event/EventResponse.kt @@ -86,7 +86,7 @@ data class EventResponse( } reviewer?.let { - event.firstNameReviewer = it.firstName ?: it.email.split("@")[0] + event.firstNameReviewer = it.email.split("@")[0] //TODO: UPDATE LATER - WAITING API SUPPORT FIRST NAME event.reviewConfirmed = it.confirmed } diff --git a/app/src/main/java/org/rfcx/ranger/entity/event/Review.kt b/app/src/main/java/org/rfcx/ranger/entity/event/Review.kt index fdd0d9eab..8f554aad2 100644 --- a/app/src/main/java/org/rfcx/ranger/entity/event/Review.kt +++ b/app/src/main/java/org/rfcx/ranger/entity/event/Review.kt @@ -15,11 +15,8 @@ open class Review { open class Reviewer { @SerializedName("firstname") var firstName: String? = "" - @SerializedName("lastname") var lastName: String? = "" - var email: String = "" - var confirmed: Boolean? = null } \ No newline at end of file diff --git a/app/src/main/java/org/rfcx/ranger/util/EventExt.kt b/app/src/main/java/org/rfcx/ranger/util/EventExt.kt index 46989de1d..80300d261 100644 --- a/app/src/main/java/org/rfcx/ranger/util/EventExt.kt +++ b/app/src/main/java/org/rfcx/ranger/util/EventExt.kt @@ -1,5 +1,6 @@ package org.rfcx.ranger.util +import android.annotation.SuppressLint import android.content.Context import org.rfcx.ranger.R import org.rfcx.ranger.adapter.entity.BaseItem @@ -64,6 +65,21 @@ fun Event.toEventItem(eventDb: EventDb): EventItem { data class EventItem(var event: Event, var state: State = State.NONE) : BaseItem { + @SuppressLint("DefaultLocale") + fun getReviewerName(context: Context):String { + return if (state != State.NONE) { + if (event.firstNameReviewer.isNotBlank()) { + event.firstNameReviewer + } else { + context.getNameEmail() + }.capitalize() + } else { + event.firstNameReviewer.capitalize() + } + } + + + enum class State { CONFIRM, REJECT, NONE } diff --git a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt index d00a0e76d..2668d0ec5 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alert/AlertBottomDialogViewModel.kt @@ -27,6 +27,7 @@ import org.rfcx.ranger.entity.event.EventReview import org.rfcx.ranger.entity.event.ReviewEventFactory import org.rfcx.ranger.service.ReviewEventSyncWorker import org.rfcx.ranger.util.NetworkNotConnection +import org.rfcx.ranger.util.getNameEmail import org.rfcx.ranger.util.isNetworkAvailable import java.io.File @@ -231,7 +232,11 @@ class AlertBottomDialogViewModel(private val context: Context, // save to review unsent eventDb.save(EventReview(requests.eventGuID, requests.reviewConfirm, EventReview.UNSENT)) - _reviewEvent.value = Result.Success(Pair(eventResult!!, requests)) + val event = eventResult!!.apply { + it.firstNameReviewer = context.getNameEmail() // update reviewer on offline + } + eventDb.saveEvent(event) + _reviewEvent.value = Result.Success(Pair(event, requests)) _eventState.value = EventState.REVIEWED // invoke state to review } diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt index 5d81e51c7..1ee8a8a46 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/adapter/AlertsAdapter.kt @@ -1,13 +1,9 @@ package org.rfcx.ranger.view.alerts.adapter import android.annotation.SuppressLint -import android.content.Context -import android.graphics.drawable.Drawable import android.view.LayoutInflater import android.view.View import android.view.ViewGroup -import androidx.appcompat.widget.AppCompatImageView -import androidx.core.content.ContextCompat import androidx.recyclerview.widget.DiffUtil import androidx.recyclerview.widget.ListAdapter import androidx.recyclerview.widget.RecyclerView @@ -92,13 +88,8 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter { @@ -111,7 +102,7 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter 0) item.event.confirmedCount else 1 + val confirmCount = if (item.event.confirmedCount > 0) item.event.confirmedCount else 1 tvAgreeValue.text = confirmCount.toString() } EventItem.State.REJECT -> { @@ -124,7 +115,7 @@ class AlertsAdapter(val listener: AlertClickListener) : ListAdapter 0) item.event.rejectedCount else 1 + val rejectedCount = if (item.event.rejectedCount > 0) item.event.rejectedCount else 1 tvRejectValue.text = rejectedCount.toString() } EventItem.State.NONE -> { diff --git a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt index 9008528d8..c552fbc55 100644 --- a/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/alerts/guardianListDetail/alertDetailByType/ItemAlertDetailByTypeAdapter.kt @@ -60,15 +60,10 @@ class ItemAlertDetailByTypeAdapter(var items: MutableList, val listen tvAgreeValue.text = item.event.confirmedCount.toString() tvRejectValue.text = item.event.rejectedCount.toString() tvReviewed.text = context.getString(if (item.event.firstNameReviewer.isNotBlank() || item.state !== EventItem.State.NONE) R.string.last_reviewed_by else R.string.not_have_review) + tvNameReviewer.text = item.getReviewerName(context) tvNameReviewer.visibility = if (item.event.firstNameReviewer.isNotBlank() || item.state !== EventItem.State.NONE) View.VISIBLE else View.INVISIBLE linearLayout.visibility = View.INVISIBLE - if (item.state !== EventItem.State.NONE) { - tvNameReviewer.text = context.getNameEmail().capitalize() - } else if (item.event.firstNameReviewer.isNotBlank()) { - tvNameReviewer.text = item.event.firstNameReviewer.capitalize() - } - when (item.state) { EventItem.State.CONFIRM -> { circleImageView.visibility = View.INVISIBLE diff --git a/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt b/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt index 98e9df1a9..631d5e246 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/adapter/StatusAdapter.kt @@ -396,6 +396,16 @@ class StatusAdapter(private val statusTitle: String?, private val alertTitle: St override fun getId(): Int = -3 fun getGuardianShortname(): String = event.guardianName + @SuppressLint("DefaultLocale") + fun getReviewerName(context: Context): String = if (state != State.NONE) { + if (event.firstNameReviewer.isNotBlank()) { + event.firstNameReviewer + } else { + context.getNameEmail() + }.capitalize() + } else { + event.firstNameReviewer.capitalize() + } fun getImage(): Int = event.value.toEventIcon() fun getTime(context: Context): String = " ${event.beginsAt.toTimeSinceStringAlternativeTimeAgo(context)}" fun getReviewed(context: Context): String = context.getString(if (event.firstNameReviewer.isNotBlank() || state !== State.NONE) R.string.last_reviewed_by else R.string.not_have_review) diff --git a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt index 0982c5232..1b40dfc10 100644 --- a/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt +++ b/app/src/main/java/org/rfcx/ranger/view/status/adapter/viewholder/AlertView.kt @@ -9,7 +9,6 @@ import androidx.recyclerview.widget.RecyclerView import org.rfcx.ranger.R import org.rfcx.ranger.databinding.ItemStatusAlertBinding import org.rfcx.ranger.util.EventItem -import org.rfcx.ranger.util.getNameEmail import org.rfcx.ranger.view.status.StatusFragmentListener import org.rfcx.ranger.view.status.adapter.StatusAdapter @@ -21,17 +20,6 @@ class AlertView(private val binding: ItemStatusAlertBinding, private val listene binding.reviewedTextView.visibility = View.VISIBLE binding.confirmCount = item.event.confirmedCount.toString() binding.rejectCount = item.event.rejectedCount.toString() - if (item.event.firstNameReviewer.isNotBlank() || item.state !== StatusAdapter.AlertItem.State.NONE) { - binding.nameReviewerTextView.visibility = View.VISIBLE - } else { - binding.nameReviewerTextView.visibility = View.INVISIBLE - } - - if (item.state !== StatusAdapter.AlertItem.State.NONE) { - binding.nameReviewerTextView.text = binding.root.context.getNameEmail().capitalize() - } else if (item.event.firstNameReviewer.isNotBlank()) { - binding.nameReviewerTextView.text = item.event.firstNameReviewer.capitalize() - } when (item.state) { StatusAdapter.AlertItem.State.CONFIRM -> { diff --git a/app/src/main/res/layout/item_status_alert.xml b/app/src/main/res/layout/item_status_alert.xml index b92a5be8f..84216a736 100644 --- a/app/src/main/res/layout/item_status_alert.xml +++ b/app/src/main/res/layout/item_status_alert.xml @@ -124,6 +124,8 @@ android:gravity="center_vertical" android:maxLines="1" android:textStyle="bold" + android:text="@{alertItem.getReviewerName(context)}" + android:visibility="@{alertItem.event.firstNameReviewer.length() > 0 ? View.VISIBLE : View.INVISIBLE}" app:layout_constraintEnd_toStartOf="@+id/linearLayout" app:layout_constraintStart_toEndOf="@+id/reviewedTextView" app:layout_constraintTop_toBottomOf="@+id/alertTitleLayout"