Skip to content

Commit 0bdc677

Browse files
Load and show an feed,
Multiplatform logger, Updated libraries, Don't apply insets padding to the appbar in landscape mode, Show extension icons in the search Signed-off-by: MrBoom <[email protected]>
1 parent 8968a4c commit 0bdc677

File tree

35 files changed

+894
-208
lines changed

35 files changed

+894
-208
lines changed
Lines changed: 8 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,23 +1,21 @@
11
package com.mrboomdev.awery.ext.data
22

3+
import kotlinx.serialization.Contextual
34
import java.io.Serializable
45

6+
@kotlinx.serialization.Serializable
57
class CatalogFeed(
68
val managerId: String? = null,
79
val sourceId: String? = null,
810
val feedId: String? = null,
911
val title: String,
10-
val style: Style = Style.UNSPECIFIED,
12+
val style: Style = Style.ROW,
1113
val hideIfEmpty: Boolean = false,
12-
val filters: List<Setting>? = null
14+
val filters: List<@Contextual Setting>? = null
1315
): Serializable {
14-
class Loaded(
15-
val feed: CatalogFeed,
16-
val items: CatalogSearchResults<CatalogMedia>? = null,
17-
val throwable: Throwable? = null
18-
): Serializable
19-
20-
enum class Style {
21-
UNSPECIFIED, SLIDER, ROW, GRID
16+
sealed interface Style {
17+
data object SLIDER: Style
18+
data object ROW: Style
19+
data object COLUMN: Style
2220
}
2321
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,3 @@
11
package com.mrboomdev.awery.ext.util
22

3-
abstract class Image
3+
interface Image

gradle/libs.versions.toml

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ kotlin = "2.1.0"
66
lifecycle-viewmodel-compose = "2.8.7"
77
media3 = "1.5.1"
88
markwon = "4.6.2"
9-
room = "2.7.0-beta01"
10-
coil = "3.0.4"
9+
room = "2.7.0-rc01"
10+
coil = "3.1.0"
1111
okhttp = "5.0.0-alpha.14"
1212
voyager-navigator = "1.1.0-beta02"
1313

@@ -49,8 +49,8 @@ coil-network-okhttp = { module = "io.coil-kt.coil3:coil-network-okhttp", version
4949
compose-bom = { module = "androidx.compose:compose-bom", version = "2025.02.00" }
5050
compose-runtime = { module = "androidx.compose.runtime:runtime" }
5151
compose-foundation = { module = "androidx.compose.foundation:foundation" }
52-
compose-activity = { module = "androidx.activity:activity-compose", version = "1.10.0" }
53-
compose-material3 = { module = "androidx.compose.material3:material3", version = "1.4.0-alpha08" }
52+
compose-activity = { module = "androidx.activity:activity-compose", version = "1.10.1" }
53+
compose-material3 = { module = "androidx.compose.material3:material3", version = "1.4.0-alpha09" }
5454
compose-ui = { group = "androidx.compose.ui", name = "ui" }
5555
compose-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling" }
5656

@@ -100,7 +100,7 @@ okhttp-dnsoverhttps = { module = "com.squareup.okhttp3:okhttp-dnsoverhttps", ver
100100

101101
# For removal (The same fucking thing. Delete later after voyager navigation would be done)
102102
androidx-navigation = { group = "org.jetbrains.androidx.navigation", name = "navigation-compose", version = "2.8.0-alpha10"}
103-
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version = "2.8.7" }
103+
androidx-navigation-compose = { module = "androidx.navigation:navigation-compose", version = "2.8.8" }
104104

105105
[bundles]
106106
okhttp = ["okhttp", "okhttp-brotli", "okhttp-dnsoverhttps", "okhttp-logging"]

shared/build.gradle.kts

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,6 @@ import com.mrboomdev.awery.gradle.ProjectVersion.getGitCommitHash
77
import com.mrboomdev.awery.gradle.generatedConfigurationsDirectory
88
import com.mrboomdev.awery.gradle.settings.GenerateSettingsTask
99
import com.mrboomdev.awery.gradle.settings.generatedSettingsDirectory
10-
import com.mrboomdev.awery.gradle.util.plusAssign
1110
import org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi
1211
import org.jetbrains.kotlin.gradle.tasks.KotlinCompile
1312

@@ -78,16 +77,15 @@ kotlin {
7877
// Core
7978
implementation(projects.resources)
8079
implementation(projects.ext)
80+
81+
// Language extensions
82+
implementation(libs.kotlinx.serialization.json)
8183
implementation(kotlin("reflect"))
8284

8385
// Yomi
8486
implementation(libs.bundles.yomi)
8587
implementation(libs.bundles.okhttp)
8688

87-
// Data
88-
implementation(libs.kotlinx.serialization.json)
89-
implementation(libs.lifecycle.viewmodel.compose)
90-
9189
// Database
9290
implementation(libs.room.runtime)
9391
implementation("androidx.sqlite:sqlite:2.4.0")
@@ -114,6 +112,7 @@ kotlin {
114112
// Components
115113
implementation(libs.compose.material3)
116114
implementation(libs.coil.compose)
115+
implementation(libs.coil.network.okhttp)
117116
api(libs.sonner)
118117
}
119118
}
@@ -126,6 +125,7 @@ kotlin {
126125
implementation(libs.androidx.preference)
127126
implementation(libs.quickjs.android)
128127
implementation(libs.bundles.exoplayer)
128+
implementation("com.google.accompanist:accompanist-drawablepainter:0.37.2")
129129
}
130130

131131
@OptIn(ExperimentalKotlinGradlePluginApi::class)
Lines changed: 27 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,31 @@
11
package com.mrboomdev.awery.platform
22

3+
import android.graphics.Bitmap
34
import android.graphics.drawable.Drawable
4-
import coil3.compose.asPainter
5-
import coil3.asImage as asCoilImage
5+
import androidx.compose.runtime.Composable
6+
import androidx.compose.ui.graphics.painter.Painter
7+
import androidx.compose.ui.platform.LocalContext
8+
import androidx.core.graphics.drawable.toDrawable
9+
import com.google.accompanist.drawablepainter.rememberDrawablePainter
10+
import com.mrboomdev.awery.ext.util.Image
611

7-
fun Drawable.asImage() = PlatformImage(asCoilImage().asPainter(Platform))
12+
actual class PlatformImage private constructor(
13+
private val drawable: Drawable?,
14+
private val bitmap: Bitmap?
15+
): Image {
16+
constructor(drawable: Drawable): this(drawable, null)
17+
18+
@Composable
19+
actual fun rememberPainter(): Painter {
20+
if(drawable != null) {
21+
return rememberDrawablePainter(drawable)
22+
}
23+
24+
if(bitmap != null) {
25+
val context = LocalContext.current
26+
return rememberDrawablePainter(bitmap.toDrawable(context.resources))
27+
}
28+
29+
throw UnsupportedOperationException("Cannot create an painter!")
30+
}
31+
}

shared/src/androidMain/kotlin/com/mrboomdev/awery/sources/yomi/YomiManager.kt

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,13 +13,15 @@ import com.mrboomdev.awery.ext.source.Context
1313
import com.mrboomdev.awery.ext.source.Source
1414
import com.mrboomdev.awery.ext.source.SourcesManager
1515
import com.mrboomdev.awery.ext.util.GlobalId
16+
import com.mrboomdev.awery.ext.util.Image
1617
import com.mrboomdev.awery.ext.util.PendingTask
1718
import com.mrboomdev.awery.ext.util.Progress
1819
import com.mrboomdev.awery.ext.util.exceptions.ExtensionInstallException
1920
import com.mrboomdev.awery.platform.Platform
2021
import com.mrboomdev.awery.platform.Platform.toast
22+
import com.mrboomdev.awery.platform.PlatformImage
2123
import com.mrboomdev.awery.sources.ExtensionsManager.isEnabled
22-
import com.mrboomdev.awery.ui.utils.UniqueIdGenerator
24+
import com.mrboomdev.awery.utils.UniqueIdGenerator
2325
import com.mrboomdev.awery.utils.generateRequestCode
2426
import dalvik.system.PathClassLoader
2527
import eu.kanade.tachiyomi.network.NetworkHelper
@@ -160,7 +162,9 @@ abstract class YomiManager<S>(
160162
if(appLabel.startsWith(appLabelPrefix)) {
161163
return@let appLabel.substring(appLabelPrefix.length).trim { it <= ' ' }
162164
} else appLabel
163-
}.toString()
165+
}.toString(),
166+
167+
icon = PlatformImage(packageInfo.applicationInfo!!.loadIcon(Platform.packageManager))
164168
)
165169
}
166170

