mirror of
https://github.com/null2264/yokai.git
synced 2025-06-21 10:44:42 +00:00
chore: Some more effort moving widget to its own module
This commit is contained in:
parent
79b5494307
commit
4a9a7813e0
34 changed files with 205 additions and 64 deletions
|
@ -155,7 +155,9 @@ android {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
|
implementation(projects.data)
|
||||||
implementation(projects.i18n)
|
implementation(projects.i18n)
|
||||||
|
implementation(projects.presentation.core)
|
||||||
implementation(projects.sourceApi)
|
implementation(projects.sourceApi)
|
||||||
|
|
||||||
// Compose
|
// Compose
|
||||||
|
|
|
@ -141,6 +141,7 @@ import kotlinx.coroutines.withContext
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import yokai.core.migration.Migrator
|
import yokai.core.migration.Migrator
|
||||||
import yokai.domain.base.BasePreferences
|
import yokai.domain.base.BasePreferences
|
||||||
|
import yokai.presentation.core.Constants
|
||||||
import yokai.presentation.extension.repo.ExtensionRepoController
|
import yokai.presentation.extension.repo.ExtensionRepoController
|
||||||
import yokai.presentation.onboarding.OnboardingController
|
import yokai.presentation.onboarding.OnboardingController
|
||||||
import kotlin.collections.set
|
import kotlin.collections.set
|
||||||
|
@ -1596,17 +1597,20 @@ open class MainActivity : BaseActivity<MainActivityBinding>() {
|
||||||
private const val SWIPE_THRESHOLD = 100
|
private const val SWIPE_THRESHOLD = 100
|
||||||
private const val SWIPE_VELOCITY_THRESHOLD = 100
|
private const val SWIPE_VELOCITY_THRESHOLD = 100
|
||||||
|
|
||||||
const val MAIN_ACTIVITY = "eu.kanade.tachiyomi.ui.main.MainActivity"
|
const val MAIN_ACTIVITY = Constants.MAIN_ACTIVITY
|
||||||
|
|
||||||
// Shortcut actions
|
// Shortcut actions
|
||||||
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
const val SHORTCUT_LIBRARY = "eu.kanade.tachiyomi.SHOW_LIBRARY"
|
||||||
const val SHORTCUT_RECENTS = "eu.kanade.tachiyomi.SHOW_RECENTS"
|
@Deprecated
|
||||||
|
val SHORTCUT_RECENTS = Constants.SHORTCUT_RECENTS
|
||||||
const val SHORTCUT_RECENTLY_UPDATED = "eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED"
|
const val SHORTCUT_RECENTLY_UPDATED = "eu.kanade.tachiyomi.SHOW_RECENTLY_UPDATED"
|
||||||
const val SHORTCUT_RECENTLY_READ = "eu.kanade.tachiyomi.SHOW_RECENTLY_READ"
|
const val SHORTCUT_RECENTLY_READ = "eu.kanade.tachiyomi.SHOW_RECENTLY_READ"
|
||||||
const val SHORTCUT_BROWSE = "eu.kanade.tachiyomi.SHOW_BROWSE"
|
const val SHORTCUT_BROWSE = "eu.kanade.tachiyomi.SHOW_BROWSE"
|
||||||
const val SHORTCUT_DOWNLOADS = "eu.kanade.tachiyomi.SHOW_DOWNLOADS"
|
const val SHORTCUT_DOWNLOADS = "eu.kanade.tachiyomi.SHOW_DOWNLOADS"
|
||||||
const val SHORTCUT_MANGA = "eu.kanade.tachiyomi.SHOW_MANGA"
|
@Deprecated
|
||||||
const val SHORTCUT_MANGA_BACK = "eu.kanade.tachiyomi.SHOW_MANGA_BACK"
|
const val SHORTCUT_MANGA = Constants.SHORTCUT_MANGA
|
||||||
|
@Deprecated
|
||||||
|
const val SHORTCUT_MANGA_BACK = Constants.SHORTCUT_MANGA_BACK
|
||||||
const val SHORTCUT_UPDATE_NOTES = "eu.kanade.tachiyomi.SHOW_UPDATE_NOTES"
|
const val SHORTCUT_UPDATE_NOTES = "eu.kanade.tachiyomi.SHOW_UPDATE_NOTES"
|
||||||
const val SHORTCUT_SOURCE = "eu.kanade.tachiyomi.SHOW_SOURCE"
|
const val SHORTCUT_SOURCE = "eu.kanade.tachiyomi.SHOW_SOURCE"
|
||||||
const val SHORTCUT_READER_SETTINGS = "eu.kanade.tachiyomi.READER_SETTINGS"
|
const val SHORTCUT_READER_SETTINGS = "eu.kanade.tachiyomi.READER_SETTINGS"
|
||||||
|
|
|
@ -30,6 +30,7 @@ import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.injectLazy
|
||||||
import yokai.domain.chapter.interactor.GetChapters
|
import yokai.domain.chapter.interactor.GetChapters
|
||||||
|
import yokai.presentation.core.util.IntentCommon
|
||||||
|
|
||||||
class SearchActivity : MainActivity() {
|
class SearchActivity : MainActivity() {
|
||||||
private val getChapters: GetChapters by injectLazy()
|
private val getChapters: GetChapters by injectLazy()
|
||||||
|
@ -199,15 +200,8 @@ class SearchActivity : MainActivity() {
|
||||||
}
|
}
|
||||||
|
|
||||||
companion object {
|
companion object {
|
||||||
fun openMangaIntent(context: Context, id: Long?, canReturnToMain: Boolean = false) = Intent(
|
fun openMangaIntent(context: Context, id: Long?, canReturnToMain: Boolean = false) =
|
||||||
context,
|
IntentCommon.openManga(context, id, canReturnToMain)
|
||||||
SearchActivity::class
|
|
||||||
.java,
|
|
||||||
)
|
|
||||||
.apply {
|
|
||||||
action = if (canReturnToMain) SHORTCUT_MANGA_BACK else SHORTCUT_MANGA
|
|
||||||
putExtra(MangaDetailsController.MANGA_EXTRA, id)
|
|
||||||
}
|
|
||||||
|
|
||||||
fun openReaderSettings(context: Context) = Intent(
|
fun openReaderSettings(context: Context) = Intent(
|
||||||
context,
|
context,
|
||||||
|
|
|
@ -133,6 +133,7 @@ import kotlinx.coroutines.runBlocking
|
||||||
import kotlinx.coroutines.withTimeoutOrNull
|
import kotlinx.coroutines.withTimeoutOrNull
|
||||||
import uy.kohesive.injekt.Injekt
|
import uy.kohesive.injekt.Injekt
|
||||||
import uy.kohesive.injekt.api.get
|
import uy.kohesive.injekt.api.get
|
||||||
|
import yokai.presentation.core.Constants
|
||||||
import java.io.File
|
import java.io.File
|
||||||
import java.io.IOException
|
import java.io.IOException
|
||||||
import java.util.*
|
import java.util.*
|
||||||
|
@ -1843,7 +1844,8 @@ class MangaDetailsController :
|
||||||
const val SMART_SEARCH_CONFIG_EXTRA = "smartSearchConfig"
|
const val SMART_SEARCH_CONFIG_EXTRA = "smartSearchConfig"
|
||||||
|
|
||||||
const val FROM_CATALOGUE_EXTRA = "from_catalogue"
|
const val FROM_CATALOGUE_EXTRA = "from_catalogue"
|
||||||
const val MANGA_EXTRA = "manga"
|
@Deprecated
|
||||||
|
const val MANGA_EXTRA = Constants.MANGA_EXTRA
|
||||||
|
|
||||||
private enum class RangeMode {
|
private enum class RangeMode {
|
||||||
Download,
|
Download,
|
||||||
|
|
|
@ -23,8 +23,6 @@
|
||||||
<color name="tachiyomi_inverseSurface">#303033</color>
|
<color name="tachiyomi_inverseSurface">#303033</color>
|
||||||
<color name="tachiyomi_primaryInverse">#AEC6FF</color>
|
<color name="tachiyomi_primaryInverse">#AEC6FF</color>
|
||||||
|
|
||||||
<color name="cover_placeholder">#1F888888</color>
|
|
||||||
|
|
||||||
<!-- Application Colors -->
|
<!-- Application Colors -->
|
||||||
<color name="primaryVariantTachiyomi">#E5ECF4</color>
|
<color name="primaryVariantTachiyomi">#E5ECF4</color>
|
||||||
<color name="colorPrimaryInactive">#C2424242</color>
|
<color name="colorPrimaryInactive">#C2424242</color>
|
||||||
|
|
|
@ -15,6 +15,8 @@ kotlin {
|
||||||
}
|
}
|
||||||
val androidMain by getting {
|
val androidMain by getting {
|
||||||
dependencies {
|
dependencies {
|
||||||
|
api(libs.injekt.core)
|
||||||
|
|
||||||
api(libs.okhttp)
|
api(libs.okhttp)
|
||||||
api(libs.okhttp.logging.interceptor)
|
api(libs.okhttp.logging.interceptor)
|
||||||
api(libs.okhttp.dnsoverhttps)
|
api(libs.okhttp.dnsoverhttps)
|
||||||
|
|
24
data/build.gradle.kts
Normal file
24
data/build.gradle.kts
Normal file
|
@ -0,0 +1,24 @@
|
||||||
|
plugins {
|
||||||
|
kotlin("multiplatform")
|
||||||
|
kotlin("plugin.serialization")
|
||||||
|
id("com.android.library")
|
||||||
|
}
|
||||||
|
|
||||||
|
kotlin {
|
||||||
|
androidTarget()
|
||||||
|
sourceSets {
|
||||||
|
val commonMain by getting {
|
||||||
|
dependencies {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
val androidMain by getting {
|
||||||
|
dependencies {
|
||||||
|
implementation(projects.sourceApi)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
android {
|
||||||
|
namespace = "yokai.data"
|
||||||
|
}
|
2
data/src/androidMain/AndroidManifest.xml
Normal file
2
data/src/androidMain/AndroidManifest.xml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest />
|
|
@ -1,9 +1,8 @@
|
||||||
package eu.kanade.tachiyomi.data.database
|
package eu.kanade.tachiyomi.data.database
|
||||||
|
|
||||||
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
import eu.kanade.tachiyomi.source.model.UpdateStrategy
|
||||||
import java.util.Date
|
|
||||||
|
|
||||||
// TODO: Move to dev.yokai.data.DatabaseAdapter
|
// TODO: Move to yokai.data.DatabaseAdapter
|
||||||
|
|
||||||
val updateStrategyAdapter = object : ColumnAdapter<UpdateStrategy, Int> {
|
val updateStrategyAdapter = object : ColumnAdapter<UpdateStrategy, Int> {
|
||||||
private val enumValues by lazy { UpdateStrategy.entries }
|
private val enumValues by lazy { UpdateStrategy.entries }
|
|
@ -62,6 +62,7 @@ loading-button = { module = "br.com.simplepass:loading-button-android", version
|
||||||
mockk = { module = "io.mockk:mockk", version = "1.13.11" }
|
mockk = { module = "io.mockk:mockk", version = "1.13.11" }
|
||||||
|
|
||||||
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko" }
|
moko-resources = { module = "dev.icerock.moko:resources", version.ref = "moko" }
|
||||||
|
moko-resources-compose = { module = "dev.icerock.moko:resources-compose", version.ref = "moko" }
|
||||||
moko-generator = { module = "dev.icerock.moko:resources-generator", version.ref = "moko" }
|
moko-generator = { module = "dev.icerock.moko:resources-generator", version.ref = "moko" }
|
||||||
|
|
||||||
okio = { module = "com.squareup.okio:okio", version = "3.9.0" }
|
okio = { module = "com.squareup.okio:okio", version = "3.9.0" }
|
||||||
|
|
|
@ -1,5 +1,14 @@
|
||||||
<?xml version="1.0" encoding="utf-8"?>
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
<resources>
|
<resources>
|
||||||
|
<string name="no_recent_read_updated_manga">No recently read or updated series</string>
|
||||||
|
|
||||||
|
<!-- Recents -->
|
||||||
|
<string name="label_recent_updates">Updates</string>
|
||||||
|
|
||||||
|
<!-- App widget -->
|
||||||
|
<string name="appwidget_updates_description">See your recently updated library entries</string>
|
||||||
|
<string name="appwidget_unavailable_locked">Widget not available when app lock is enabled</string>
|
||||||
|
|
||||||
<!-- WebView -->
|
<!-- WebView -->
|
||||||
<string name="failed_to_bypass_cloudflare">Failed to bypass Cloudflare</string>
|
<string name="failed_to_bypass_cloudflare">Failed to bypass Cloudflare</string>
|
||||||
<!-- Do not translate "WebView" -->
|
<!-- Do not translate "WebView" -->
|
||||||
|
|
|
@ -13,5 +13,5 @@ android {
|
||||||
}
|
}
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
|
api(libs.material)
|
||||||
}
|
}
|
2
presentation/core/src/main/AndroidManifest.xml
Normal file
2
presentation/core/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest />
|
|
@ -0,0 +1,12 @@
|
||||||
|
package yokai.presentation.core
|
||||||
|
|
||||||
|
object Constants {
|
||||||
|
const val MAIN_ACTIVITY = "eu.kanade.tachiyomi.ui.main.MainActivity"
|
||||||
|
const val SEARCH_ACTIVITY = "eu.kanade.tachiyomi.ui.main.SearchActivity"
|
||||||
|
|
||||||
|
const val SHORTCUT_RECENTS = "eu.kanade.tachiyomi.SHOW_RECENTS"
|
||||||
|
const val SHORTCUT_MANGA = "eu.kanade.tachiyomi.SHOW_MANGA"
|
||||||
|
const val SHORTCUT_MANGA_BACK = "eu.kanade.tachiyomi.SHOW_MANGA_BACK"
|
||||||
|
|
||||||
|
const val MANGA_EXTRA = "manga"
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package yokai.presentation.core.util
|
||||||
|
|
||||||
|
import android.content.Context
|
||||||
|
import android.content.Intent
|
||||||
|
import yokai.presentation.core.Constants
|
||||||
|
|
||||||
|
object IntentCommon {
|
||||||
|
fun openManga(context: Context, id: Long?, canReturnToMain: Boolean = false) =
|
||||||
|
Intent(context, Class.forName(Constants.SEARCH_ACTIVITY))
|
||||||
|
.apply {
|
||||||
|
action = if (canReturnToMain) Constants.SHORTCUT_MANGA_BACK else Constants.SHORTCUT_MANGA
|
||||||
|
putExtra(Constants.MANGA_EXTRA, id)
|
||||||
|
}
|
||||||
|
}
|
4
presentation/core/src/main/res/values/colors.xml
Normal file
4
presentation/core/src/main/res/values/colors.xml
Normal file
|
@ -0,0 +1,4 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="cover_placeholder">#1F888888</color>
|
||||||
|
</resources>
|
|
@ -22,8 +22,10 @@ android {
|
||||||
|
|
||||||
dependencies {
|
dependencies {
|
||||||
implementation(projects.core)
|
implementation(projects.core)
|
||||||
|
implementation(projects.data)
|
||||||
implementation(projects.domain)
|
implementation(projects.domain)
|
||||||
implementation(projects.presentationCore)
|
implementation(projects.i18n)
|
||||||
|
implementation(projects.presentation.core)
|
||||||
|
|
||||||
implementation(androidx.glance.appwidget)
|
implementation(androidx.glance.appwidget)
|
||||||
|
|
18
presentation/widget/src/main/AndroidManifest.xml
Normal file
18
presentation/widget/src/main/AndroidManifest.xml
Normal file
|
@ -0,0 +1,18 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<manifest xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<application>
|
||||||
|
<receiver
|
||||||
|
android:name="eu.kanade.tachiyomi.appwidget.UpdatesGridGlanceReceiver"
|
||||||
|
android:enabled="@bool/glance_appwidget_available"
|
||||||
|
android:exported="false"
|
||||||
|
android:label="@string/updates">
|
||||||
|
<intent-filter>
|
||||||
|
<action android:name="android.appwidget.action.APPWIDGET_UPDATE" />
|
||||||
|
</intent-filter>
|
||||||
|
|
||||||
|
<meta-data
|
||||||
|
android:name="android.appwidget.provider"
|
||||||
|
android:resource="@xml/updates_grid_glance_widget_info" />
|
||||||
|
</receiver>
|
||||||
|
</application>
|
||||||
|
</manifest>
|
|
@ -1,8 +1,7 @@
|
||||||
package eu.kanade.tachiyomi.appwidget
|
package yokai.presentation.widget
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.glance.appwidget.GlanceAppWidgetManager
|
import androidx.glance.appwidget.GlanceAppWidgetManager
|
||||||
import eu.kanade.tachiyomi.appwidget.UpdatesGridGlanceWidget
|
|
||||||
|
|
||||||
class TachiyomiWidgetManager {
|
class TachiyomiWidgetManager {
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.kanade.tachiyomi.appwidget
|
package yokai.presentation.widget
|
||||||
|
|
||||||
import androidx.glance.appwidget.GlanceAppWidget
|
import androidx.glance.appwidget.GlanceAppWidget
|
||||||
import androidx.glance.appwidget.GlanceAppWidgetReceiver
|
import androidx.glance.appwidget.GlanceAppWidgetReceiver
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.kanade.tachiyomi.appwidget
|
package yokai.presentation.widget
|
||||||
|
|
||||||
import android.app.Application
|
import android.app.Application
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
@ -24,26 +24,27 @@ import coil3.request.transformations
|
||||||
import coil3.size.Precision
|
import coil3.size.Precision
|
||||||
import coil3.size.Scale
|
import coil3.size.Scale
|
||||||
import coil3.transform.RoundedCornersTransformation
|
import coil3.transform.RoundedCornersTransformation
|
||||||
import eu.kanade.tachiyomi.appwidget.components.CoverHeight
|
|
||||||
import eu.kanade.tachiyomi.appwidget.components.CoverWidth
|
|
||||||
import eu.kanade.tachiyomi.appwidget.components.LockedWidget
|
|
||||||
import eu.kanade.tachiyomi.appwidget.components.UpdatesWidget
|
|
||||||
import eu.kanade.tachiyomi.appwidget.util.appWidgetBackgroundRadius
|
|
||||||
import eu.kanade.tachiyomi.appwidget.util.calculateRowAndColumnCount
|
|
||||||
import eu.kanade.tachiyomi.data.database.models.Manga
|
import eu.kanade.tachiyomi.data.database.models.Manga
|
||||||
import eu.kanade.tachiyomi.data.preference.PreferencesHelper
|
|
||||||
import eu.kanade.tachiyomi.ui.recents.RecentsPresenter
|
import eu.kanade.tachiyomi.ui.recents.RecentsPresenter
|
||||||
import eu.kanade.tachiyomi.util.system.dpToPx
|
import eu.kanade.tachiyomi.util.system.dpToPx
|
||||||
import eu.kanade.tachiyomi.util.system.launchIO
|
import eu.kanade.tachiyomi.util.system.launchIO
|
||||||
import kotlinx.coroutines.MainScope
|
import kotlinx.coroutines.MainScope
|
||||||
import uy.kohesive.injekt.injectLazy
|
import uy.kohesive.injekt.Injekt
|
||||||
|
import uy.kohesive.injekt.api.get
|
||||||
|
import yokai.presentation.widget.components.CoverHeight
|
||||||
|
import yokai.presentation.widget.components.CoverWidth
|
||||||
|
import yokai.presentation.widget.components.LockedWidget
|
||||||
|
import yokai.presentation.widget.components.UpdatesWidget
|
||||||
|
import yokai.presentation.widget.util.appWidgetBackgroundRadius
|
||||||
|
import yokai.presentation.widget.util.calculateRowAndColumnCount
|
||||||
import java.util.*
|
import java.util.*
|
||||||
import kotlin.math.min
|
import kotlin.math.min
|
||||||
|
|
||||||
class UpdatesGridGlanceWidget : GlanceAppWidget() {
|
// FIXME
|
||||||
private val app: Application by injectLazy()
|
class UpdatesGridGlanceWidget(
|
||||||
private val preferences: PreferencesHelper by injectLazy()
|
private val app: Application = Injekt.get(),
|
||||||
|
//private val preferences: PreferencesHelper by injectLazy(),
|
||||||
|
) : GlanceAppWidget() {
|
||||||
private val coroutineScope = MainScope()
|
private val coroutineScope = MainScope()
|
||||||
|
|
||||||
private var data: List<Pair<Long, Bitmap?>>? = null
|
private var data: List<Pair<Long, Bitmap?>>? = null
|
|
@ -1,7 +1,8 @@
|
||||||
package eu.kanade.tachiyomi.appwidget.components
|
package yokai.presentation.widget.components
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
import androidx.compose.ui.graphics.Color
|
||||||
import androidx.compose.ui.unit.dp
|
import androidx.compose.ui.unit.dp
|
||||||
import androidx.compose.ui.unit.sp
|
import androidx.compose.ui.unit.sp
|
||||||
import androidx.glance.GlanceModifier
|
import androidx.glance.GlanceModifier
|
||||||
|
@ -15,14 +16,17 @@ import androidx.glance.text.Text
|
||||||
import androidx.glance.text.TextAlign
|
import androidx.glance.text.TextAlign
|
||||||
import androidx.glance.text.TextStyle
|
import androidx.glance.text.TextStyle
|
||||||
import androidx.glance.unit.ColorProvider
|
import androidx.glance.unit.ColorProvider
|
||||||
import eu.kanade.tachiyomi.R
|
import yokai.i18n.MR
|
||||||
import eu.kanade.tachiyomi.appwidget.ContainerModifier
|
import yokai.presentation.core.Constants
|
||||||
import eu.kanade.tachiyomi.appwidget.util.stringResource
|
import yokai.presentation.widget.ContainerModifier
|
||||||
import eu.kanade.tachiyomi.ui.main.MainActivity
|
import yokai.presentation.widget.R
|
||||||
|
import yokai.presentation.widget.util.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun LockedWidget() {
|
fun LockedWidget() {
|
||||||
val intent = Intent(LocalContext.current, Class.forName(MainActivity.MAIN_ACTIVITY)).apply {
|
val context = LocalContext.current
|
||||||
|
val clazz = Class.forName(Constants.MAIN_ACTIVITY)
|
||||||
|
val intent = Intent(context, clazz).apply {
|
||||||
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
addFlags(Intent.FLAG_ACTIVITY_NEW_TASK)
|
||||||
}
|
}
|
||||||
Box(
|
Box(
|
||||||
|
@ -33,9 +37,9 @@ fun LockedWidget() {
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
) {
|
) {
|
||||||
Text(
|
Text(
|
||||||
text = stringResource(R.string.appwidget_unavailable_locked),
|
text = stringResource(MR.strings.appwidget_unavailable_locked),
|
||||||
style = TextStyle(
|
style = TextStyle(
|
||||||
color = ColorProvider(R.color.appwidget_on_secondary_container),
|
color = ColorProvider(Color(context.getColor(R.color.appwidget_on_secondary_container))),
|
||||||
fontSize = 12.sp,
|
fontSize = 12.sp,
|
||||||
textAlign = TextAlign.Center,
|
textAlign = TextAlign.Center,
|
||||||
),
|
),
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.kanade.tachiyomi.appwidget.components
|
package yokai.presentation.widget.components
|
||||||
|
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
|
@ -10,8 +10,8 @@ import androidx.glance.layout.Box
|
||||||
import androidx.glance.layout.ContentScale
|
import androidx.glance.layout.ContentScale
|
||||||
import androidx.glance.layout.fillMaxSize
|
import androidx.glance.layout.fillMaxSize
|
||||||
import androidx.glance.layout.size
|
import androidx.glance.layout.size
|
||||||
import eu.kanade.tachiyomi.R
|
import yokai.presentation.widget.R
|
||||||
import eu.kanade.tachiyomi.appwidget.util.appWidgetInnerRadius
|
import yokai.presentation.widget.util.appWidgetInnerRadius
|
||||||
|
|
||||||
val CoverWidth = 58.dp
|
val CoverWidth = 58.dp
|
||||||
val CoverHeight = 87.dp
|
val CoverHeight = 87.dp
|
|
@ -1,4 +1,4 @@
|
||||||
package eu.kanade.tachiyomi.appwidget.components
|
package yokai.presentation.widget.components
|
||||||
|
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
import android.graphics.Bitmap
|
import android.graphics.Bitmap
|
||||||
|
@ -17,16 +17,18 @@ import androidx.glance.layout.Row
|
||||||
import androidx.glance.layout.fillMaxWidth
|
import androidx.glance.layout.fillMaxWidth
|
||||||
import androidx.glance.layout.padding
|
import androidx.glance.layout.padding
|
||||||
import androidx.glance.text.Text
|
import androidx.glance.text.Text
|
||||||
import eu.kanade.tachiyomi.appwidget.ContainerModifier
|
import yokai.i18n.MR
|
||||||
import eu.kanade.tachiyomi.appwidget.util.calculateRowAndColumnCount
|
import yokai.presentation.core.Constants
|
||||||
import eu.kanade.tachiyomi.appwidget.util.stringResource
|
import yokai.presentation.core.util.IntentCommon
|
||||||
import eu.kanade.tachiyomi.ui.main.SearchActivity
|
import yokai.presentation.widget.ContainerModifier
|
||||||
|
import yokai.presentation.widget.util.calculateRowAndColumnCount
|
||||||
|
import yokai.presentation.widget.util.stringResource
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun UpdatesWidget(data: List<Pair<Long, Bitmap?>>?) {
|
fun UpdatesWidget(data: List<Pair<Long, Bitmap?>>?) {
|
||||||
val (rowCount, columnCount) = LocalSize.current.calculateRowAndColumnCount()
|
val (rowCount, columnCount) = LocalSize.current.calculateRowAndColumnCount()
|
||||||
val clazz = Class.forName("eu.kanade.tachiyomi.ui.main.MainActivity")
|
val clazz = Class.forName(Constants.MAIN_ACTIVITY)
|
||||||
val mainIntent = Intent(LocalContext.current, clazz).setAction("eu.kanade.tachiyomi.SHOW_RECENTS")
|
val mainIntent = Intent(LocalContext.current, clazz).setAction(Constants.SHORTCUT_RECENTS)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
||||||
Column(
|
Column(
|
||||||
modifier = ContainerModifier.clickable(actionStartActivity(mainIntent)),
|
modifier = ContainerModifier.clickable(actionStartActivity(mainIntent)),
|
||||||
|
@ -36,7 +38,7 @@ fun UpdatesWidget(data: List<Pair<Long, Bitmap?>>?) {
|
||||||
if (data == null) {
|
if (data == null) {
|
||||||
CircularProgressIndicator()
|
CircularProgressIndicator()
|
||||||
} else if (data.isEmpty()) {
|
} else if (data.isEmpty()) {
|
||||||
Text(text = stringResource(R.string.no_recent_read_updated_manga))
|
Text(text = stringResource(MR.strings.no_recent_read_updated_manga))
|
||||||
} else {
|
} else {
|
||||||
(0 until rowCount).forEach { i ->
|
(0 until rowCount).forEach { i ->
|
||||||
val coverRow = (0 until columnCount).mapNotNull { j ->
|
val coverRow = (0 until columnCount).mapNotNull { j ->
|
||||||
|
@ -56,7 +58,7 @@ fun UpdatesWidget(data: List<Pair<Long, Bitmap?>>?) {
|
||||||
.padding(horizontal = 3.dp),
|
.padding(horizontal = 3.dp),
|
||||||
contentAlignment = Alignment.Center,
|
contentAlignment = Alignment.Center,
|
||||||
) {
|
) {
|
||||||
val intent = SearchActivity.openMangaIntent(LocalContext.current, mangaId, true)
|
val intent = IntentCommon.openManga(LocalContext.current, mangaId, true)
|
||||||
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP)
|
||||||
// https://issuetracker.google.com/issues/238793260
|
// https://issuetracker.google.com/issues/238793260
|
||||||
.addCategory(mangaId.toString())
|
.addCategory(mangaId.toString())
|
|
@ -1,12 +1,13 @@
|
||||||
package eu.kanade.tachiyomi.appwidget.util
|
package yokai.presentation.widget.util
|
||||||
|
|
||||||
import androidx.annotation.StringRes
|
|
||||||
import androidx.compose.runtime.Composable
|
import androidx.compose.runtime.Composable
|
||||||
import androidx.compose.ui.unit.DpSize
|
import androidx.compose.ui.unit.DpSize
|
||||||
import androidx.glance.GlanceModifier
|
import androidx.glance.GlanceModifier
|
||||||
import androidx.glance.LocalContext
|
import androidx.glance.LocalContext
|
||||||
import androidx.glance.appwidget.cornerRadius
|
import androidx.glance.appwidget.cornerRadius
|
||||||
import eu.kanade.tachiyomi.R
|
import dev.icerock.moko.resources.StringResource
|
||||||
|
import yokai.presentation.widget.R
|
||||||
|
import yokai.util.lang.getMString
|
||||||
|
|
||||||
fun GlanceModifier.appWidgetBackgroundRadius(): GlanceModifier {
|
fun GlanceModifier.appWidgetBackgroundRadius(): GlanceModifier {
|
||||||
return this.cornerRadius(R.dimen.appwidget_background_radius)
|
return this.cornerRadius(R.dimen.appwidget_background_radius)
|
||||||
|
@ -17,8 +18,8 @@ fun GlanceModifier.appWidgetInnerRadius(): GlanceModifier {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Composable
|
@Composable
|
||||||
fun stringResource(@StringRes id: Int): String {
|
fun stringResource(id: StringResource): String {
|
||||||
return LocalContext.current.getString(id)
|
return LocalContext.current.getMString(id)
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
|
@ -0,0 +1,6 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<shape xmlns:android="http://schemas.android.com/apk/res/android"
|
||||||
|
android:shape="rectangle">
|
||||||
|
<solid android:color="@color/appwidget_secondary_container" />
|
||||||
|
<corners android:radius="@dimen/appwidget_background_radius" />
|
||||||
|
</shape>
|
|
@ -0,0 +1,24 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
|
||||||
|
<item>
|
||||||
|
<shape android:shape="rectangle">
|
||||||
|
<solid android:color="@color/cover_placeholder" />
|
||||||
|
<corners android:radius="@dimen/appwidget_inner_radius" />
|
||||||
|
</shape>
|
||||||
|
</item>
|
||||||
|
<item
|
||||||
|
android:top="24dp"
|
||||||
|
android:bottom="24dp"
|
||||||
|
android:left="24dp"
|
||||||
|
android:right="24dp">
|
||||||
|
<vector
|
||||||
|
android:width="24dp"
|
||||||
|
android:height="24dp"
|
||||||
|
android:viewportWidth="24"
|
||||||
|
android:viewportHeight="24">
|
||||||
|
<path
|
||||||
|
android:fillColor="@color/cover_placeholder"
|
||||||
|
android:pathData="M21,5v6.59l-2.29,-2.3c-0.39,-0.39 -1.03,-0.39 -1.42,0L14,12.59 10.71,9.3c-0.39,-0.39 -1.02,-0.39 -1.41,0L6,12.59 3,9.58L3,5c0,-1.1 0.9,-2 2,-2h14c1.1,0 2,0.9 2,2zM18,11.42l3,3.01L21,19c0,1.1 -0.9,2 -2,2L5,21c-1.1,0 -2,-0.9 -2,-2v-6.58l2.29,2.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.3 3.29,3.29c0.39,0.39 1.02,0.39 1.41,0l3.3,-3.28z"/>
|
||||||
|
</vector>
|
||||||
|
</item>
|
||||||
|
</layer-list>
|
9
presentation/widget/src/main/res/values-v31/colors.xml
Normal file
9
presentation/widget/src/main/res/values-v31/colors.xml
Normal file
|
@ -0,0 +1,9 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<color name="appwidget_background">@color/m3_sys_color_dynamic_light_surface</color>
|
||||||
|
<color name="appwidget_on_background">@color/m3_sys_color_dynamic_light_on_surface</color>
|
||||||
|
<color name="appwidget_surface_variant">@color/m3_sys_color_dynamic_light_surface_variant</color>
|
||||||
|
<color name="appwidget_on_surface_variant">@color/m3_sys_color_dynamic_light_on_surface_variant</color>
|
||||||
|
<color name="appwidget_secondary_container">@color/m3_sys_color_dynamic_light_secondary_container</color>
|
||||||
|
<color name="appwidget_on_secondary_container">@color/m3_sys_color_dynamic_light_on_secondary_container</color>
|
||||||
|
</resources>
|
5
presentation/widget/src/main/res/values/dimens.xml
Normal file
5
presentation/widget/src/main/res/values/dimens.xml
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<resources>
|
||||||
|
<dimen name="appwidget_background_radius">16dp</dimen>
|
||||||
|
<dimen name="appwidget_inner_radius">12dp</dimen>
|
||||||
|
</resources>
|
|
@ -32,8 +32,9 @@ enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS")
|
||||||
rootProject.name = "Yokai"
|
rootProject.name = "Yokai"
|
||||||
include(":app")
|
include(":app")
|
||||||
include(":core")
|
include(":core")
|
||||||
|
include(":data")
|
||||||
include(":domain")
|
include(":domain")
|
||||||
include(":i18n")
|
include(":i18n")
|
||||||
include(":presentation-core")
|
include(":presentation:core")
|
||||||
include(":presentation-widget")
|
include(":presentation:widget")
|
||||||
include(":source-api")
|
include(":source-api")
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue