Skip to content

Commit

Permalink
Update dialog buttons localizations
Browse files Browse the repository at this point in the history
MOB-3463
  • Loading branch information
AH-MOC committed Aug 13, 2024
1 parent 7a71b06 commit 4a59663
Show file tree
Hide file tree
Showing 24 changed files with 217 additions and 161 deletions.
12 changes: 10 additions & 2 deletions widgetssdk/src/main/java/com/glia/widgets/call/CallController.kt
Original file line number Diff line number Diff line change
Expand Up @@ -43,7 +43,9 @@ import com.glia.widgets.engagement.domain.ScreenSharingUseCase
import com.glia.widgets.engagement.domain.ToggleVisitorAudioMediaStateUseCase
import com.glia.widgets.engagement.domain.ToggleVisitorVideoMediaStateUseCase
import com.glia.widgets.engagement.domain.VisitorMediaUseCase
import com.glia.widgets.helper.Logger
import com.glia.widgets.helper.Logger.d
import com.glia.widgets.helper.TAG
import com.glia.widgets.helper.TimeCounter
import com.glia.widgets.helper.TimeCounter.FormattedTimerStatusListener
import com.glia.widgets.helper.TimeCounter.RawTimerStatusListener
Expand All @@ -53,6 +55,7 @@ import com.glia.widgets.view.MessagesNotSeenHandler
import com.glia.widgets.view.MessagesNotSeenHandler.MessagesNotSeenHandlerListener
import com.glia.widgets.view.MinimizeHandler
import com.glia.widgets.view.floatingvisitorvideoview.FloatingVisitorVideoContract
import com.glia.widgets.webbrowser.domain.GetUrlFromLinkUseCase
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.disposables.CompositeDisposable
import java.util.Optional
Expand Down Expand Up @@ -92,7 +95,8 @@ internal class CallController(
private val isQueueingOrEngagementUseCase: IsQueueingOrEngagementUseCase,
private val enqueueForEngagementUseCase: EnqueueForEngagementUseCase,
private val decideOnQueueingUseCase: DecideOnQueueingUseCase,
private val screenSharingUseCase: ScreenSharingUseCase
private val screenSharingUseCase: ScreenSharingUseCase,
private val getUrlFromLinkUseCase: GetUrlFromLinkUseCase
) : CallContract.Controller {
private val disposable = CompositeDisposable()
private val mediaUpgradeDisposable = CompositeDisposable()
Expand Down Expand Up @@ -257,7 +261,11 @@ internal class CallController(

override fun onLinkClicked(link: Link) {
d(TAG, "onLinkClicked")
view?.navigateToWebBrowserActivity(link.title, link.url)
getUrlFromLinkUseCase(link)?.let {
view?.navigateToWebBrowserActivity(link.title, it)
} ?: run {
Logger.e(TAG, "The URL is missing after the confirmation dialog link is clicked")
}
}

override fun onLiveObservationDialogAllowed() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,9 +9,12 @@ import com.glia.widgets.core.dialog.model.Link
import com.glia.widgets.core.engagement.domain.ConfirmationDialogUseCase
import com.glia.widgets.engagement.domain.EngagementRequestUseCase
import com.glia.widgets.engagement.domain.EngagementStateUseCase
import com.glia.widgets.helper.Logger
import com.glia.widgets.helper.OneTimeEvent
import com.glia.widgets.helper.TAG
import com.glia.widgets.helper.asOneTimeStateFlowable
import com.glia.widgets.helper.unSafeSubscribe
import com.glia.widgets.webbrowser.domain.GetUrlFromLinkUseCase
import io.reactivex.rxjava3.core.Flowable
import io.reactivex.rxjava3.processors.PublishProcessor
import com.glia.widgets.engagement.State as EngagementState
Expand Down Expand Up @@ -46,7 +49,8 @@ internal class CallVisualizerController(
private val confirmationDialogUseCase: ConfirmationDialogUseCase,
private val engagementRequestUseCase: EngagementRequestUseCase,
private val engagementStateUseCase: EngagementStateUseCase,
private val confirmationDialogLinksUseCase: ConfirmationDialogLinksUseCase
private val confirmationDialogLinksUseCase: ConfirmationDialogLinksUseCase,
private val getUrlFromLinkUseCase: GetUrlFromLinkUseCase
) : CallVisualizerContract.Controller {

private val _state: PublishProcessor<CallVisualizerContract.State> = PublishProcessor.create()
Expand Down Expand Up @@ -100,7 +104,11 @@ internal class CallVisualizerController(

override fun onLinkClicked(link: Link) {
dialogController.dismissCurrentDialog()
_state.onNext(CallVisualizerContract.State.OpenWebBrowserScreen(link.title, link.url))
getUrlFromLinkUseCase(link)?.let {
_state.onNext(CallVisualizerContract.State.OpenWebBrowserScreen(link.title, it))
} ?: run {
Logger.e(TAG, "The URL is missing after the confirmation dialog link is clicked")
}
}

override fun onEngagementConfirmationDialogAllowed() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,7 @@ import com.glia.widgets.helper.isValid
import com.glia.widgets.helper.unSafeSubscribe
import com.glia.widgets.view.MessagesNotSeenHandler
import com.glia.widgets.view.MinimizeHandler
import com.glia.widgets.webbrowser.domain.GetUrlFromLinkUseCase
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.disposables.CompositeDisposable
import io.reactivex.rxjava3.schedulers.Schedulers
Expand Down Expand Up @@ -130,7 +131,8 @@ internal class ChatController(
private val withCameraPermissionUseCase: WithCameraPermissionUseCase,
private val withReadWritePermissionsUseCase: WithReadWritePermissionsUseCase,
private val requestNotificationPermissionIfPushNotificationsSetUpUseCase: RequestNotificationPermissionIfPushNotificationsSetUpUseCase,
private val releaseResourcesUseCase: ReleaseResourcesUseCase
private val releaseResourcesUseCase: ReleaseResourcesUseCase,
private val getUrlFromLinkUseCase: GetUrlFromLinkUseCase
) : ChatContract.Controller {
private var backClickedListener: ChatView.OnBackClickedListener? = null
private var view: ChatContract.View? = null
Expand Down Expand Up @@ -271,7 +273,11 @@ internal class ChatController(

override fun onLinkClicked(link: Link) {
Logger.d(TAG, "onLinkClicked")
view?.navigateToWebBrowserActivity(link.title, link.url)
getUrlFromLinkUseCase(link)?.let {
view?.navigateToWebBrowserActivity(link.title, it)
} ?: run {
Logger.e(TAG, "The URL is missing after the confirmation dialog link is clicked")
}
}

override fun onLiveObservationDialogAllowed() {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,32 +1,20 @@
package com.glia.widgets.core.dialog.domain

import androidx.annotation.VisibleForTesting
import com.glia.widgets.locale.LocaleString
import com.glia.widgets.R
import com.glia.widgets.core.dialog.model.Link
import com.glia.widgets.core.dialog.model.ConfirmationDialogLinks
import com.glia.widgets.locale.LocaleProvider

internal class ConfirmationDialogLinksUseCase(
private val localeProvider: LocaleProvider
) {
internal class ConfirmationDialogLinksUseCase {

operator fun invoke(): ConfirmationDialogLinks {
val link1Title = LocaleString(R.string.engagement_confirm_link1_text)
val link1Url = localeProvider.getString(R.string.engagement_confirm_link1_url)
val link1Url = LocaleString(R.string.engagement_confirm_link1_url)
val link2Title = LocaleString(R.string.engagement_confirm_link2_text)
val link2Url = localeProvider.getString(R.string.engagement_confirm_link2_url)
val link2Url = LocaleString(R.string.engagement_confirm_link2_url)
return ConfirmationDialogLinks(
link1 = makeLink(link1Title, link1Url),
link2 = makeLink(link2Title, link2Url)
link1 = Link(link1Title, link1Url),
link2 = Link(link2Title, link2Url)
)
}

@VisibleForTesting
fun makeLink(title: LocaleString, url: String?): Link? {
if (url.isNullOrEmpty()) {
return null
}
return Link(title, url)
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,11 @@ package com.glia.widgets.core.dialog.model
import com.glia.widgets.locale.LocaleString

internal data class ConfirmationDialogLinks(
val link1: Link? = null,
val link2: Link? = null
val link1: Link,
val link2: Link
)

internal data class Link(
val title: LocaleString,
val url: String
val url: LocaleString
)
Original file line number Diff line number Diff line change
Expand Up @@ -136,7 +136,8 @@ public ChatContract.Controller getChatController() {
useCaseFactory.getWithCameraPermissionUseCase(),
useCaseFactory.getWithReadWritePermissionsUseCase(),
useCaseFactory.getRequestNotificationPermissionIfPushNotificationsSetUpUseCase(),
useCaseFactory.getReleaseResourcesUseCase(getDialogController())
useCaseFactory.getReleaseResourcesUseCase(getDialogController()),
useCaseFactory.createGetUrlFromLinkUseCase()
);
}

Expand Down Expand Up @@ -175,7 +176,8 @@ public CallContract.Controller getCallController() {
useCaseFactory.getIsQueueingOrEngagementUseCase(),
useCaseFactory.getQueueForEngagementUseCase(),
useCaseFactory.getDecideOnQueueingUseCase(),
useCaseFactory.getScreenSharingUseCase()
useCaseFactory.getScreenSharingUseCase(),
useCaseFactory.createGetUrlFromLinkUseCase()
);
}

Expand Down Expand Up @@ -278,7 +280,8 @@ public CallVisualizerContract.Controller getCallVisualizerController() {
useCaseFactory.createConfirmationDialogUseCase(),
useCaseFactory.getEngagementRequestUseCase(),
useCaseFactory.getEngagementStateUseCase(),
useCaseFactory.createConfirmationDialogLinksUseCase()
useCaseFactory.createConfirmationDialogLinksUseCase(),
useCaseFactory.createGetUrlFromLinkUseCase()
);
}
return callVisualizerController;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -187,6 +187,8 @@
import com.glia.widgets.push.notifications.IsPushNotificationsSetUpUseCase;
import com.glia.widgets.push.notifications.IsPushNotificationsSetUpUseCaseImpl;
import com.glia.widgets.view.snackbar.LiveObservationPopupUseCase;
import com.glia.widgets.webbrowser.domain.GetUrlFromLinkUseCase;
import com.glia.widgets.webbrowser.domain.GetUrlFromLinkUseCaseImpl;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;

Expand Down Expand Up @@ -849,7 +851,12 @@ public ConfirmationDialogUseCase createConfirmationDialogUseCase() {

@NonNull
public ConfirmationDialogLinksUseCase createConfirmationDialogLinksUseCase() {
return new ConfirmationDialogLinksUseCase(localeProvider);
return new ConfirmationDialogLinksUseCase();
}

@NonNull
public GetUrlFromLinkUseCase createGetUrlFromLinkUseCase() {
return new GetUrlFromLinkUseCaseImpl(localeProvider);
}

public LiveObservationPopupUseCase createLiveObservationPopupUseCase() {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@ import com.squareup.picasso.Callback
import com.squareup.picasso.Picasso
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.schedulers.Schedulers

internal fun View.getColorCompat(@ColorRes resId: Int) = ContextCompat.getColor(context, resId)
internal fun View.getColorStateListCompat(@ColorRes resId: Int) =
Expand Down Expand Up @@ -159,13 +160,14 @@ internal fun TextView.setLocaleText(@StringRes stringKey: Int, vararg values: St
}
}

internal fun TextView.setText(locale: LocaleString?) {
internal fun TextView.setText(locale: LocaleString?, listener: ((String) -> Unit)? = null) {
if (locale == null) {
text = ""
return
}
registerLocaleListener(locale.stringKey, *locale.values.toTypedArray()) { upToDateTranslation ->
text = upToDateTranslation
listener?.invoke(upToDateTranslation)
}
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -10,11 +10,11 @@ import com.glia.widgets.R
import com.glia.widgets.StringProvider
import com.glia.widgets.helper.IResourceProvider
import com.glia.widgets.helper.Logger
import com.glia.widgets.helper.ResourceProvider
import com.glia.widgets.helper.TAG
import io.reactivex.rxjava3.android.schedulers.AndroidSchedulers
import io.reactivex.rxjava3.core.Observable
import io.reactivex.rxjava3.core.Observer
import io.reactivex.rxjava3.schedulers.Schedulers
import io.reactivex.rxjava3.subjects.PublishSubject
import kotlinx.parcelize.Parcelize
import java.lang.Exception
Expand Down Expand Up @@ -47,7 +47,8 @@ internal open class LocaleProvider @JvmOverloads constructor(
init {
val localeSubject = PublishSubject.create<String>()
localeObservable = localeSubject
.subscribeOn(AndroidSchedulers.mainThread())
.subscribeOn(Schedulers.computation())
.observeOn(AndroidSchedulers.mainThread())
.share()
localeEmitter = localeSubject
}
Expand Down Expand Up @@ -92,6 +93,10 @@ internal open class LocaleProvider @JvmOverloads constructor(
}
}

fun getString(localeString: LocaleString): String {
return getString(localeString.stringKey, localeString.values)
}

@OpenForTesting
open fun getStringInternal(stringKey: Int, values: List<StringKeyPair> = emptyList()): String {
val key = resourceProvider.getResourceKey(stringKey)
Expand Down
4 changes: 2 additions & 2 deletions widgetssdk/src/main/java/com/glia/widgets/view/Dialogs.kt
Original file line number Diff line number Diff line change
Expand Up @@ -153,8 +153,8 @@ internal object Dialogs {
val payload = DialogPayload.Confirmation(
title = LocaleString(R.string.engagement_confirm_title),
message = LocaleString(R.string.engagement_confirm_message),
link1Text = links.link1?.title,
link2Text = links.link2?.title,
link1 = links.link1,
link2 = links.link2,
positiveButtonText = allow,
negativeButtonText = cancel,
poweredByText = poweredByText,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.glia.widgets.view.dialog.base

import android.view.View
import androidx.annotation.DrawableRes
import com.glia.widgets.core.dialog.model.Link
import com.glia.widgets.locale.LocaleString

internal sealed interface DialogPayload {
Expand All @@ -25,10 +26,10 @@ internal sealed interface DialogPayload {
val poweredByText: LocaleString,
val positiveButtonClickListener: View.OnClickListener,
val negativeButtonClickListener: View.OnClickListener,
val link1Text: LocaleString? = null,
val link2Text: LocaleString? = null,
val link1ClickListener: View.OnClickListener? = null,
val link2ClickListener: View.OnClickListener? = null,
val link1: Link,
val link2: Link,
val link1ClickListener: View.OnClickListener,
val link2ClickListener: View.OnClickListener,
) : DialogPayload

data class ScreenSharing(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,10 @@ package com.glia.widgets.view.dialog.base
import android.graphics.Typeface
import android.view.View
import android.widget.TextView
import androidx.core.view.isVisible
import androidx.viewbinding.ViewBinding
import com.glia.widgets.core.dialog.model.Link
import com.glia.widgets.di.Dependencies
import com.glia.widgets.locale.LocaleString
import com.glia.widgets.helper.setText
import com.glia.widgets.view.unifiedui.applyButtonTheme
Expand Down Expand Up @@ -47,13 +50,25 @@ internal abstract class DialogViewInflater<T : DialogViewBinding<out ViewBinding
}
}

protected fun setupButton(btn: MaterialButton, text: LocaleString?, btnTheme: ButtonTheme?, typeface: Typeface?, onClickListener: View.OnClickListener?) {
protected fun setupButton(btn: MaterialButton, text: LocaleString, btnTheme: ButtonTheme?, typeface: Typeface?, onClickListener: View.OnClickListener) {
btn.apply {
if (text == null || onClickListener == null) {
this.visibility = View.GONE
return@apply
setText(text)
applyButtonTheme(btnTheme)
setupTypeface(this, typeface)
setOnClickListener(onClickListener)
}
}

protected fun setupButton(btn: MaterialButton, link: Link, btnTheme: ButtonTheme?, typeface: Typeface?, onClickListener: View.OnClickListener) {
btn.apply {
setText(link.title) { upToDateTitle ->
this.text = upToDateTitle

val localeManager = Dependencies.getLocaleProvider()
val upToDateUrl = localeManager.getString(link.url)

this.isVisible = upToDateTitle.isNotBlank() && upToDateUrl.isNotBlank()
}
this.setText(text)
applyButtonTheme(btnTheme)
setupTypeface(this, typeface)
setOnClickListener(onClickListener)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,14 +33,14 @@ internal open class DefaultConfirmationDialogViewInflater<T : DefaultConfirmatio
val theme = configuration.theme
setupButton(
binding.link1Button,
payload.link1Text,
payload.link1,
theme.linkButton,
configuration.properties.typeface,
payload.link1ClickListener
)
setupButton(
binding.link2Button,
payload.link2Text,
payload.link2,
theme.linkButton,
configuration.properties.typeface,
payload.link2ClickListener
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
package com.glia.widgets.webbrowser.domain

import com.glia.widgets.core.dialog.model.Link
import com.glia.widgets.locale.LocaleProvider

internal interface GetUrlFromLinkUseCase {
operator fun invoke(link: Link): String?
}

internal class GetUrlFromLinkUseCaseImpl(
private val localeProvider: LocaleProvider
) : GetUrlFromLinkUseCase {
override operator fun invoke(link: Link): String? {
val string = localeProvider.getString(link.url)
if (string.isBlank()) {
return null
}
return string
}
}
Loading

0 comments on commit 4a59663

Please sign in to comment.