Skip to content

Commit 092cf4e

Browse files
committed
Merge branch 'testing_v4'
# Conflicts: # build.gradle
2 parents 8a464a8 + 5dcf63b commit 092cf4e

4 files changed

Lines changed: 78 additions & 70 deletions

File tree

build.gradle

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ plugins {
66

77
allprojects {
88
project.group = "ru.usedesk"
9-
project.version = "4.2.2"
9+
project.version = "4.2.3"
1010
}
1111

1212
ext {
Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
package ru.usedesk.knowledgebase_gui.screen.compose.article
2+
3+
import android.content.Context
4+
import android.webkit.WebResourceResponse
5+
import android.webkit.WebSettings
6+
import android.webkit.WebView
7+
import android.webkit.WebViewClient
8+
import androidx.compose.ui.graphics.toArgb
9+
import okhttp3.Request
10+
import ru.usedesk.common_sdk.api.UsedeskOkHttpClientFactory
11+
import ru.usedesk.knowledgebase_gui.screen.UsedeskKnowledgeBaseTheme
12+
import java.net.URI
13+
14+
internal class ArticleWebView(
15+
context: Context,
16+
viewModel: ArticleViewModel,
17+
theme: UsedeskKnowledgeBaseTheme,
18+
onWebUrl: (String) -> Unit
19+
) : WebView(context) {
20+
init {
21+
isVerticalScrollBarEnabled = false
22+
settings.apply {
23+
setRenderPriority(WebSettings.RenderPriority.HIGH)
24+
cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
25+
domStorageEnabled = true
26+
}
27+
webViewClient = object : WebViewClient() {
28+
private val okHttp = UsedeskOkHttpClientFactory(context).createInstance()
29+
30+
override fun shouldOverrideUrlLoading(
31+
view: WebView,
32+
url: String
33+
): Boolean {
34+
onWebUrl(url)
35+
return true
36+
}
37+
38+
override fun onPageCommitVisible(view: WebView, url: String?) {
39+
super.onPageCommitVisible(view, url)
40+
41+
viewModel.articleShowed()
42+
}
43+
44+
override fun shouldInterceptRequest(
45+
view: WebView?,
46+
url: String?
47+
): WebResourceResponse? = url?.let {
48+
try {
49+
if (URI(it).scheme == "https") {
50+
val okHttpRequest = Request.Builder().url(it).build()
51+
val response = okHttp.newCall(okHttpRequest).execute()
52+
WebResourceResponse(
53+
"",
54+
"",
55+
response.body?.byteStream()
56+
)
57+
} else {
58+
null
59+
}
60+
} catch (e: Exception) {
61+
e.printStackTrace()
62+
null
63+
}
64+
}
65+
}
66+
setBackgroundColor(theme.colors.listItemBackground.toArgb())
67+
}
68+
}

knowledgebase-gui/src/main/java/ru/usedesk/knowledgebase_gui/screen/compose/article/ContentArticle.kt

Lines changed: 3 additions & 67 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,6 @@
11
package ru.usedesk.knowledgebase_gui.screen.compose.article
22

3-
import android.content.Context
43
import android.os.Build
5-
import android.webkit.WebResourceResponse
6-
import android.webkit.WebSettings
7-
import android.webkit.WebView
8-
import android.webkit.WebViewClient
94
import android.widget.LinearLayout
105
import androidx.compose.animation.AnimatedVisibility
116
import androidx.compose.animation.Crossfade
@@ -38,14 +33,11 @@ import androidx.compose.ui.Alignment
3833
import androidx.compose.ui.Modifier
3934
import androidx.compose.ui.draw.clip
4035
import androidx.compose.ui.graphics.Color
41-
import androidx.compose.ui.graphics.toArgb
4236
import androidx.compose.ui.platform.ComposeView
4337
import androidx.compose.ui.platform.LocalContext
4438
import androidx.compose.ui.res.painterResource
4539
import androidx.compose.ui.res.stringResource
4640
import androidx.compose.ui.viewinterop.AndroidView
47-
import okhttp3.Request
48-
import ru.usedesk.common_sdk.api.UsedeskOkHttpClientFactory
4941
import ru.usedesk.knowledgebase_gui._entity.ContentState
5042
import ru.usedesk.knowledgebase_gui._entity.LoadingState.Companion.ACCESS_DENIED
5143
import ru.usedesk.knowledgebase_gui._entity.RatingState
@@ -62,7 +54,6 @@ import ru.usedesk.knowledgebase_gui.compose.rememberViewModelStoreOwner
6254
import ru.usedesk.knowledgebase_gui.screen.RootViewModel
6355
import ru.usedesk.knowledgebase_gui.screen.UsedeskKnowledgeBaseTheme
6456
import ru.usedesk.knowledgebase_gui.screen.compose.article.ArticleViewModel.State
65-
import java.net.URI
6657

6758

6859
@Composable
@@ -130,62 +121,6 @@ internal fun ContentArticle(
130121
}
131122
}
132123

133-
private class ArticleWebView(
134-
context: Context,
135-
viewModel: ArticleViewModel,
136-
theme: UsedeskKnowledgeBaseTheme,
137-
onWebUrl: (String) -> Unit
138-
) : WebView(context) {
139-
init {
140-
isVerticalScrollBarEnabled = false
141-
settings.apply {
142-
setRenderPriority(WebSettings.RenderPriority.HIGH)
143-
cacheMode = WebSettings.LOAD_CACHE_ELSE_NETWORK
144-
domStorageEnabled = true
145-
}
146-
webViewClient = object : WebViewClient() {
147-
private val okHttp = UsedeskOkHttpClientFactory(context).createInstance()
148-
149-
override fun shouldOverrideUrlLoading(
150-
view: WebView,
151-
url: String
152-
): Boolean {
153-
onWebUrl(url)
154-
return true
155-
}
156-
157-
override fun onPageCommitVisible(view: WebView, url: String?) {
158-
super.onPageCommitVisible(view, url)
159-
160-
viewModel.articleShowed()
161-
}
162-
163-
override fun shouldInterceptRequest(
164-
view: WebView?,
165-
url: String?
166-
): WebResourceResponse? = url?.let {
167-
try {
168-
if (URI(it).scheme == "https") {
169-
val okHttpRequest = Request.Builder().url(it).build()
170-
val response = okHttp.newCall(okHttpRequest).execute()
171-
WebResourceResponse(
172-
"",
173-
"",
174-
response.body?.byteStream()
175-
)
176-
} else {
177-
null
178-
}
179-
} catch (e: Exception) {
180-
e.printStackTrace()
181-
null
182-
}
183-
}
184-
}
185-
setBackgroundColor(theme.colors.listItemBackground.toArgb())
186-
}
187-
}
188-
189124
@Composable
190125
private fun ArticleBlock(
191126
theme: UsedeskKnowledgeBaseTheme,
@@ -246,15 +181,16 @@ private fun ArticleBlock(
246181
}
247182
LaunchedEffect(state.contentState) {
248183
if (state.contentState is ContentState.Loaded) {
184+
val url = state.contentState.content.text
249185
when {
250186
Build.VERSION.SDK_INT <= Build.VERSION_CODES.N_MR1 -> webView.loadData(
251-
state.contentState.content.text,
187+
url,
252188
"text/html; charset=utf-8",
253189
"UTF-8"
254190
)
255191

256192
else -> webView.loadData(
257-
state.contentState.content.text,
193+
url,
258194
"text/html",
259195
null
260196
)

knowledgebase-sdk/src/main/java/ru/usedesk/knowledgebase_sdk/data/repository/api/KbRepository.kt

Lines changed: 6 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,3 @@
1-
21
package ru.usedesk.knowledgebase_sdk.data.repository.api
32

43
import com.google.gson.Gson
@@ -155,7 +154,7 @@ internal class KbRepository @Inject constructor(
155154
title = title ?: "",
156155
categoryId = categoryId?.toLongOrNull()!!,
157156
viewsCount = views ?: 0,
158-
text = text ?: "",
157+
text = ARTICLE_STYLE + (text ?: ""),
159158
public = public == 1
160159
)
161160
}
@@ -236,4 +235,9 @@ internal class KbRepository @Inject constructor(
236235
else -> SendReviewResponse.Error(response?.code)
237236
}
238237
}
238+
239+
companion object {
240+
private const val ARTICLE_STYLE =
241+
"<style>img{display: inline;height: auto;max-width: 100%;}</style>"
242+
}
239243
}

0 commit comments

Comments
 (0)