Skip to content

Commit 91e45a8

Browse files
alperozturk96backportbot[bot]
authored andcommitted
simplify
Signed-off-by: alperozturk96 <alper_ozturk@proton.me>
1 parent e6fb76d commit 91e45a8

1 file changed

Lines changed: 48 additions & 32 deletions

File tree

app/src/main/java/com/nextcloud/ui/fileactions/ClientIntegration.kt

Lines changed: 48 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,15 @@ package com.nextcloud.ui.fileactions
99

1010
import android.content.Context
1111
import android.content.Intent
12+
import android.graphics.Canvas
1213
import android.graphics.drawable.Drawable
14+
import android.graphics.drawable.PictureDrawable
1315
import android.os.Bundle
1416
import android.view.LayoutInflater
1517
import android.view.View
1618
import androidx.appcompat.content.res.AppCompatResources
19+
import androidx.core.graphics.createBitmap
20+
import androidx.core.graphics.drawable.toDrawable
1721
import androidx.core.net.toUri
1822
import androidx.lifecycle.lifecycleScope
1923
import com.google.gson.Gson
@@ -78,47 +82,59 @@ class ClientIntegration(
7882
}
7983
text.text = endpoint.name
8084

81-
val px = DisplayUtils.convertDpToPixel(
82-
context.resources.getDimension(R.dimen.iconized_single_line_item_icon_size),
83-
context
84-
)
85-
86-
if (endpoint.icon != null) {
87-
sheet.lifecycleScope.launch(Dispatchers.IO) {
88-
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
89-
.getNextcloudClientFor(user.toOwnCloudAccount(), context)
90-
91-
val drawable = GlideHelper
92-
.getDrawable(context, client, client.baseUri.toString() + endpoint.icon)?.mutate()
93-
94-
withContext(Dispatchers.Main) {
95-
val tintedDrawable = drawable?.let { viewThemeUtils.platform.tintDrawable(context, it) }
96-
if (tintedDrawable != null) {
97-
icon.setImageDrawable(tintedDrawable)
98-
} else {
99-
getDefaultTintedIconDrawable(viewThemeUtils)?.let {
100-
icon.setImageDrawable(it)
101-
}
102-
}
103-
}
85+
sheet.lifecycleScope.launch(Dispatchers.IO) {
86+
val client = OwnCloudClientManagerFactory.getDefaultSingleton()
87+
.getNextcloudClientFor(user.toOwnCloudAccount(), context)
88+
89+
val rawDrawable = if (endpoint.icon != null) {
90+
GlideHelper.getDrawable(context, client, client.baseUri.toString() + endpoint.icon)?.mutate()
91+
} else {
92+
null
10493
}
105-
} else {
106-
getDefaultTintedIconDrawable(viewThemeUtils)?.let {
107-
icon.setImageDrawable(it)
94+
95+
val tintableDrawable = prepareDrawableForTinting(rawDrawable) ?: getDefaultIconDrawable()
96+
97+
withContext(Dispatchers.Main) {
98+
tintableDrawable?.let {
99+
val tinted = viewThemeUtils.platform.tintDrawable(context, it)
100+
icon.setImageDrawable(tinted)
101+
}
108102
}
109103
}
110104
}
105+
111106
return itemBinding.root
112107
}
113108

114-
private fun getDefaultTintedIconDrawable(viewThemeUtils: ViewThemeUtils): Drawable? {
115-
val drawable = AppCompatResources.getDrawable(context, R.drawable.ic_activity) ?: return null
116-
return viewThemeUtils.platform.tintDrawable(
117-
context,
118-
drawable
119-
)
109+
private fun prepareDrawableForTinting(drawable: Drawable?): Drawable? {
110+
if (drawable == null) {
111+
return null
112+
}
113+
114+
if (drawable is PictureDrawable) {
115+
val defaultSize = DisplayUtils.convertDpToPixel(
116+
context.resources.getDimension(R.dimen.iconized_single_line_item_icon_size),
117+
context
118+
).toInt().coerceAtLeast(1)
119+
120+
val width = if (drawable.intrinsicWidth > 0) drawable.intrinsicWidth else defaultSize
121+
val height = if (drawable.intrinsicHeight > 0) drawable.intrinsicHeight else defaultSize
122+
123+
val safeWidth = width.coerceAtLeast(1)
124+
val safeHeight = height.coerceAtLeast(1)
125+
126+
val bitmap = createBitmap(safeWidth, safeHeight)
127+
val canvas = Canvas(bitmap)
128+
canvas.drawPicture(drawable.picture)
129+
130+
return bitmap.toDrawable(context.resources)
131+
}
132+
133+
return drawable
120134
}
121135

136+
private fun getDefaultIconDrawable(): Drawable? = AppCompatResources.getDrawable(context, R.drawable.ic_activity)
137+
122138
private fun requestClientIntegration(endpoint: Endpoint, fileId: String, filePath: String) {
123139
sheet.lifecycleScope.launch(Dispatchers.IO) {
124140
val client = OwnCloudClientManagerFactory.getDefaultSingleton()

0 commit comments

Comments
 (0)