@@ -203,6 +207,7 @@ abstract class YomiManager<S>(
203207

204208
@Throws(IllegalArgumentException::class)
205209
abstract fun createSourceWrapper(
210+
icon: Image,
206211
label: String,
207212
isNsfw: Boolean,
208213
packageInfo: PackageInfo,

shared/src/androidMain/kotlin/com/mrboomdev/awery/sources/yomi/aniyomi/AniyomiManager.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package com.mrboomdev.awery.sources.yomi.aniyomi
22

33
import android.content.pm.PackageInfo
44
import com.mrboomdev.awery.ext.constants.AgeRating
5-
import com.mrboomdev.awery.platform.Platform
6-
import com.mrboomdev.awery.platform.asImage
5+
import com.mrboomdev.awery.ext.util.Image
76
import com.mrboomdev.awery.sources.yomi.YomiManager
87
import eu.kanade.tachiyomi.animesource.AnimeSource
98
import eu.kanade.tachiyomi.animesource.AnimeSourceFactory
@@ -55,6 +54,7 @@ class AniyomiManager: YomiManager<AnimeSource>(
5554

5655
@Throws(IllegalArgumentException::class)
5756
override fun createSourceWrapper(
57+
icon: Image,
5858
label: String,
5959
isNsfw: Boolean,
6060
packageInfo: PackageInfo,
@@ -68,11 +68,7 @@ class AniyomiManager: YomiManager<AnimeSource>(
6868
manager = this,
6969
exception = exception,
7070
name = selectedSource?.name ?: label,
71-
72-
icon = Platform.packageManager.let { pm ->
73-
packageInfo.applicationInfo!!.loadIcon(pm).asImage()
74-
},
75-
71+
icon = icon,
7672
ageRating = if(isNsfw) {
7773
AgeRating.NSFW
7874
} else null

shared/src/androidMain/kotlin/com/mrboomdev/awery/sources/yomi/tachiyomi/TachiyomiManager.kt

Lines changed: 3 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -2,8 +2,7 @@ package com.mrboomdev.awery.sources.yomi.tachiyomi
22

33
import android.content.pm.PackageInfo
44
import com.mrboomdev.awery.ext.constants.AgeRating
5-
import com.mrboomdev.awery.platform.Platform
6-
import com.mrboomdev.awery.platform.asImage
5+
import com.mrboomdev.awery.ext.util.Image
76
import com.mrboomdev.awery.sources.yomi.YomiManager
87
import eu.kanade.tachiyomi.source.Source
98
import eu.kanade.tachiyomi.source.SourceFactory
@@ -54,6 +53,7 @@ class TachiyomiManager: YomiManager<Source>(
5453
}
5554

5655
override fun createSourceWrapper(
56+
icon: Image,
5757
label: String,
5858
isNsfw: Boolean,
5959
packageInfo: PackageInfo,
@@ -67,11 +67,7 @@ class TachiyomiManager: YomiManager<Source>(
6767
manager = this,
6868
exception = exception,
6969
name = selectedSource?.name ?: label,
70-
71-
icon = Platform.packageManager.let { pm ->
72-
packageInfo.applicationInfo!!.loadIcon(pm).asImage()
73-
},
74-
70+
icon = icon,
7571
ageRating = if(isNsfw) {
7672
AgeRating.NSFW
7773
} else null

shared/src/androidMain/kotlin/com/mrboomdev/awery/utils/ActivityUtils.kt

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,6 @@ import androidx.core.app.ActivityCompat
1111
import androidx.fragment.app.Fragment
1212
import androidx.fragment.app.FragmentActivity
1313
import androidx.fragment.app.FragmentManager
14-
import com.mrboomdev.awery.ui.utils.UniqueIdGenerator
1514
import java.util.WeakHashMap
1615

1716
private val backPressedCallbacks = WeakHashMap<() -> Unit, Any>()
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
package com.mrboomdev.awery.utils
2+
3+
import android.util.Log
4+
5+
actual class Logger actual constructor(private val tag: String) {
6+
actual fun d(message: String, t: Throwable?) {
7+
Log.d(tag, message, t)
8+
}
9+
10+
actual fun w(message: String, t: Throwable?) {
11+
Log.w(tag, message, t)
12+
}
13+
14+
actual fun e(message: String, t: Throwable?) {
15+
Log.e(tag, message, t)
16+
}
17+
}

0 commit comments

Comments
 (0)