diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml
index 0927a98..d5945b4 100644
--- a/.idea/deploymentTargetDropDown.xml
+++ b/.idea/deploymentTargetDropDown.xml
@@ -18,7 +18,7 @@
-
+
diff --git a/README.md b/README.md
index 95296ef..b9342e5 100644
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# Tokusho
+# Etsudoku
An attempt to write an Android manga reading application on Jetpack Compose using the [Kotatsu parser library](https://github.com/KotatsuApp/kotatsu-parsers).
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 7f03dca..f4388ab 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -19,11 +19,11 @@ val acraAuthLogin: String = gradleLocalProperties(rootDir).getProperty("authLogi
val acraAuthPassword: String = gradleLocalProperties(rootDir).getProperty("authPassword") ?: "\"acra_password\""
android {
- namespace = "org.xtimms.tokusho"
+ namespace = "org.xtimms.etsudoku"
compileSdk = 34
defaultConfig {
- applicationId = "org.xtimms.tokusho"
+ applicationId = "org.xtimms.etsudoku"
minSdk = 26
targetSdk = 34
versionCode = 1
@@ -37,7 +37,7 @@ android {
buildConfigField("String", "ACRA_AUTH_LOGIN", acraAuthLogin)
buildConfigField("String", "ACRA_AUTH_PASSWORD", acraAuthPassword)
- testInstrumentationRunner = "org.xtimms.tokusho.HiltTestRunner"
+ testInstrumentationRunner = "org.xtimms.etsudoku.HiltTestRunner"
vectorDrawables {
useSupportLibrary = true
}
@@ -73,6 +73,7 @@ android {
}
buildFeatures {
compose = true
+ viewBinding = true
buildConfig = true
}
composeOptions {
@@ -100,7 +101,7 @@ dependencies {
implementation("androidx.compose.ui:ui")
implementation("androidx.compose.ui:ui-graphics")
implementation("androidx.compose.ui:ui-tooling-preview")
- implementation("androidx.compose.material:material-icons-extended:1.6.3")
+ implementation("androidx.compose.material:material-icons-extended:1.6.5")
implementation("androidx.compose.material3:material3-android:1.2.1")
implementation("androidx.compose.material3:material3-window-size-class:1.2.1")
implementation("androidx.hilt:hilt-navigation-compose:1.2.0")
diff --git a/app/src/androidTest/java/org/xtimms/tokusho/HiltTestRunner.kt b/app/src/androidTest/java/org/xtimms/etsudoku/HiltTestRunner.kt
similarity index 93%
rename from app/src/androidTest/java/org/xtimms/tokusho/HiltTestRunner.kt
rename to app/src/androidTest/java/org/xtimms/etsudoku/HiltTestRunner.kt
index 719a393..2f389f4 100644
--- a/app/src/androidTest/java/org/xtimms/tokusho/HiltTestRunner.kt
+++ b/app/src/androidTest/java/org/xtimms/etsudoku/HiltTestRunner.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.app.Application
import android.content.Context
diff --git a/app/src/androidTest/java/org/xtimms/tokusho/Instrumentation.kt b/app/src/androidTest/java/org/xtimms/etsudoku/Instrumentation.kt
similarity index 88%
rename from app/src/androidTest/java/org/xtimms/tokusho/Instrumentation.kt
rename to app/src/androidTest/java/org/xtimms/etsudoku/Instrumentation.kt
index 23266ba..1b1b458 100644
--- a/app/src/androidTest/java/org/xtimms/tokusho/Instrumentation.kt
+++ b/app/src/androidTest/java/org/xtimms/etsudoku/Instrumentation.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.app.Instrumentation
import kotlin.coroutines.resume
diff --git a/app/src/androidTest/java/org/xtimms/tokusho/SampleData.kt b/app/src/androidTest/java/org/xtimms/etsudoku/SampleData.kt
similarity index 95%
rename from app/src/androidTest/java/org/xtimms/tokusho/SampleData.kt
rename to app/src/androidTest/java/org/xtimms/etsudoku/SampleData.kt
index cd95d96..da6ad4d 100644
--- a/app/src/androidTest/java/org/xtimms/tokusho/SampleData.kt
+++ b/app/src/androidTest/java/org/xtimms/etsudoku/SampleData.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import androidx.test.platform.app.InstrumentationRegistry
import com.squareup.moshi.FromJson
@@ -11,7 +11,7 @@ import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory
import okio.buffer
import okio.source
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.FavouriteCategory
+import org.xtimms.etsudoku.core.model.FavouriteCategory
import java.util.Date
import kotlin.reflect.KClass
diff --git a/app/src/androidTest/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgentTest.kt b/app/src/androidTest/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgentTest.kt
similarity index 88%
rename from app/src/androidTest/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgentTest.kt
rename to app/src/androidTest/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgentTest.kt
index 7a1008f..c9c1ec8 100644
--- a/app/src/androidTest/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgentTest.kt
+++ b/app/src/androidTest/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgentTest.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.content.res.AssetManager
import androidx.test.ext.junit.runners.AndroidJUnit4
@@ -12,12 +12,12 @@ import org.junit.Before
import org.junit.Rule
import org.junit.Test
import org.junit.runner.RunWith
-import org.xtimms.tokusho.SampleData
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.toMangaTags
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.data.repository.backup.BackupRepository
+import org.xtimms.etsudoku.SampleData
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.toMangaTags
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.data.repository.backup.BackupRepository
import java.io.File
import javax.inject.Inject
@@ -38,7 +38,7 @@ class AppBackupAgentTest {
lateinit var backupRepository: BackupRepository
@Inject
- lateinit var database: TokushoDatabase
+ lateinit var database: EtsudokuDatabase
@Before
fun setUp() {
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 7cd20aa..fc1cac8 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -35,7 +35,7 @@
android:label="@string/app_name"
android:largeHeap="true"
android:supportsRtl="true"
- android:theme="@style/Theme.Tokusho.Starting"
+ android:theme="@style/Theme.Etsudoku.Starting"
android:networkSecurityConfig="@xml/network_security_config"
tools:targetApi="tiramisu">
@@ -43,7 +43,7 @@
android:name=".MainActivity"
android:exported="true"
android:launchMode="singleTop"
- android:theme="@style/Theme.Tokusho">
+ android:theme="@style/Theme.Etsudoku">
diff --git a/app/src/main/java/org/xtimms/tokusho/App.kt b/app/src/main/java/org/xtimms/etsudoku/App.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/App.kt
rename to app/src/main/java/org/xtimms/etsudoku/App.kt
index dcac073..c850930 100644
--- a/app/src/main/java/org/xtimms/tokusho/App.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/App.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.app.Application
import android.content.Context
@@ -20,12 +20,12 @@ import org.acra.data.StringFormat
import org.acra.ktx.initAcra
import org.acra.sender.HttpSender
import org.koitharu.kotatsu.parsers.MangaLoaderContext
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.KotatsuAppSettings
-import org.xtimms.tokusho.core.updates.Updater
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
-import org.xtimms.tokusho.work.WorkScheduleManager
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.KotatsuAppSettings
+import org.xtimms.etsudoku.core.updates.Updater
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.work.WorkScheduleManager
import javax.inject.Inject
import javax.inject.Provider
@@ -33,7 +33,7 @@ import javax.inject.Provider
class App : Application(), Configuration.Provider {
@Inject
- lateinit var database: Provider
+ lateinit var database: Provider
@Inject
lateinit var settings: KotatsuAppSettings
diff --git a/app/src/main/java/org/xtimms/tokusho/CompositionLocals.kt b/app/src/main/java/org/xtimms/etsudoku/CompositionLocals.kt
similarity index 80%
rename from app/src/main/java/org/xtimms/tokusho/CompositionLocals.kt
rename to app/src/main/java/org/xtimms/etsudoku/CompositionLocals.kt
index d018e00..3cc9ea3 100644
--- a/app/src/main/java/org/xtimms/tokusho/CompositionLocals.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/CompositionLocals.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.os.Build
import androidx.compose.foundation.layout.PaddingValues
@@ -11,13 +11,13 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.ui.theme.SEED
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.DarkThemePreference
-import org.xtimms.tokusho.core.prefs.paletteStyles
-import org.xtimms.tokusho.ui.monet.LocalTonalPalettes
-import org.xtimms.tokusho.ui.monet.PaletteStyle
-import org.xtimms.tokusho.ui.monet.TonalPalettes.Companion.toTonalPalettes
+import org.xtimms.etsudoku.ui.theme.SEED
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference
+import org.xtimms.etsudoku.core.prefs.paletteStyles
+import org.xtimms.etsudoku.ui.monet.LocalTonalPalettes
+import org.xtimms.etsudoku.ui.monet.PaletteStyle
+import org.xtimms.etsudoku.ui.monet.TonalPalettes.Companion.toTonalPalettes
data class BottomSheetScrollState(
val topPadding: Dp,
diff --git a/app/src/main/java/org/xtimms/tokusho/TokushoModule.kt b/app/src/main/java/org/xtimms/etsudoku/EtsudokuModule.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/TokushoModule.kt
rename to app/src/main/java/org/xtimms/etsudoku/EtsudokuModule.kt
index b8d09e9..2ca9ab1 100644
--- a/app/src/main/java/org/xtimms/tokusho/TokushoModule.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/EtsudokuModule.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.app.Application
import android.content.Context
@@ -20,28 +20,28 @@ import kotlinx.coroutines.flow.SharedFlow
import kotlinx.coroutines.flow.asSharedFlow
import okhttp3.OkHttpClient
import org.koitharu.kotatsu.parsers.MangaLoaderContext
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.core.cache.ContentCache
-import org.xtimms.tokusho.core.cache.MemoryContentCache
-import org.xtimms.tokusho.core.cache.StubContentCache
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.network.MangaHttpClient
-import org.xtimms.tokusho.core.network.interceptors.ImageProxyInterceptor
-import org.xtimms.tokusho.core.os.NetworkState
-import org.xtimms.tokusho.core.parser.MangaLoaderContextImpl
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.favicon.FaviconFetcher
-import org.xtimms.tokusho.core.parser.local.LocalStorageChanges
-import org.xtimms.tokusho.sections.reader.thumbnails.MangaPageFetcher
-import org.xtimms.tokusho.utils.CoilImageGetter
-import org.xtimms.tokusho.utils.system.connectivityManager
-import org.xtimms.tokusho.utils.system.isLowRamDevice
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.core.cache.ContentCache
+import org.xtimms.etsudoku.core.cache.MemoryContentCache
+import org.xtimms.etsudoku.core.cache.StubContentCache
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.network.MangaHttpClient
+import org.xtimms.etsudoku.core.network.interceptors.ImageProxyInterceptor
+import org.xtimms.etsudoku.core.os.NetworkState
+import org.xtimms.etsudoku.core.parser.MangaLoaderContextImpl
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.favicon.FaviconFetcher
+import org.xtimms.etsudoku.core.parser.local.LocalStorageChanges
+import org.xtimms.etsudoku.sections.reader.thumbnails.MangaPageFetcher
+import org.xtimms.etsudoku.utils.CoilImageGetter
+import org.xtimms.etsudoku.utils.system.connectivityManager
+import org.xtimms.etsudoku.utils.system.isLowRamDevice
import javax.inject.Singleton
@Module
@InstallIn(SingletonComponent::class)
-interface TokushoModule {
+interface EtsudokuModule {
@Binds
fun bindMangaLoaderContext(mangaLoaderContextImpl: MangaLoaderContextImpl): MangaLoaderContext
@@ -61,8 +61,8 @@ interface TokushoModule {
@Singleton
fun provideMangaDatabase(
@ApplicationContext context: Context,
- ): TokushoDatabase {
- return TokushoDatabase(context)
+ ): EtsudokuDatabase {
+ return EtsudokuDatabase(context)
}
@Provides
diff --git a/app/src/main/java/org/xtimms/tokusho/MainActivity.kt b/app/src/main/java/org/xtimms/etsudoku/MainActivity.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/MainActivity.kt
rename to app/src/main/java/org/xtimms/etsudoku/MainActivity.kt
index 87b9688..172c537 100644
--- a/app/src/main/java/org/xtimms/tokusho/MainActivity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/MainActivity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import android.Manifest
import android.content.Intent
@@ -11,6 +11,7 @@ import androidx.activity.compose.rememberLauncherForActivityResult
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
+import androidx.compose.animation.animateColorAsState
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.animateFloatAsState
import androidx.compose.foundation.layout.PaddingValues
@@ -24,9 +25,12 @@ import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.statusBarsPadding
import androidx.compose.foundation.layout.systemBars
-import androidx.compose.foundation.lazy.grid.LazyGridState
-import androidx.compose.foundation.lazy.grid.rememberLazyGridState
+import androidx.compose.foundation.lazy.rememberLazyListState
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.Scaffold
+import androidx.compose.material3.TopAppBarDefaults
+import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.material3.windowsizeclass.ExperimentalMaterial3WindowSizeClassApi
import androidx.compose.material3.windowsizeclass.WindowWidthSizeClass
import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass
@@ -35,15 +39,14 @@ import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.MutableState
import androidx.compose.runtime.derivedStateOf
import androidx.compose.runtime.getValue
-import androidx.compose.runtime.mutableFloatStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.rememberCoroutineScope
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
+import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
-import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.dp
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
@@ -55,18 +58,18 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.launch
import kotlinx.coroutines.runBlocking
-import org.xtimms.tokusho.core.Navigation
-import org.xtimms.tokusho.core.components.BottomNavBar
-import org.xtimms.tokusho.core.components.ContinueReadingButton
-import org.xtimms.tokusho.core.components.NavigationRail
-import org.xtimms.tokusho.core.components.TopAppBar
-import org.xtimms.tokusho.core.logs.FileLogger
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.screens.UpdateDialogImpl
-import org.xtimms.tokusho.core.updates.Updater
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.system.setLanguage
-import org.xtimms.tokusho.utils.system.suspendToast
+import org.xtimms.etsudoku.core.Navigation
+import org.xtimms.etsudoku.core.components.BottomNavBar
+import org.xtimms.etsudoku.core.components.ContinueReadingButton
+import org.xtimms.etsudoku.core.components.NavigationRail
+import org.xtimms.etsudoku.core.components.TopAppBar
+import org.xtimms.etsudoku.core.logs.FileLogger
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.screens.UpdateDialogImpl
+import org.xtimms.etsudoku.core.updates.Updater
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.system.setLanguage
+import org.xtimms.etsudoku.utils.system.suspendToast
import javax.inject.Inject
@OptIn(ExperimentalMaterial3WindowSizeClassApi::class)
@@ -139,7 +142,7 @@ class MainActivity : ComponentActivity() {
}
if (isReady.value) {
SettingsProvider {
- TokushoTheme(
+ EtsudokuTheme(
darkTheme = LocalDarkTheme.current.isDarkTheme(),
isDynamicColorEnabled = LocalDynamicColorSwitch.current,
isHighContrastModeEnabled = LocalDarkTheme.current.isHighContrastModeEnabled,
@@ -218,6 +221,7 @@ class MainActivity : ComponentActivity() {
}
}
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MainView(
coil: ImageLoader,
@@ -225,13 +229,10 @@ fun MainView(
isCompactScreen: Boolean,
navController: NavHostController,
) {
- val density = LocalDensity.current
-
val bottomBarState = remember { mutableStateOf(true) }
- var topBarHeightPx by remember { mutableFloatStateOf(0f) }
val topBarOffsetY = remember { Animatable(0f) }
- val scroll: LazyGridState = rememberLazyGridState()
+ val scroll = rememberLazyListState()
Scaffold(
topBar = {
@@ -243,12 +244,17 @@ fun MainView(
if (isScrolled) 1f else 0f,
label = "Top Bar Background",
)
+ val animatedSearchBarColor by animateColorAsState(
+ if (isScrolled) MaterialTheme.colorScheme.surface else MaterialTheme.colorScheme.surfaceColorAtElevation(6.dp),
+ label = "Top Bar Background",
+ )
TopAppBar(
navController = navController,
modifier = Modifier
.statusBarsPadding()
.padding(0.dp, 16.dp),
backgroundAlphaProvider = { animatedBgAlpha },
+ searchBarColorProvider = { animatedSearchBarColor }
)
}
},
@@ -280,21 +286,17 @@ fun MainView(
loggers = loggers,
navController = navController,
isCompactScreen = false,
- modifier = Modifier,
+ modifier = Modifier.nestedScroll(TopAppBarDefaults.pinnedScrollBehavior().nestedScrollConnection),
padding = PaddingValues(
start = padding.calculateStartPadding(LocalLayoutDirection.current),
top = systemBarsPadding.calculateTopPadding(),
end = padding.calculateEndPadding(LocalLayoutDirection.current),
bottom = systemBarsPadding.calculateBottomPadding()
),
- topBarHeightPx = topBarHeightPx,
listState = scroll
)
}
} else {
- LaunchedEffect(padding) {
- topBarHeightPx = density.run { padding.calculateTopPadding().toPx() }
- }
Navigation(
coil = coil,
loggers = loggers,
@@ -305,7 +307,6 @@ fun MainView(
end = padding.calculateEndPadding(LocalLayoutDirection.current),
),
padding = padding,
- topBarHeightPx = topBarHeightPx,
listState = scroll
)
}
diff --git a/app/src/main/java/org/xtimms/tokusho/core/AsyncImageImpl.kt b/app/src/main/java/org/xtimms/etsudoku/core/AsyncImageImpl.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/AsyncImageImpl.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/AsyncImageImpl.kt
index e3c6156..d8127ca 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/AsyncImageImpl.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/AsyncImageImpl.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core
+package org.xtimms.etsudoku.core
import androidx.compose.foundation.Image
import androidx.compose.runtime.Composable
@@ -14,8 +14,8 @@ import androidx.compose.ui.res.painterResource
import coil.ImageLoader
import coil.compose.AsyncImage
import coil.compose.AsyncImagePainter
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.utils.composable.rememberResourceBitmapPainter
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.utils.composable.rememberResourceBitmapPainter
@Composable
fun AsyncImageImpl(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/BottomNavDestination.kt b/app/src/main/java/org/xtimms/etsudoku/core/BottomNavDestination.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/BottomNavDestination.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/BottomNavDestination.kt
index 838d2f5..7569295 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/BottomNavDestination.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/BottomNavDestination.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core
+package org.xtimms.etsudoku.core
import androidx.annotation.StringRes
import androidx.compose.material.icons.Icons
@@ -11,10 +11,10 @@ import androidx.compose.material.icons.outlined.LocalLibrary
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.sections.explore.EXPLORE_DESTINATION
-import org.xtimms.tokusho.sections.history.HISTORY_DESTINATION
-import org.xtimms.tokusho.sections.shelf.SHELF_DESTINATION
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.sections.explore.EXPLORE_DESTINATION
+import org.xtimms.etsudoku.sections.history.HISTORY_DESTINATION
+import org.xtimms.etsudoku.sections.shelf.SHELF_DESTINATION
sealed class BottomNavDestination(
val value: String,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/ModifierCollapsable.kt b/app/src/main/java/org/xtimms/etsudoku/core/ModifierCollapsable.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/ModifierCollapsable.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/ModifierCollapsable.kt
index efc5702..3941b9d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/ModifierCollapsable.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/ModifierCollapsable.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core
+package org.xtimms.etsudoku.core
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationVector1D
diff --git a/app/src/main/java/org/xtimms/tokusho/core/Navigation.kt b/app/src/main/java/org/xtimms/etsudoku/core/Navigation.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/core/Navigation.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/Navigation.kt
index f6880ca..3af70d2 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/Navigation.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/Navigation.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core
+package org.xtimms.etsudoku.core
import android.graphics.Path
import android.view.animation.PathInterpolator
@@ -9,7 +9,7 @@ import androidx.compose.animation.fadeOut
import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.layout.PaddingValues
-import androidx.compose.foundation.lazy.grid.LazyGridState
+import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.IntOffset
@@ -20,69 +20,69 @@ import androidx.navigation.compose.composable
import androidx.navigation.navArgument
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.logs.FileLogger
-import org.xtimms.tokusho.sections.details.DETAILS_DESTINATION
-import org.xtimms.tokusho.sections.details.DetailsView
-import org.xtimms.tokusho.sections.details.FULL_POSTER_DESTINATION
-import org.xtimms.tokusho.sections.details.FullImageView
-import org.xtimms.tokusho.sections.details.MANGA_ID_ARGUMENT
-import org.xtimms.tokusho.sections.details.PICTURES_ARGUMENT
-import org.xtimms.tokusho.sections.explore.ExploreView
-import org.xtimms.tokusho.sections.feed.FEED_DESTINATION
-import org.xtimms.tokusho.sections.feed.FeedView
-import org.xtimms.tokusho.sections.history.HistoryView
-import org.xtimms.tokusho.sections.list.LIST_DESTINATION
-import org.xtimms.tokusho.sections.list.MangaListView
-import org.xtimms.tokusho.sections.list.PROVIDER_ARGUMENT
-import org.xtimms.tokusho.sections.reader.READER_DESTINATION
-import org.xtimms.tokusho.sections.reader.ReaderView
-import org.xtimms.tokusho.sections.search.SEARCH_DESTINATION
-import org.xtimms.tokusho.sections.search.SearchHostView
-import org.xtimms.tokusho.sections.settings.SETTINGS_DESTINATION
-import org.xtimms.tokusho.sections.settings.SettingsView
-import org.xtimms.tokusho.sections.settings.about.ABOUT_DESTINATION
-import org.xtimms.tokusho.sections.settings.about.AboutView
-import org.xtimms.tokusho.sections.settings.about.LICENSES_DESTINATION
-import org.xtimms.tokusho.sections.settings.about.LICENSE_CONTENT_ARGUMENT
-import org.xtimms.tokusho.sections.settings.about.LICENSE_DESTINATION
-import org.xtimms.tokusho.sections.settings.about.LICENSE_NAME_ARGUMENT
-import org.xtimms.tokusho.sections.settings.about.LICENSE_WEBSITE_ARGUMENT
-import org.xtimms.tokusho.sections.settings.about.LicenseView
-import org.xtimms.tokusho.sections.settings.about.OpenSourceLicensesView
-import org.xtimms.tokusho.sections.settings.about.UPDATES_DESTINATION
-import org.xtimms.tokusho.sections.settings.about.UpdateView
-import org.xtimms.tokusho.sections.settings.advanced.ADVANCED_DESTINATION
-import org.xtimms.tokusho.sections.settings.advanced.AdvancedView
-import org.xtimms.tokusho.sections.settings.appearance.APPEARANCE_DESTINATION
-import org.xtimms.tokusho.sections.settings.appearance.AppearanceView
-import org.xtimms.tokusho.sections.settings.appearance.DARK_THEME_DESTINATION
-import org.xtimms.tokusho.sections.settings.appearance.DarkThemeView
-import org.xtimms.tokusho.sections.settings.appearance.LANGUAGES_DESTINATION
-import org.xtimms.tokusho.sections.settings.appearance.LanguagesView
-import org.xtimms.tokusho.sections.settings.backup.BACKUP_RESTORE_DESTINATION
-import org.xtimms.tokusho.sections.settings.backup.BackupRestoreView
-import org.xtimms.tokusho.sections.settings.backup.RESTORE_ARGUMENT
-import org.xtimms.tokusho.sections.settings.backup.RESTORE_DESTINATION
-import org.xtimms.tokusho.sections.settings.backup.RestoreItemsView
-import org.xtimms.tokusho.sections.settings.network.NETWORK_DESTINATION
-import org.xtimms.tokusho.sections.settings.network.NetworkView
-import org.xtimms.tokusho.sections.settings.shelf.SHELF_SETTINGS_DESTINATION
-import org.xtimms.tokusho.sections.settings.shelf.ShelfSettingsView
-import org.xtimms.tokusho.sections.settings.shelf.categories.CATEGORIES_DESTINATION
-import org.xtimms.tokusho.sections.settings.shelf.categories.CategoriesView
-import org.xtimms.tokusho.sections.settings.sources.SOURCES_DESTINATION
-import org.xtimms.tokusho.sections.settings.sources.SourcesView
-import org.xtimms.tokusho.sections.settings.sources.catalog.CATALOG_DESTINATION
-import org.xtimms.tokusho.sections.settings.sources.catalog.SourcesCatalogView
-import org.xtimms.tokusho.sections.settings.storage.STORAGE_DESTINATION
-import org.xtimms.tokusho.sections.settings.storage.StorageView
-import org.xtimms.tokusho.sections.shelf.ShelfView
-import org.xtimms.tokusho.sections.stats.STATS_DESTINATION
-import org.xtimms.tokusho.sections.stats.StatsView
-import org.xtimms.tokusho.sections.suggestions.SUGGESTIONS_DESTINATION
-import org.xtimms.tokusho.sections.suggestions.SuggestionsView
-import org.xtimms.tokusho.utils.StringArrayNavType
-import org.xtimms.tokusho.utils.lang.removeFirstAndLast
+import org.xtimms.etsudoku.core.logs.FileLogger
+import org.xtimms.etsudoku.sections.details.DETAILS_DESTINATION
+import org.xtimms.etsudoku.sections.details.DetailsView
+import org.xtimms.etsudoku.sections.details.FULL_POSTER_DESTINATION
+import org.xtimms.etsudoku.sections.details.FullImageView
+import org.xtimms.etsudoku.sections.details.MANGA_ID_ARGUMENT
+import org.xtimms.etsudoku.sections.details.PICTURES_ARGUMENT
+import org.xtimms.etsudoku.sections.explore.ExploreView
+import org.xtimms.etsudoku.sections.feed.FEED_DESTINATION
+import org.xtimms.etsudoku.sections.feed.FeedView
+import org.xtimms.etsudoku.sections.history.HistoryView
+import org.xtimms.etsudoku.sections.list.LIST_DESTINATION
+import org.xtimms.etsudoku.sections.list.MangaListView
+import org.xtimms.etsudoku.sections.list.PROVIDER_ARGUMENT
+import org.xtimms.etsudoku.sections.reader.READER_DESTINATION
+import org.xtimms.etsudoku.sections.reader.ReaderView
+import org.xtimms.etsudoku.sections.search.SEARCH_DESTINATION
+import org.xtimms.etsudoku.sections.search.SearchHostView
+import org.xtimms.etsudoku.sections.settings.SETTINGS_DESTINATION
+import org.xtimms.etsudoku.sections.settings.SettingsView
+import org.xtimms.etsudoku.sections.settings.about.ABOUT_DESTINATION
+import org.xtimms.etsudoku.sections.settings.about.AboutView
+import org.xtimms.etsudoku.sections.settings.about.LICENSES_DESTINATION
+import org.xtimms.etsudoku.sections.settings.about.LICENSE_CONTENT_ARGUMENT
+import org.xtimms.etsudoku.sections.settings.about.LICENSE_DESTINATION
+import org.xtimms.etsudoku.sections.settings.about.LICENSE_NAME_ARGUMENT
+import org.xtimms.etsudoku.sections.settings.about.LICENSE_WEBSITE_ARGUMENT
+import org.xtimms.etsudoku.sections.settings.about.LicenseView
+import org.xtimms.etsudoku.sections.settings.about.OpenSourceLicensesView
+import org.xtimms.etsudoku.sections.settings.about.UPDATES_DESTINATION
+import org.xtimms.etsudoku.sections.settings.about.UpdateView
+import org.xtimms.etsudoku.sections.settings.advanced.ADVANCED_DESTINATION
+import org.xtimms.etsudoku.sections.settings.advanced.AdvancedView
+import org.xtimms.etsudoku.sections.settings.appearance.APPEARANCE_DESTINATION
+import org.xtimms.etsudoku.sections.settings.appearance.AppearanceView
+import org.xtimms.etsudoku.sections.settings.appearance.DARK_THEME_DESTINATION
+import org.xtimms.etsudoku.sections.settings.appearance.DarkThemeView
+import org.xtimms.etsudoku.sections.settings.appearance.LANGUAGES_DESTINATION
+import org.xtimms.etsudoku.sections.settings.appearance.LanguagesView
+import org.xtimms.etsudoku.sections.settings.backup.BACKUP_RESTORE_DESTINATION
+import org.xtimms.etsudoku.sections.settings.backup.BackupRestoreView
+import org.xtimms.etsudoku.sections.settings.backup.RESTORE_ARGUMENT
+import org.xtimms.etsudoku.sections.settings.backup.RESTORE_DESTINATION
+import org.xtimms.etsudoku.sections.settings.backup.RestoreItemsView
+import org.xtimms.etsudoku.sections.settings.network.NETWORK_DESTINATION
+import org.xtimms.etsudoku.sections.settings.network.NetworkView
+import org.xtimms.etsudoku.sections.settings.shelf.SHELF_SETTINGS_DESTINATION
+import org.xtimms.etsudoku.sections.settings.shelf.ShelfSettingsView
+import org.xtimms.etsudoku.sections.settings.shelf.categories.CATEGORIES_DESTINATION
+import org.xtimms.etsudoku.sections.settings.shelf.categories.CategoriesView
+import org.xtimms.etsudoku.sections.settings.sources.SOURCES_DESTINATION
+import org.xtimms.etsudoku.sections.settings.sources.SourcesView
+import org.xtimms.etsudoku.sections.settings.sources.catalog.CATALOG_DESTINATION
+import org.xtimms.etsudoku.sections.settings.sources.catalog.SourcesCatalogView
+import org.xtimms.etsudoku.sections.settings.storage.STORAGE_DESTINATION
+import org.xtimms.etsudoku.sections.settings.storage.StorageView
+import org.xtimms.etsudoku.sections.shelf.ShelfView
+import org.xtimms.etsudoku.sections.stats.STATS_DESTINATION
+import org.xtimms.etsudoku.sections.stats.StatsView
+import org.xtimms.etsudoku.sections.suggestions.SUGGESTIONS_DESTINATION
+import org.xtimms.etsudoku.sections.suggestions.SuggestionsView
+import org.xtimms.etsudoku.utils.StringArrayNavType
+import org.xtimms.etsudoku.utils.lang.removeFirstAndLast
const val DURATION_ENTER = 400
const val DURATION_EXIT = 200
@@ -100,8 +100,7 @@ fun Navigation(
isCompactScreen: Boolean,
modifier: Modifier,
padding: PaddingValues,
- topBarHeightPx: Float,
- listState: LazyGridState,
+ listState: LazyListState,
) {
val navigateBack: () -> Unit = { navController.popBackStack() }
@@ -166,9 +165,8 @@ fun Navigation(
currentPage = { 2 },
showPageTabs = true,
padding = padding,
- topBarHeightPx = topBarHeightPx,
navigateToDetails = navigateToDetails,
- onRefresh = { true }
+ onRefresh = { true },
)
}
@@ -176,9 +174,9 @@ fun Navigation(
HistoryView(
coil = coil,
padding = padding,
- topBarHeightPx = topBarHeightPx,
navigateToDetails = navigateToDetails,
- navigateToReader = { navController.navigate(READER_DESTINATION) }
+ navigateToReader = { navController.navigate(READER_DESTINATION) },
+ listState = listState
)
}
@@ -193,7 +191,6 @@ fun Navigation(
},
navigateToSuggestions = { navController.navigate(SUGGESTIONS_DESTINATION) },
padding = padding,
- topBarHeightPx = topBarHeightPx,
listState = listState
)
}
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/base/AlertDialogFragment.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/AlertDialogFragment.kt
new file mode 100644
index 0000000..605da44
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/AlertDialogFragment.kt
@@ -0,0 +1,64 @@
+package org.xtimms.etsudoku.core.base
+
+import android.app.Dialog
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.View
+import android.view.ViewGroup
+import androidx.annotation.CallSuper
+import androidx.appcompat.app.AlertDialog
+import androidx.fragment.app.DialogFragment
+import androidx.viewbinding.ViewBinding
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+
+abstract class AlertDialogFragment : DialogFragment() {
+
+ var viewBinding: B? = null
+ private set
+
+ @Deprecated("", ReplaceWith("requireViewBinding()"))
+ protected val binding: B
+ get() = requireViewBinding()
+
+ final override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
+ val binding = onCreateViewBinding(layoutInflater, null)
+ viewBinding = binding
+ return MaterialAlertDialogBuilder(requireContext(), theme)
+ .setView(binding.root)
+ .run(::onBuildDialog)
+ .create()
+ .also(::onDialogCreated)
+ }
+
+ final override fun onCreateView(
+ inflater: LayoutInflater,
+ container: ViewGroup?,
+ savedInstanceState: Bundle?,
+ ) = viewBinding?.root
+
+ final override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
+ onViewBindingCreated(requireViewBinding(), savedInstanceState)
+ }
+
+ @CallSuper
+ override fun onDestroyView() {
+ viewBinding = null
+ super.onDestroyView()
+ }
+
+ open fun onBuildDialog(builder: MaterialAlertDialogBuilder): MaterialAlertDialogBuilder = builder
+
+ open fun onDialogCreated(dialog: AlertDialog) = Unit
+
+ @Deprecated("", ReplaceWith("viewBinding"))
+ protected fun bindingOrNull() = viewBinding
+
+ fun requireViewBinding(): B = checkNotNull(viewBinding) {
+ "Fragment $this did not return a ViewBinding from onCreateView() or this was called before onCreateView()."
+ }
+
+ protected abstract fun onCreateViewBinding(inflater: LayoutInflater, container: ViewGroup?): B
+
+ protected open fun onViewBindingCreated(binding: B, savedInstanceState: Bundle?) = Unit
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/base/BaseActivity.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/BaseActivity.kt
new file mode 100644
index 0000000..8fd850a
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/BaseActivity.kt
@@ -0,0 +1,76 @@
+package org.xtimms.etsudoku.core.base
+
+import android.content.Intent
+import android.content.res.Configuration
+import android.graphics.Color
+import android.os.Bundle
+import android.view.View
+import androidx.appcompat.app.AppCompatActivity
+import androidx.core.view.WindowCompat
+import androidx.viewbinding.ViewBinding
+
+@Suppress("LeakingThis")
+abstract class BaseActivity :
+ AppCompatActivity() {
+
+ lateinit var viewBinding: B
+ private set
+
+ private var defaultStatusBarColor = Color.TRANSPARENT
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ putDataToExtras(intent)
+ super.onCreate(savedInstanceState)
+ WindowCompat.setDecorFitsSystemWindows(window, false)
+ }
+
+ override fun onNewIntent(intent: Intent?) {
+ putDataToExtras(intent)
+ super.onNewIntent(intent)
+ }
+
+ @Deprecated("Use ViewBinding", level = DeprecationLevel.ERROR)
+ override fun setContentView(layoutResID: Int) {
+ super.setContentView(layoutResID)
+ }
+
+ @Deprecated("Use ViewBinding", level = DeprecationLevel.ERROR)
+ override fun setContentView(view: View?) {
+ super.setContentView(view)
+ }
+
+ protected fun setContentView(binding: B) {
+ this.viewBinding = binding
+ super.setContentView(binding.root)
+ }
+
+ override fun onSupportNavigateUp(): Boolean {
+ dispatchNavigateUp()
+ return true
+ }
+
+ protected fun isDarkAmoledTheme(): Boolean {
+ val uiMode = resources.configuration.uiMode
+ return uiMode and Configuration.UI_MODE_NIGHT_MASK == Configuration.UI_MODE_NIGHT_YES
+ }
+
+ protected open fun dispatchNavigateUp() {
+ val upIntent = parentActivityIntent
+ if (upIntent != null) {
+ if (!navigateUpTo(upIntent)) {
+ startActivity(upIntent)
+ }
+ } else {
+ finishAfterTransition()
+ }
+ }
+
+ private fun putDataToExtras(intent: Intent?) {
+ intent?.putExtra(EXTRA_DATA, intent.data)
+ }
+
+ companion object {
+
+ const val EXTRA_DATA = "data"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/event/PagedUiEvent.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/event/PagedUiEvent.kt
similarity index 55%
rename from app/src/main/java/org/xtimms/tokusho/core/base/event/PagedUiEvent.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/event/PagedUiEvent.kt
index 7c6b778..dcfde69 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/event/PagedUiEvent.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/event/PagedUiEvent.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.event
+package org.xtimms.etsudoku.core.base.event
interface PagedUiEvent : UiEvent {
fun loadMore()
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/event/UiEvent.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/event/UiEvent.kt
similarity index 66%
rename from app/src/main/java/org/xtimms/tokusho/core/base/event/UiEvent.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/event/UiEvent.kt
index 56444c4..096f134 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/event/UiEvent.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/event/UiEvent.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.event
+package org.xtimms.etsudoku.core.base.event
interface UiEvent {
fun showMessage(message: String?)
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/state/PagedUiState.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/state/PagedUiState.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/core/base/state/PagedUiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/state/PagedUiState.kt
index 02c0ad7..9458a6a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/state/PagedUiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/state/PagedUiState.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.state
+package org.xtimms.etsudoku.core.base.state
abstract class PagedUiState : UiState() {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/state/UiState.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/state/UiState.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/base/state/UiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/state/UiState.kt
index d909208..0f0e310 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/state/UiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/state/UiState.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.state
+package org.xtimms.etsudoku.core.base.state
abstract class UiState {
abstract val isLoading: Boolean
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/BaseViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/BaseViewModel.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/BaseViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/BaseViewModel.kt
index 9b0d940..942a5e5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/BaseViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/BaseViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.viewmodel
+package org.xtimms.etsudoku.core.base.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
@@ -11,11 +11,11 @@ import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.core.base.event.UiEvent
-import org.xtimms.tokusho.core.base.state.UiState
-import org.xtimms.tokusho.utils.lang.EventFlow
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
+import org.xtimms.etsudoku.core.base.event.UiEvent
+import org.xtimms.etsudoku.core.base.state.UiState
+import org.xtimms.etsudoku.utils.lang.EventFlow
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.cancellation.CancellationException
diff --git a/app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/KotatsuBaseViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/KotatsuBaseViewModel.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/KotatsuBaseViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/KotatsuBaseViewModel.kt
index 4627c75..89c205d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/base/viewmodel/KotatsuBaseViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/base/viewmodel/KotatsuBaseViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.base.viewmodel
+package org.xtimms.etsudoku.core.base.viewmodel
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
@@ -17,9 +17,9 @@ import kotlinx.coroutines.flow.onStart
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.utils.lang.EventFlow
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
+import org.xtimms.etsudoku.utils.lang.EventFlow
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
import kotlin.coroutines.CoroutineContext
import kotlin.coroutines.EmptyCoroutineContext
import kotlin.coroutines.cancellation.CancellationException
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/CacheDir.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/CacheDir.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/CacheDir.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/CacheDir.kt
index 49223c5..a2f7047 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/CacheDir.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/CacheDir.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
enum class CacheDir(val dir: String) {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/ContentCache.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/ContentCache.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/ContentCache.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/ContentCache.kt
index 14d8faf..2e201fa 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/ContentCache.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/ContentCache.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaPage
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringLruCache.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringLruCache.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringLruCache.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringLruCache.kt
index 6a3867e..e8bc371 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringLruCache.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringLruCache.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import androidx.collection.LruCache
import java.util.concurrent.TimeUnit
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringValue.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringValue.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringValue.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringValue.kt
index 5d14b5e..ffef8c9 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/ExpiringValue.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/ExpiringValue.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import android.os.SystemClock
import java.util.concurrent.TimeUnit
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/MemoryContentCache.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/MemoryContentCache.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/MemoryContentCache.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/MemoryContentCache.kt
index bb0b83a..19a1401 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/MemoryContentCache.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/MemoryContentCache.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import android.app.Application
import android.content.ComponentCallbacks2
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/PagesCache.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/PagesCache.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/PagesCache.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/PagesCache.kt
index e6635d8..dc65337 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/PagesCache.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/PagesCache.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import android.content.Context
import android.graphics.Bitmap
@@ -13,13 +13,13 @@ import okio.buffer
import okio.sink
import org.koitharu.kotatsu.parsers.util.SuspendLazy
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.utils.FileSize
-import org.xtimms.tokusho.utils.lang.longHashCode
-import org.xtimms.tokusho.utils.lang.writeAllCancellable
-import org.xtimms.tokusho.utils.system.compressToPNG
-import org.xtimms.tokusho.utils.system.subdir
-import org.xtimms.tokusho.utils.system.takeIfReadable
-import org.xtimms.tokusho.utils.system.takeIfWriteable
+import org.xtimms.etsudoku.utils.FileSize
+import org.xtimms.etsudoku.utils.lang.longHashCode
+import org.xtimms.etsudoku.utils.lang.writeAllCancellable
+import org.xtimms.etsudoku.utils.system.compressToPNG
+import org.xtimms.etsudoku.utils.system.subdir
+import org.xtimms.etsudoku.utils.system.takeIfReadable
+import org.xtimms.etsudoku.utils.system.takeIfWriteable
import java.io.File
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/SafeDeferred.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/SafeDeferred.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/SafeDeferred.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/SafeDeferred.kt
index fdaffa4..632592b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/SafeDeferred.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/SafeDeferred.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import kotlinx.coroutines.Deferred
diff --git a/app/src/main/java/org/xtimms/tokusho/core/cache/StubContentCache.kt b/app/src/main/java/org/xtimms/etsudoku/core/cache/StubContentCache.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/cache/StubContentCache.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/cache/StubContentCache.kt
index 1deb47c..21d9380 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/cache/StubContentCache.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/cache/StubContentCache.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.cache
+package org.xtimms.etsudoku.core.cache
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaPage
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/AnimatedButton.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedButton.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/components/AnimatedButton.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedButton.kt
index e99d62e..6ca2e69 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/AnimatedButton.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedButton.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.ExperimentalFoundationApi
@@ -31,7 +31,7 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
import java.lang.Integer.MAX_VALUE
import kotlin.math.min
@@ -105,7 +105,7 @@ fun AnimatedButton(
@Preview(name = "Icon")
@Composable
private fun PreviewWithIcon() {
- TokushoTheme {
+ EtsudokuTheme {
AnimatedButton(
type = ButtonType.PRIMARY,
icon = Icons.Outlined.Edit
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/AnimatedNumber.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedNumber.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/AnimatedNumber.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedNumber.kt
index f060163..7850196 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/AnimatedNumber.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/AnimatedNumber.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.SizeTransform
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/BackgroundProgress.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/BackgroundProgress.kt
similarity index 64%
rename from app/src/main/java/org/xtimms/tokusho/core/components/BackgroundProgress.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/BackgroundProgress.kt
index e704021..5b88049 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/BackgroundProgress.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/BackgroundProgress.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.TweenSpec
@@ -14,19 +14,25 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.times
-import org.xtimms.tokusho.core.components.shape.WavyShape
-import org.xtimms.tokusho.utils.lang.clamp
+import org.xtimms.etsudoku.core.components.shape.WavyShape
+import org.xtimms.etsudoku.utils.lang.clamp
@Composable
fun BackgroundProgress(
color: Color,
+ alpha: Float,
+ percent: Float,
) {
- val percentWithNewSpent = 0.2f // TODO
+ val animatedAlpha = animateFloatAsState(
+ label = "alpha",
+ targetValue = alpha,
+ animationSpec = TweenSpec(500)
+ ).value
- val percentWithNewSpentAnimated = animateFloatAsState(
- label = "percentWithNewSpentAnimated",
- targetValue = percentWithNewSpent,
+ val percentAnimated = animateFloatAsState(
+ label = "percentAnimated",
+ targetValue = percent,
animationSpec = TweenSpec(300),
).value
@@ -36,15 +42,15 @@ fun BackgroundProgress(
Box(
modifier = Modifier
.background(
- color.copy(alpha = 0.33f),
+ color.copy(alpha = animatedAlpha),
shape = WavyShape(
period = 30.dp,
- amplitude = percentWithNewSpentAnimated.clamp(0.96f, 1f) * 2.dp,
+ amplitude = percentAnimated.clamp(0.96f, 1f) * 2.dp,
shift = shift.value,
),
)
.fillMaxHeight()
- .fillMaxWidth(percentWithNewSpentAnimated),
+ .fillMaxWidth(percentAnimated),
)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/BottomNavBar.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/BottomNavBar.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/core/components/BottomNavBar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/BottomNavBar.kt
index b2329f9..0f516e0 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/BottomNavBar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/BottomNavBar.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.Animatable
@@ -19,11 +19,11 @@ import androidx.navigation.NavController
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.compose.currentBackStackEntryAsState
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.core.BottomNavDestination
-import org.xtimms.tokusho.core.BottomNavDestination.Companion.Icon
-import org.xtimms.tokusho.sections.explore.EXPLORE_DESTINATION
-import org.xtimms.tokusho.sections.history.HISTORY_DESTINATION
-import org.xtimms.tokusho.sections.shelf.SHELF_DESTINATION
+import org.xtimms.etsudoku.core.BottomNavDestination
+import org.xtimms.etsudoku.core.BottomNavDestination.Companion.Icon
+import org.xtimms.etsudoku.sections.explore.EXPLORE_DESTINATION
+import org.xtimms.etsudoku.sections.history.HISTORY_DESTINATION
+import org.xtimms.etsudoku.sections.shelf.SHELF_DESTINATION
@Composable
fun BottomNavBar(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/Buttons.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/Buttons.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/components/Buttons.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/Buttons.kt
index e1083c3..6205777 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/Buttons.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/Buttons.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -12,7 +12,7 @@ import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextAlign
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
@Composable
fun ConfirmButton(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/CheckBox.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/CheckBox.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/CheckBox.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/CheckBox.kt
index b666f1a..2cf2299 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/CheckBox.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/CheckBox.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ContinueReadingButton.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ContinueReadingButton.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/components/ContinueReadingButton.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/ContinueReadingButton.kt
index b19ad78..3c7863d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ContinueReadingButton.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ContinueReadingButton.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
@@ -23,9 +23,9 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
import androidx.navigation.compose.currentBackStackEntryAsState
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.sections.history.HISTORY_DESTINATION
-import org.xtimms.tokusho.sections.reader.READER_DESTINATION
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.sections.history.HISTORY_DESTINATION
+import org.xtimms.etsudoku.sections.reader.READER_DESTINATION
@Composable
fun ContinueReadingButton(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/DetailsToolbar.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/DetailsToolbar.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/core/components/DetailsToolbar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/DetailsToolbar.kt
index d044b2d..5360a4f 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/DetailsToolbar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/DetailsToolbar.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.core.animateDpAsState
import androidx.compose.foundation.background
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/Dialogs.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/Dialogs.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/Dialogs.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/Dialogs.kt
index 50d1afa..df23875 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/Dialogs.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/Dialogs.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -34,7 +34,7 @@ private val ButtonsCrossAxisSpacing = Arrangement.spacedBy(12.dp, Alignment.Top)
@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
@Composable
-fun TokushoDialog(
+fun EtsudokuDialog(
onDismissRequest: () -> Unit,
confirmButton: @Composable () -> Unit,
modifier: Modifier = Modifier,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/DotSeparatorText.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/DotSeparatorText.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/components/DotSeparatorText.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/DotSeparatorText.kt
index dc8a953..4954b25 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/DotSeparatorText.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/DotSeparatorText.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.material3.Text
import androidx.compose.runtime.Composable
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ExploreButton.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ExploreButton.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/components/ExploreButton.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/ExploreButton.kt
index 1150744..db27509 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ExploreButton.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ExploreButton.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.height
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/FloatingActionButton.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/FloatingActionButton.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/FloatingActionButton.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/FloatingActionButton.kt
index f5f3921..8faacf6 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/FloatingActionButton.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/FloatingActionButton.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.CubicBezierEasing
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/components/HtmlTextField.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/HtmlTextField.kt
new file mode 100644
index 0000000..207727e
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/HtmlTextField.kt
@@ -0,0 +1,144 @@
+package org.xtimms.etsudoku.core.components
+
+import android.text.Spanned
+import android.text.style.BulletSpan
+import android.text.style.ForegroundColorSpan
+import android.text.style.RelativeSizeSpan
+import android.text.style.StrikethroughSpan
+import android.text.style.StyleSpan
+import android.text.style.SubscriptSpan
+import android.text.style.SuperscriptSpan
+import android.text.style.TypefaceSpan
+import android.text.style.URLSpan
+import android.text.style.UnderlineSpan
+import android.widget.TextView
+import androidx.compose.foundation.text.ClickableText
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.text.AnnotatedString
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.TextLayoutResult
+import androidx.compose.ui.text.TextStyle
+import androidx.compose.ui.text.buildAnnotatedString
+import androidx.compose.ui.text.style.TextDecoration
+import androidx.compose.ui.text.style.TextOverflow
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
+import androidx.core.text.HtmlCompat
+import org.xtimms.etsudoku.utils.spanStyle
+
+private const val URL_TAG = "url_tag"
+
+@Composable
+fun HtmlTextField(
+ text: String,
+ modifier: Modifier = Modifier,
+ style: TextStyle = TextStyle.Default,
+ softWrap: Boolean = true,
+ overflow: TextOverflow = TextOverflow.Clip,
+ maxLines: Int = Int.MAX_VALUE,
+ onTextLayout: (TextLayoutResult) -> Unit = {},
+ linkClicked: ((String) -> Unit)? = null,
+ fontSize: TextUnit = 14.sp,
+ flags: Int = HtmlCompat.FROM_HTML_MODE_COMPACT,
+ urlSpanStyle: SpanStyle = SpanStyle(
+ color = linkTextColor(),
+ textDecoration = TextDecoration.Underline
+ ),
+ customSpannedHandler: ((Spanned) -> AnnotatedString)? = null
+) {
+ val content = text.asHTML(fontSize, flags, urlSpanStyle, customSpannedHandler)
+ if (linkClicked != null) {
+ ClickableText(
+ modifier = modifier,
+ text = content,
+ style = style,
+ softWrap = softWrap,
+ overflow = overflow,
+ maxLines = maxLines,
+ onTextLayout = onTextLayout,
+ onClick = {
+ content
+ .getStringAnnotations(URL_TAG, it, it)
+ .firstOrNull()
+ ?.let { stringAnnotation -> linkClicked(stringAnnotation.item) }
+ }
+ )
+ } else {
+ Text(
+ modifier = modifier,
+ text = content,
+ style = style,
+ softWrap = softWrap,
+ overflow = overflow,
+ maxLines = maxLines,
+ onTextLayout = onTextLayout
+ )
+ }
+
+}
+
+@Composable
+private fun linkTextColor() = Color(
+ TextView(LocalContext.current).linkTextColors.defaultColor
+)
+
+@Composable
+private fun String.asHTML(
+ fontSize: TextUnit,
+ flags: Int,
+ URLSpanStyle: SpanStyle,
+ customSpannedHandler: ((Spanned) -> AnnotatedString)? = null
+) = buildAnnotatedString {
+ val spanned = HtmlCompat.fromHtml(this@asHTML, flags)
+ val spans = spanned.getSpans(0, spanned.length, Any::class.java)
+
+ if (customSpannedHandler != null) {
+ append(customSpannedHandler(spanned))
+ } else {
+ append(spanned.toString())
+ }
+
+ spans
+ .filter { it !is BulletSpan }
+ .forEach { span ->
+ val start = spanned.getSpanStart(span)
+ val end = spanned.getSpanEnd(span)
+ when (span) {
+ is RelativeSizeSpan -> span.spanStyle(fontSize)
+ is StyleSpan -> span.spanStyle()
+ is UnderlineSpan -> span.spanStyle()
+ is ForegroundColorSpan -> span.spanStyle()
+ is TypefaceSpan -> span.spanStyle()
+ is StrikethroughSpan -> span.spanStyle()
+ is SuperscriptSpan -> span.spanStyle()
+ is SubscriptSpan -> span.spanStyle()
+ is URLSpan -> {
+ addStringAnnotation(
+ tag = URL_TAG,
+ annotation = span.url,
+ start = start,
+ end = end
+ )
+ URLSpanStyle
+ }
+ else -> {
+ null
+ }
+ }?.let { spanStyle ->
+ addStyle(spanStyle, start, end)
+ }
+ }
+}
+
+internal fun UnderlineSpan.spanStyle(): SpanStyle =
+ SpanStyle(textDecoration = TextDecoration.Underline)
+
+internal fun ForegroundColorSpan.spanStyle(): SpanStyle =
+ SpanStyle(color = Color(foregroundColor))
+
+internal fun StrikethroughSpan.spanStyle(): SpanStyle =
+ SpanStyle(textDecoration = TextDecoration.LineThrough)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/IconButtons.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/IconButtons.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/IconButtons.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/IconButtons.kt
index aab85f8..0fce17a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/IconButtons.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/IconButtons.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material.icons.Icons
@@ -14,7 +14,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
@Composable
fun BackIconButton(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ListGroupHeader.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ListGroupHeader.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/components/ListGroupHeader.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/ListGroupHeader.kt
index 030ebf0..cf459ec 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ListGroupHeader.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ListGroupHeader.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.padding
import androidx.compose.material3.MaterialTheme
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/MangaCover.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/MangaCover.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/core/components/MangaCover.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/MangaCover.kt
index fbfc304..92bd531 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/MangaCover.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/MangaCover.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.Image
import androidx.compose.foundation.clickable
@@ -14,7 +14,7 @@ import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.semantics.Role
import coil.ImageLoader
import coil.compose.AsyncImage
-import org.xtimms.tokusho.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.AsyncImageImpl
enum class MangaCover(val ratio: Float) {
Square(1f / 1f),
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/MangaGridItem.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/MangaGridItem.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/MangaGridItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/MangaGridItem.kt
index db84f61..7d28c48 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/MangaGridItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/MangaGridItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.background
@@ -33,7 +33,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.AsyncImageImpl
private const val GridSelectedCoverAlpha = 0.76f
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/NavigationRail.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/NavigationRail.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/components/NavigationRail.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/NavigationRail.kt
index 6007439..fe63dc6 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/NavigationRail.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/NavigationRail.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Column
@@ -19,9 +19,9 @@ import androidx.compose.ui.res.stringResource
import androidx.navigation.NavController
import androidx.navigation.NavGraph.Companion.findStartDestination
import androidx.navigation.compose.currentBackStackEntryAsState
-import org.xtimms.tokusho.core.BottomNavDestination
-import org.xtimms.tokusho.core.BottomNavDestination.Companion.Icon
-import org.xtimms.tokusho.sections.search.SEARCH_DESTINATION
+import org.xtimms.etsudoku.core.BottomNavDestination
+import org.xtimms.etsudoku.core.BottomNavDestination.Companion.Icon
+import org.xtimms.etsudoku.sections.search.SEARCH_DESTINATION
@Composable
fun NavigationRail(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/Pill.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/Pill.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/Pill.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/Pill.kt
index 3e80048..b58f6c4 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/Pill.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/Pill.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.padding
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/PreferenceItem.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/PreferenceItem.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/PreferenceItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/PreferenceItem.kt
index b3f1b92..0131ce5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/PreferenceItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/PreferenceItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.SizeTransform
@@ -65,14 +65,14 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import org.xtimms.tokusho.ui.theme.FixedAccentColors
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.ui.monet.LocalTonalPalettes
-import org.xtimms.tokusho.ui.monet.TonalPalettes.Companion.toTonalPalettes
-import org.xtimms.tokusho.ui.theme.PreviewThemeLight
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.ui.theme.applyOpacity
-import org.xtimms.tokusho.utils.FileSize
+import org.xtimms.etsudoku.ui.theme.FixedAccentColors
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.ui.monet.LocalTonalPalettes
+import org.xtimms.etsudoku.ui.monet.TonalPalettes.Companion.toTonalPalettes
+import org.xtimms.etsudoku.ui.theme.PreviewThemeLight
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.ui.theme.applyOpacity
+import org.xtimms.etsudoku.utils.FileSize
private const val horizontal = 8
private const val vertical = 16
@@ -754,7 +754,7 @@ fun PreferenceStorageItem(
@Composable
@Preview(showBackground = true)
fun PreferenceStorageHeaderPreview() {
- TokushoTheme {
+ EtsudokuTheme {
PreferenceStorageHeader()
}
}
@@ -762,7 +762,7 @@ fun PreferenceStorageHeaderPreview() {
@Composable
@Preview(showBackground = true)
fun PreferenceStorageItemPreview() {
- TokushoTheme {
+ EtsudokuTheme {
PreferenceStorageItem(title = "Saved manga", icon = Icons.Outlined.Save, total = 0F)
}
}
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/PullRefresh.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/PullRefresh.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/core/components/PullRefresh.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/PullRefresh.kt
index 317be50..80990ff 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/PullRefresh.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/PullRefresh.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.core.animate
import androidx.compose.foundation.layout.Box
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/components/ReadButton.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ReadButton.kt
new file mode 100644
index 0000000..c668a0d
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ReadButton.kt
@@ -0,0 +1,244 @@
+package org.xtimms.etsudoku.core.components
+
+import android.content.res.Configuration.UI_MODE_NIGHT_YES
+import androidx.compose.animation.AnimatedContent
+import androidx.compose.animation.animateColorAsState
+import androidx.compose.animation.core.Animatable
+import androidx.compose.animation.core.FloatTweenSpec
+import androidx.compose.animation.core.LinearEasing
+import androidx.compose.animation.core.RepeatMode
+import androidx.compose.animation.core.TweenSpec
+import androidx.compose.animation.core.VectorConverter
+import androidx.compose.animation.core.animateValue
+import androidx.compose.animation.core.infiniteRepeatable
+import androidx.compose.animation.core.rememberInfiniteTransition
+import androidx.compose.animation.core.tween
+import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
+import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.Row
+import androidx.compose.foundation.layout.RowScope
+import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.shape.CircleShape
+import androidx.compose.material3.Card
+import androidx.compose.material3.CardDefaults
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.remember
+import androidx.compose.runtime.rememberCoroutineScope
+import androidx.compose.ui.Alignment
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.draw.drawWithContent
+import androidx.compose.ui.geometry.Offset
+import androidx.compose.ui.geometry.Size
+import androidx.compose.ui.graphics.BlendMode
+import androidx.compose.ui.graphics.Brush
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.drawscope.ContentDrawScope
+import androidx.compose.ui.graphics.nativeCanvas
+import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.dp
+import kotlinx.coroutines.launch
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.model.MangaHistory
+import org.xtimms.etsudoku.sections.details.model.HistoryInfo
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import java.time.Instant
+
+@Composable
+fun RowScope.ReadButton(
+ info: HistoryInfo,
+ estimatedReadTime: String
+) {
+
+ val shift = remember { Animatable(0f) }
+ val coroutineScope = rememberCoroutineScope()
+
+ val animatedCardContainerColor = animateColorAsState(
+ label = "animatedCardContainerColor",
+ targetValue = if (info.totalChapters == 0) MaterialTheme.colorScheme.errorContainer else MaterialTheme.colorScheme.primaryContainer,
+ animationSpec = TweenSpec(500)
+ ).value
+
+ val animatedCardContentColor = animateColorAsState(
+ label = "animatedCardContentColor",
+ targetValue = if (info.totalChapters == 0) MaterialTheme.colorScheme.onErrorContainer else MaterialTheme.colorScheme.onPrimaryContainer,
+ animationSpec = TweenSpec(500)
+ ).value
+
+ LaunchedEffect(Unit) {
+ fun anim() {
+ coroutineScope.launch {
+ shift.animateTo(
+ 1f,
+ animationSpec = FloatTweenSpec(4000, 0, LinearEasing)
+ )
+ shift.snapTo(0f)
+ anim()
+ }
+ }
+ anim()
+ }
+
+ Card(
+ modifier = Modifier
+ .weight(1F)
+ .height(54.dp),
+ shape = CircleShape,
+ colors = CardDefaults.cardColors(
+ containerColor = animatedCardContainerColor,
+ contentColor = animatedCardContentColor,
+ ),
+ onClick = {
+ // todo
+ }
+ ) {
+ Box(
+ modifier = Modifier.fillMaxHeight(),
+ contentAlignment = Alignment.CenterEnd,
+ ) {
+ BackgroundProgress(
+ if (info.totalChapters == 0) MaterialTheme.colorScheme.error else MaterialTheme.colorScheme.primary,
+ if (!info.isValid) 0.1f else 0.33f,
+ info.history?.percent?.coerceIn(0f, 1f) ?: 0f
+ )
+ Column(
+ modifier = Modifier
+ .fillMaxSize()
+ .drawWithLayer {
+ drawContent()
+ val leftOffset = size.width - 20.dp.toPx()
+ drawRect(
+ topLeft = Offset(leftOffset, 0f),
+ size = Size(
+ 20.dp.toPx(),
+ size.height,
+ ),
+ blendMode = BlendMode.SrcIn,
+ brush = Brush.horizontalGradient(
+ colors = listOf(
+ Color.Black,
+ Color.Black.copy(alpha = 0f),
+ ),
+ startX = leftOffset,
+ endX = leftOffset + 14.dp.toPx()
+ )
+ )
+ },
+ horizontalAlignment = Alignment.CenterHorizontally,
+ verticalArrangement = Arrangement.Center,
+ ) {
+ val infiniteTransition by rememberInfiniteTransition("infiniteTransition").animateValue(
+ label = "infiniteTransition",
+ initialValue = 0,
+ targetValue = 2,
+ typeConverter = Int.VectorConverter,
+ animationSpec = infiniteRepeatable(tween(15000), RepeatMode.Restart)
+ )
+ val chaptersSubtitle = when {
+ !info.isValid -> stringResource(R.string.loading_)
+ info.currentChapter >= 0 -> when (infiniteTransition) {
+ 1 -> stringResource(
+ R.string.chapter_d_of_d,
+ info.currentChapter + 1,
+ info.totalChapters,
+ )
+ 0 -> estimatedReadTime
+ else -> estimatedReadTime
+ }
+
+ info.totalChapters == 0 -> stringResource(R.string.no_chapters)
+ else -> LocalContext.current.resources.getQuantityString(
+ R.plurals.chapters,
+ info.totalChapters,
+ info.totalChapters,
+ )
+ }
+ Text(
+ text = if (info.history != null) {
+ stringResource(R.string.continue_reading)
+ } else {
+ stringResource(R.string.read)
+ },
+ )
+ AnimatedContent(targetState = chaptersSubtitle, label = "Subtitle animation") {
+ Text(
+ text = it,
+ style = MaterialTheme.typography.labelMedium,
+ )
+ }
+ }
+ }
+ }
+}
+
+fun ContentDrawScope.drawWithLayer(block: ContentDrawScope.() -> Unit) {
+ with(drawContext.canvas.nativeCanvas) {
+ val checkPoint = saveLayer(null, null)
+ block()
+ restoreToCount(checkPoint)
+ }
+}
+
+fun Modifier.drawWithLayer(block: ContentDrawScope.() -> Unit) = this.then(
+ Modifier.drawWithContent {
+ drawWithLayer {
+ block()
+ }
+ }
+)
+
+@Preview
+@Composable
+private fun Preview() {
+ EtsudokuTheme {
+ Row {
+ ReadButton(
+ HistoryInfo(
+ 100,
+ 33,
+ MangaHistory(
+ Instant.now(),
+ Instant.now(),
+ 1,
+ 3,
+ 1,
+ 50f
+ )
+ ),
+ "123"
+ )
+ }
+ }
+}
+
+@Preview(name = "Night mode", uiMode = UI_MODE_NIGHT_YES)
+@Composable
+private fun PreviewNightMode() {
+ EtsudokuTheme {
+ Row {
+ ReadButton(
+ HistoryInfo(
+ 100,
+ 33,
+ MangaHistory(
+ Instant.now(),
+ Instant.now(),
+ 1,
+ 3,
+ 1,
+ 50f
+ )
+ ),
+ "123"
+ )
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ScaffoldWithTopAppBar.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ScaffoldWithTopAppBar.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/ScaffoldWithTopAppBar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/ScaffoldWithTopAppBar.kt
index 0f2fe15..46793a8 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ScaffoldWithTopAppBar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ScaffoldWithTopAppBar.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.RowScope
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ScoreIndicator.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/ScoreIndicator.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/components/ScoreIndicator.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/ScoreIndicator.kt
index cafbf0f..b78cd1b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ScoreIndicator.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/ScoreIndicator.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.padding
@@ -15,9 +15,9 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.lang.toStringPositiveValueOrUnknown
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.lang.toStringPositiveValueOrUnknown
@Composable
fun SmallScoreIndicator(
@@ -48,7 +48,7 @@ fun SmallScoreIndicator(
@Preview(showBackground = true)
@Composable
fun SmallScoreIndicatorPreview() {
- TokushoTheme {
+ EtsudokuTheme {
SmallScoreIndicator(score = 1f)
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/components/SearchBar.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/SearchBar.kt
new file mode 100644
index 0000000..89ab8e0
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/SearchBar.kt
@@ -0,0 +1,116 @@
+package org.xtimms.etsudoku.core.components
+
+import androidx.compose.animation.animateContentSize
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.spring
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.fillMaxWidth
+import androidx.compose.foundation.layout.padding
+import androidx.compose.material.icons.Icons
+import androidx.compose.material.icons.automirrored.rounded.ArrowBack
+import androidx.compose.material.icons.outlined.Close
+import androidx.compose.material.icons.outlined.Search
+import androidx.compose.material3.ExperimentalMaterial3Api
+import androidx.compose.material3.Icon
+import androidx.compose.material3.IconButton
+import androidx.compose.material3.MaterialTheme
+import androidx.compose.material3.SearchBar
+import androidx.compose.material3.SearchBarDefaults
+import androidx.compose.material3.Text
+import androidx.compose.runtime.Composable
+import androidx.compose.runtime.getValue
+import androidx.compose.runtime.mutableStateOf
+import androidx.compose.runtime.saveable.rememberSaveable
+import androidx.compose.runtime.setValue
+import androidx.compose.ui.Modifier
+import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.dp
+import org.xtimms.etsudoku.R
+
+@Composable
+@OptIn(ExperimentalMaterial3Api::class)
+fun EmbeddedSearchBar(
+ onQueryChange: (String) -> Unit,
+ isSearchActive: Boolean,
+ onActiveChanged: (Boolean) -> Unit,
+ modifier: Modifier = Modifier,
+ onSearch: ((String) -> Unit)? = null,
+) {
+ var searchQuery by rememberSaveable { mutableStateOf("") }
+ val activeChanged: (Boolean) -> Unit = { active ->
+ searchQuery = ""
+ onQueryChange("")
+ onActiveChanged(active)
+ }
+ SearchBar(
+ query = searchQuery,
+ onQueryChange = { query ->
+ searchQuery = query
+ onQueryChange(query)
+ },
+ onSearch = onSearch ?: { activeChanged(false) },
+ active = isSearchActive,
+ onActiveChange = activeChanged,
+ modifier = if (isSearchActive) {
+ modifier
+ .animateContentSize(spring(stiffness = Spring.StiffnessHigh))
+ } else {
+ modifier
+ .fillMaxWidth()
+ .animateContentSize(spring(stiffness = Spring.StiffnessHigh))
+ },
+ placeholder = { Text("Search") },
+ leadingIcon = {
+ if (isSearchActive) {
+ IconButton(
+ onClick = { activeChanged(false) },
+ ) {
+ Icon(
+ imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
+ contentDescription = null,
+ tint = MaterialTheme.colorScheme.primary,
+ )
+ }
+ } else {
+ Icon(
+ imageVector = Icons.Outlined.Search,
+ contentDescription = null,
+ tint = MaterialTheme.colorScheme.onSurfaceVariant,
+ )
+ }
+ },
+ trailingIcon = if (isSearchActive && searchQuery.isNotEmpty()) {
+ {
+ IconButton(
+ onClick = {
+ searchQuery = ""
+ onQueryChange("")
+ },
+ ) {
+ Icon(
+ imageVector = Icons.Outlined.Close,
+ contentDescription = null,
+ tint = MaterialTheme.colorScheme.primary,
+ )
+ }
+ }
+ } else {
+ null
+ },
+ colors = SearchBarDefaults.colors(
+ containerColor = if (isSearchActive) {
+ MaterialTheme.colorScheme.background
+ } else {
+ MaterialTheme.colorScheme.surfaceContainerLow
+ },
+ ),
+ tonalElevation = 0.dp,
+ windowInsets = if (isSearchActive) {
+ SearchBarDefaults.windowInsets
+ } else {
+ WindowInsets(0.dp)
+ }
+ ) {
+ // Search suggestions or results
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/SettingItem.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/SettingItem.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/components/SettingItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/SettingItem.kt
index 94985b6..ff6031e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/SettingItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/SettingItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.animation.AnimatedContent
import androidx.compose.animation.SizeTransform
@@ -20,7 +20,7 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.vector.ImageVector
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.ui.theme.applyOpacity
+import org.xtimms.etsudoku.ui.theme.applyOpacity
@Composable
fun SettingTitle(text: String) {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/SourceItem.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/SourceItem.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/components/SourceItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/SourceItem.kt
index a894bbf..3374b62 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/SourceItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/SourceItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import android.net.Uri
import androidx.compose.foundation.clickable
@@ -24,8 +24,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.core.net.toUri
import coil.ImageLoader
-import org.xtimms.tokusho.core.AsyncImageImpl
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.core.AsyncImageImpl
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
@Composable
fun SourceItem(
@@ -38,15 +38,15 @@ fun SourceItem(
) {
Column(
modifier = modifier
- .width(96.dp)
+ .width(88.dp)
.clip(RoundedCornerShape(8.dp))
.clickable(onClick = onClick)
.padding(start = 8.dp, end = 8.dp),
horizontalAlignment = Alignment.Start
) {
Card(
- modifier = modifier
- .size(96.dp)
+ modifier = Modifier
+ .size(88.dp)
.clip(MaterialTheme.shapes.large)
.aspectRatio(1f)
) {
@@ -55,7 +55,7 @@ fun SourceItem(
model = faviconUrl,
contentDescription = "favicon",
contentScale = ContentScale.Crop,
- modifier = modifier
+ modifier = Modifier
.fillMaxSize()
.clip(MaterialTheme.shapes.large)
)
@@ -77,7 +77,7 @@ fun SourceItem(
@Preview
@Composable
fun SourceItemPreview() {
- TokushoTheme {
+ EtsudokuTheme {
SourceItem(
coil = ImageLoader(LocalContext.current),
faviconUrl = "".toUri(),
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/Tab.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/Tab.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/Tab.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/Tab.kt
index 69046dd..bafff82 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/Tab.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/Tab.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Row
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/TopAppBar.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/TopAppBar.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/core/components/TopAppBar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/TopAppBar.kt
index b902d39..d06e061 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/TopAppBar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/TopAppBar.kt
@@ -1,8 +1,12 @@
-package org.xtimms.tokusho.core.components
+package org.xtimms.etsudoku.core.components
import android.graphics.Path
import android.view.animation.PathInterpolator
import androidx.compose.animation.AnimatedVisibility
+import androidx.compose.animation.animateColorAsState
+import androidx.compose.animation.core.FastOutLinearInEasing
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.spring
import androidx.compose.animation.core.tween
import androidx.compose.animation.fadeIn
import androidx.compose.animation.fadeOut
@@ -10,15 +14,28 @@ import androidx.compose.animation.slideInHorizontally
import androidx.compose.animation.slideOutHorizontally
import androidx.compose.foundation.background
import androidx.compose.foundation.basicMarquee
+import androidx.compose.foundation.border
import androidx.compose.foundation.layout.Arrangement
+import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.ExperimentalLayoutApi
+import androidx.compose.foundation.layout.FlowRow
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.RowScope
+import androidx.compose.foundation.layout.WindowInsets
+import androidx.compose.foundation.layout.WindowInsetsSides
+import androidx.compose.foundation.layout.consumeWindowInsets
import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
+import androidx.compose.foundation.layout.navigationBars
+import androidx.compose.foundation.layout.only
import androidx.compose.foundation.layout.padding
+import androidx.compose.foundation.layout.size
+import androidx.compose.foundation.layout.statusBarsPadding
+import androidx.compose.foundation.layout.systemBars
+import androidx.compose.foundation.lazy.LazyColumn
import androidx.compose.foundation.lazy.LazyRow
import androidx.compose.foundation.lazy.items
import androidx.compose.foundation.shape.RoundedCornerShape
@@ -26,6 +43,7 @@ import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.filled.Menu
import androidx.compose.material.icons.outlined.RssFeed
import androidx.compose.material.icons.outlined.Search
+import androidx.compose.material.icons.outlined.SentimentSatisfiedAlt
import androidx.compose.material.icons.outlined.Settings
import androidx.compose.material3.Card
import androidx.compose.material3.CardDefaults
@@ -36,11 +54,14 @@ import androidx.compose.material3.LargeTopAppBar
import androidx.compose.material3.LocalMinimumInteractiveComponentEnforcement
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.MediumTopAppBar
+import androidx.compose.material3.Scaffold
import androidx.compose.material3.SuggestionChip
+import androidx.compose.material3.Surface
import androidx.compose.material3.Text
import androidx.compose.material3.TopAppBarColors
import androidx.compose.material3.TopAppBarDefaults
import androidx.compose.material3.TopAppBarScrollBehavior
+import androidx.compose.material3.rememberTopAppBarState
import androidx.compose.material3.surfaceColorAtElevation
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
@@ -49,34 +70,42 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
+import androidx.compose.ui.graphics.Color
+import androidx.compose.ui.graphics.Color.Companion.Blue
+import androidx.compose.ui.graphics.Color.Companion.DarkGray
+import androidx.compose.ui.graphics.lerp
+import androidx.compose.ui.input.nestedscroll.nestedScroll
+import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.navigation.NavController
+import androidx.navigation.NavHostController
import androidx.navigation.compose.currentBackStackEntryAsState
-import kotlinx.collections.immutable.persistentListOf
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.DURATION_ENTER
-import org.xtimms.tokusho.core.DURATION_EXIT
-import org.xtimms.tokusho.core.initialOffset
-import org.xtimms.tokusho.core.motion.materialSharedAxisXIn
-import org.xtimms.tokusho.core.motion.materialSharedAxisXOut
-import org.xtimms.tokusho.core.toEasing
-import org.xtimms.tokusho.sections.explore.EXPLORE_DESTINATION
-import org.xtimms.tokusho.sections.feed.FEED_DESTINATION
-import org.xtimms.tokusho.sections.history.HISTORY_DESTINATION
-import org.xtimms.tokusho.sections.search.SEARCH_DESTINATION
-import org.xtimms.tokusho.sections.settings.SETTINGS_DESTINATION
-import org.xtimms.tokusho.sections.shelf.SHELF_DESTINATION
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.DURATION_ENTER
+import org.xtimms.etsudoku.core.DURATION_EXIT
+import org.xtimms.etsudoku.core.initialOffset
+import org.xtimms.etsudoku.core.toEasing
+import org.xtimms.etsudoku.sections.explore.EXPLORE_DESTINATION
+import org.xtimms.etsudoku.sections.feed.FEED_DESTINATION
+import org.xtimms.etsudoku.sections.history.HISTORY_DESTINATION
+import org.xtimms.etsudoku.sections.search.SEARCH_DESTINATION
+import org.xtimms.etsudoku.sections.settings.SETTINGS_DESTINATION
+import org.xtimms.etsudoku.sections.shelf.SHELF_DESTINATION
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import java.time.LocalDate
+import java.time.format.DateTimeFormatter
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun TopAppBar(
navController: NavController,
modifier: Modifier = Modifier,
backgroundAlphaProvider: () -> Float,
+ searchBarColorProvider: () -> Color,
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
@@ -91,6 +120,12 @@ fun TopAppBar(
}
}
+ val aprilFoolsDay = LocalDate.of(LocalDate.now().year, 4, 1)
+ val dtStart = aprilFoolsDay.format(DateTimeFormatter.ISO_DATE)
+ val currentDt = LocalDate.now()
+
+ val isAprilFoolsDay = currentDt.format(DateTimeFormatter.ISO_DATE).equals(dtStart)
+
val path = Path().apply {
moveTo(0f, 0f)
cubicTo(0.05F, 0F, 0.133333F, 0.06F, 0.166666F, 0.4F)
@@ -133,9 +168,7 @@ fun TopAppBar(
.height(56.dp)
.padding(start = 16.dp),
shape = RoundedCornerShape(50),
- colors = CardDefaults.cardColors(
- containerColor = MaterialTheme.colorScheme.surfaceColorAtElevation(6.dp)
- ),
+ colors = CardDefaults.cardColors().copy(containerColor = searchBarColorProvider()),
) {
Row(
modifier = Modifier
@@ -145,7 +178,7 @@ fun TopAppBar(
verticalAlignment = Alignment.CenterVertically
) {
Icon(
- imageVector = Icons.Outlined.Search,
+ imageVector = if (isAprilFoolsDay) Icons.Outlined.SentimentSatisfiedAlt else Icons.Outlined.Search,
contentDescription = "search",
tint = MaterialTheme.colorScheme.outline
)
@@ -202,7 +235,7 @@ fun DefaultTopAppBar(
)
}
-@OptIn(ExperimentalMaterial3Api::class, ExperimentalLayoutApi::class)
+@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun SmallTopAppBarWithChips(
title: String,
@@ -295,78 +328,4 @@ fun AppBarTitle(
)
}
}
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Preview
-@Composable
-fun DefaultTopAppBarPreview() {
- TokushoTheme {
- DefaultTopAppBar(
- title = "Tokusho",
- actions = {
- IconButton(onClick = { /*TODO*/ }) {
- Icon(
- imageVector = Icons.Filled.Menu,
- contentDescription = "Localized description"
- )
- }
- },
- navigateBack = {}
- )
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Preview
-@Composable
-fun DefaultTopAppBarWithChipsPreview() {
- TokushoTheme {
- SmallTopAppBarWithChips(
- title = "Tokusho",
- chips = listOf(
- "Chip 1",
- "Chip 2",
- "Chip 3",
- "Chip 4",
- "Chip 1",
- "Chip 2",
- "Chip 3",
- "Chip 4"
- ),
- navigateBack = {}
- )
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Preview
-@Composable
-fun SmallTopAppBarPreview() {
- TokushoTheme {
- SmallTopAppBar(
- title = "Tokusho",
- navigateBack = {}
- )
- }
-}
-
-@OptIn(ExperimentalMaterial3Api::class)
-@Preview
-@Composable
-fun ClassicTopAppBarPreview() {
- TokushoTheme {
- ClassicTopAppBar(
- title = "Tokusho",
- navigateBack = {},
- actions = {
- IconButton(onClick = { /*TODO*/ }) {
- Icon(
- imageVector = Icons.Filled.Menu,
- contentDescription = "Localized description"
- )
- }
- }
- )
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/effects/ListAnimation.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/effects/ListAnimation.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/components/effects/ListAnimation.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/effects/ListAnimation.kt
index efd1520..b7646fe 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/effects/ListAnimation.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/effects/ListAnimation.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.effects
+package org.xtimms.etsudoku.core.components.effects
import android.annotation.SuppressLint
import androidx.compose.animation.AnimatedVisibility
@@ -22,7 +22,7 @@ import androidx.recyclerview.widget.DiffUtil
import androidx.recyclerview.widget.ListUpdateCallback
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
import java.time.Instant
enum class RowEntityType { Header, Item }
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/effects/Snowflake.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/effects/Snowflake.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/components/effects/Snowflake.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/effects/Snowflake.kt
index 82804b9..21d0344 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/effects/Snowflake.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/effects/Snowflake.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.effects
+package org.xtimms.etsudoku.core.components.effects
import androidx.compose.animation.core.LinearEasing
import androidx.compose.animation.core.RepeatMode
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/icons/ArrowDecisionOutline.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/ArrowDecisionOutline.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/components/icons/ArrowDecisionOutline.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/icons/ArrowDecisionOutline.kt
index 65db733..2f885b1 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/icons/ArrowDecisionOutline.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/ArrowDecisionOutline.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.icons
+package org.xtimms.etsudoku.core.components.icons
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.materialIcon
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/icons/Dice.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/Dice.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/icons/Dice.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/icons/Dice.kt
index 7533a40..483bf20 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/icons/Dice.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/Dice.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.icons
+package org.xtimms.etsudoku.core.components.icons
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.materialIcon
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/icons/Kotatsu.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/Kotatsu.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/core/components/icons/Kotatsu.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/icons/Kotatsu.kt
index 037cfc2..75c4635 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/icons/Kotatsu.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/icons/Kotatsu.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.icons
+package org.xtimms.etsudoku.core.components.icons
import androidx.compose.material.icons.Icons
import androidx.compose.ui.graphics.Color
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/shape/WavyShape.kt b/app/src/main/java/org/xtimms/etsudoku/core/components/shape/WavyShape.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/components/shape/WavyShape.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/components/shape/WavyShape.kt
index f69a59b..628478d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/components/shape/WavyShape.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/components/shape/WavyShape.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.components.shape
+package org.xtimms.etsudoku.core.components.shape
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/DatabasePrePopulateCallback.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/DatabasePrePopulateCallback.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/core/database/DatabasePrePopulateCallback.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/DatabasePrePopulateCallback.kt
index 290d964..ea2df28 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/DatabasePrePopulateCallback.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/DatabasePrePopulateCallback.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.core.database
+package org.xtimms.etsudoku.core.database
import android.content.res.Resources
import androidx.room.RoomDatabase
import androidx.sqlite.db.SupportSQLiteDatabase
import org.koitharu.kotatsu.parsers.model.SortOrder
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
class DatabasePrePopulateCallback(private val resources: Resources) : RoomDatabase.Callback() {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/TokushoDatabase.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/EtsudokuDatabase.kt
similarity index 52%
rename from app/src/main/java/org/xtimms/tokusho/core/database/TokushoDatabase.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/EtsudokuDatabase.kt
index 1be0e93..79ba219 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/TokushoDatabase.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/EtsudokuDatabase.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database
+package org.xtimms.etsudoku.core.database
import android.content.Context
import androidx.room.Database
@@ -10,28 +10,28 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.isActive
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.core.database.dao.BookmarksDao
-import org.xtimms.tokusho.core.database.dao.FavouriteCategoriesDao
-import org.xtimms.tokusho.core.database.dao.FavouritesDao
-import org.xtimms.tokusho.core.database.dao.HistoryDao
-import org.xtimms.tokusho.core.database.dao.MangaDao
-import org.xtimms.tokusho.core.database.dao.MangaSourcesDao
-import org.xtimms.tokusho.core.database.dao.SuggestionDao
-import org.xtimms.tokusho.core.database.dao.TagsDao
-import org.xtimms.tokusho.core.database.dao.TrackLogsDao
-import org.xtimms.tokusho.core.database.dao.TracksDao
-import org.xtimms.tokusho.core.database.entity.BookmarkEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.MangaSourceEntity
-import org.xtimms.tokusho.core.database.entity.MangaTagsEntity
-import org.xtimms.tokusho.core.database.entity.SuggestionEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
-import org.xtimms.tokusho.core.database.entity.TrackEntity
-import org.xtimms.tokusho.core.database.entity.TrackLogEntity
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.core.database.dao.BookmarksDao
+import org.xtimms.etsudoku.core.database.dao.FavouriteCategoriesDao
+import org.xtimms.etsudoku.core.database.dao.FavouritesDao
+import org.xtimms.etsudoku.core.database.dao.HistoryDao
+import org.xtimms.etsudoku.core.database.dao.MangaDao
+import org.xtimms.etsudoku.core.database.dao.MangaSourcesDao
+import org.xtimms.etsudoku.core.database.dao.SuggestionDao
+import org.xtimms.etsudoku.core.database.dao.TagsDao
+import org.xtimms.etsudoku.core.database.dao.TrackLogsDao
+import org.xtimms.etsudoku.core.database.dao.TracksDao
+import org.xtimms.etsudoku.core.database.entity.BookmarkEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.MangaSourceEntity
+import org.xtimms.etsudoku.core.database.entity.MangaTagsEntity
+import org.xtimms.etsudoku.core.database.entity.SuggestionEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.TrackEntity
+import org.xtimms.etsudoku.core.database.entity.TrackLogEntity
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
const val DATABASE_VERSION = 1
@@ -51,7 +51,7 @@ const val DATABASE_VERSION = 1
],
version = DATABASE_VERSION
)
-abstract class TokushoDatabase : RoomDatabase() {
+abstract class EtsudokuDatabase : RoomDatabase() {
abstract fun getTagsDao(): TagsDao
@@ -75,8 +75,8 @@ abstract class TokushoDatabase : RoomDatabase() {
}
-fun TokushoDatabase(context: Context): TokushoDatabase = Room
- .databaseBuilder(context, TokushoDatabase::class.java, "tokusho-db")
+fun EtsudokuDatabase(context: Context): EtsudokuDatabase = Room
+ .databaseBuilder(context, EtsudokuDatabase::class.java, "etsudoku-db")
.addCallback(DatabasePrePopulateCallback(context.resources))
.build()
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/Tables.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/Tables.kt
similarity index 68%
rename from app/src/main/java/org/xtimms/tokusho/core/database/Tables.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/Tables.kt
index c4502f9..e650a65 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/Tables.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/Tables.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database
+package org.xtimms.etsudoku.core.database
const val TABLE_MANGA = "manga"
const val TABLE_TAGS = "tags"
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/BookmarksDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/BookmarksDao.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/BookmarksDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/BookmarksDao.kt
index aa88c69..84e1306 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/BookmarksDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/BookmarksDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Delete
@@ -7,8 +7,8 @@ import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Upsert
import kotlinx.coroutines.flow.Flow
-import org.xtimms.tokusho.core.database.entity.BookmarkEntity
-import org.xtimms.tokusho.core.database.entity.MangaWithTags
+import org.xtimms.etsudoku.core.database.entity.BookmarkEntity
+import org.xtimms.etsudoku.core.database.entity.MangaWithTags
@Dao
abstract class BookmarksDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouriteCategoriesDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouriteCategoriesDao.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouriteCategoriesDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouriteCategoriesDao.kt
index db49911..78a472a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouriteCategoriesDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouriteCategoriesDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Insert
@@ -6,7 +6,7 @@ import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Upsert
import kotlinx.coroutines.flow.Flow
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
@Dao
abstract class FavouriteCategoriesDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouritesDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouritesDao.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouritesDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouritesDao.kt
index c8846dc..c04df58 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/FavouritesDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/FavouritesDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Insert
@@ -11,10 +11,10 @@ import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery
import kotlinx.coroutines.flow.Flow
import org.intellij.lang.annotations.Language
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.model.ListSortOrder
-import org.xtimms.tokusho.sections.shelf.FavouriteManga
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.model.ListSortOrder
+import org.xtimms.etsudoku.sections.shelf.FavouriteManga
@Dao
abstract class FavouritesDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/HistoryDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/HistoryDao.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/HistoryDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/HistoryDao.kt
index ccae10a..f0a9519 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/HistoryDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/HistoryDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Insert
@@ -10,11 +10,11 @@ import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery
import kotlinx.coroutines.flow.Flow
import org.intellij.lang.annotations.Language
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.HistoryWithManga
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
-import org.xtimms.tokusho.core.model.ListSortOrder
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.HistoryWithManga
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.model.ListSortOrder
@Dao
abstract class HistoryDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaDao.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaDao.kt
index fabb76d..a53850f 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Delete
@@ -8,10 +8,10 @@ import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import androidx.room.Upsert
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.MangaTagsEntity
-import org.xtimms.tokusho.core.database.entity.MangaWithTags
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.MangaTagsEntity
+import org.xtimms.etsudoku.core.database.entity.MangaWithTags
+import org.xtimms.etsudoku.core.database.entity.TagEntity
@Dao
abstract class MangaDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaSourcesDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaSourcesDao.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaSourcesDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaSourcesDao.kt
index 3edf3dd..b616dc0 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/MangaSourcesDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/MangaSourcesDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Query
@@ -9,8 +9,8 @@ import androidx.sqlite.db.SimpleSQLiteQuery
import androidx.sqlite.db.SupportSQLiteQuery
import kotlinx.coroutines.flow.Flow
import org.intellij.lang.annotations.Language
-import org.xtimms.tokusho.core.database.entity.MangaSourceEntity
-import org.xtimms.tokusho.sections.explore.data.SourcesSortOrder
+import org.xtimms.etsudoku.core.database.entity.MangaSourceEntity
+import org.xtimms.etsudoku.sections.explore.data.SourcesSortOrder
@Dao
abstract class MangaSourcesDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/SuggestionDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/SuggestionDao.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/SuggestionDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/SuggestionDao.kt
index 0c5b711..fd9a88a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/SuggestionDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/SuggestionDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Insert
@@ -7,8 +7,8 @@ import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Update
import kotlinx.coroutines.flow.Flow
-import org.xtimms.tokusho.core.database.entity.SuggestionEntity
-import org.xtimms.tokusho.core.database.entity.SuggestionWithManga
+import org.xtimms.etsudoku.core.database.entity.SuggestionEntity
+import org.xtimms.etsudoku.core.database.entity.SuggestionWithManga
@Dao
abstract class SuggestionDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TagsDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TagsDao.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/TagsDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/TagsDao.kt
index 9d16a6a..ca23847 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TagsDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TagsDao.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Query
import androidx.room.Upsert
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
@Dao
abstract class TagsDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TrackLogsDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TrackLogsDao.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/TrackLogsDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/TrackLogsDao.kt
index 7fa66b8..3929702 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TrackLogsDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TrackLogsDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.Insert
@@ -6,8 +6,8 @@ import androidx.room.OnConflictStrategy
import androidx.room.Query
import androidx.room.Transaction
import kotlinx.coroutines.flow.Flow
-import org.xtimms.tokusho.core.database.entity.TrackLogEntity
-import org.xtimms.tokusho.core.database.entity.TrackLogWithManga
+import org.xtimms.etsudoku.core.database.entity.TrackLogEntity
+import org.xtimms.etsudoku.core.database.entity.TrackLogWithManga
@Dao
interface TrackLogsDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TracksDao.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TracksDao.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/dao/TracksDao.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/dao/TracksDao.kt
index 17469ac..c057e72 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/dao/TracksDao.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/dao/TracksDao.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.dao
+package org.xtimms.etsudoku.core.database.dao
import androidx.room.Dao
import androidx.room.MapColumn
@@ -6,8 +6,8 @@ import androidx.room.Query
import androidx.room.Transaction
import androidx.room.Upsert
import kotlinx.coroutines.flow.Flow
-import org.xtimms.tokusho.core.database.entity.MangaWithTags
-import org.xtimms.tokusho.core.database.entity.TrackEntity
+import org.xtimms.etsudoku.core.database.entity.MangaWithTags
+import org.xtimms.etsudoku.core.database.entity.TrackEntity
@Dao
abstract class TracksDao {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/BookmarksEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/BookmarksEntity.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/BookmarksEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/BookmarksEntity.kt
index 73e06b0..e04423e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/BookmarksEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/BookmarksEntity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/EntityMapping.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/EntityMapping.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/EntityMapping.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/EntityMapping.kt
index af0abcb..cdace44 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/EntityMapping.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/EntityMapping.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaState
@@ -6,14 +6,14 @@ import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.mapToSet
import org.koitharu.kotatsu.parsers.util.toTitleCase
-import org.xtimms.tokusho.core.model.Bookmark
-import org.xtimms.tokusho.core.model.FavouriteCategory
-import org.xtimms.tokusho.core.model.ListSortOrder
-import org.xtimms.tokusho.core.model.MangaHistory
-import org.xtimms.tokusho.core.model.MangaSource
-import org.xtimms.tokusho.core.tracker.model.TrackingLogItem
-import org.xtimms.tokusho.sections.shelf.FavouriteManga
-import org.xtimms.tokusho.utils.lang.longHashCode
+import org.xtimms.etsudoku.core.model.Bookmark
+import org.xtimms.etsudoku.core.model.FavouriteCategory
+import org.xtimms.etsudoku.core.model.ListSortOrder
+import org.xtimms.etsudoku.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.MangaSource
+import org.xtimms.etsudoku.core.tracker.model.TrackingLogItem
+import org.xtimms.etsudoku.sections.shelf.FavouriteManga
+import org.xtimms.etsudoku.utils.lang.longHashCode
import java.time.Instant
// Entity to model
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteCategoryEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteCategoryEntity.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteCategoryEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteCategoryEntity.kt
index 38f0e5b..0eae11a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteCategoryEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteCategoryEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import org.xtimms.tokusho.core.database.TABLE_FAVOURITE_CATEGORIES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITE_CATEGORIES
@Entity(tableName = TABLE_FAVOURITE_CATEGORIES)
data class FavouriteCategoryEntity(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteEntity.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteEntity.kt
index 8015894..eb6db38 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/FavouriteEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/FavouriteEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
-import org.xtimms.tokusho.core.database.TABLE_FAVOURITES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITES
@Entity(
tableName = TABLE_FAVOURITES,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryEntity.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryEntity.kt
index a4702f4..14b433d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryEntity.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
import androidx.room.PrimaryKey
-import org.xtimms.tokusho.core.database.TABLE_HISTORY
+import org.xtimms.etsudoku.core.database.TABLE_HISTORY
@Entity(
tableName = TABLE_HISTORY,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryWithManga.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryWithManga.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryWithManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryWithManga.kt
index 87c727d..e1ad231 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/HistoryWithManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/HistoryWithManga.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.Embedded
import androidx.room.Junction
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaEntity.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaEntity.kt
index 9054365..19cb873 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import org.xtimms.tokusho.core.database.TABLE_MANGA
+import org.xtimms.etsudoku.core.database.TABLE_MANGA
@Entity(tableName = TABLE_MANGA)
data class MangaEntity(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaSourceEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaSourceEntity.kt
similarity index 78%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaSourceEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaSourceEntity.kt
index a396394..40d2cce 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaSourceEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaSourceEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import org.xtimms.tokusho.core.database.TABLE_SOURCES
+import org.xtimms.etsudoku.core.database.TABLE_SOURCES
@Entity(tableName = TABLE_SOURCES)
data class MangaSourceEntity(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaTagsEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaTagsEntity.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaTagsEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaTagsEntity.kt
index be88d2d..bc0bfad 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaTagsEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaTagsEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.ForeignKey
-import org.xtimms.tokusho.core.database.TABLE_MANGA_TAGS
+import org.xtimms.etsudoku.core.database.TABLE_MANGA_TAGS
@Entity(
tableName = TABLE_MANGA_TAGS,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaWithTags.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaWithTags.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaWithTags.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaWithTags.kt
index afeb68f..47d6080 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/MangaWithTags.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/MangaWithTags.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.Embedded
import androidx.room.Junction
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionEntity.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionEntity.kt
index d36c538..d0cdfd4 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionEntity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.annotation.FloatRange
import androidx.room.ColumnInfo
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionWithManga.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionWithManga.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionWithManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionWithManga.kt
index 972733f..82a7409 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/SuggestionWithManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/SuggestionWithManga.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.Embedded
import androidx.room.Junction
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TagEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TagEntity.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/TagEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/TagEntity.kt
index bc8c062..4c41b78 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TagEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TagEntity.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
import androidx.room.PrimaryKey
-import org.xtimms.tokusho.core.database.TABLE_TAGS
+import org.xtimms.etsudoku.core.database.TABLE_TAGS
@Entity(tableName = TABLE_TAGS)
data class TagEntity(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackEntity.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackEntity.kt
index a398e25..2ace75a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackEntity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogEntity.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogEntity.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogEntity.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogEntity.kt
index 179f8e9..4e0c7a1 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogEntity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogEntity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.ColumnInfo
import androidx.room.Entity
diff --git a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogWithManga.kt b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogWithManga.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogWithManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogWithManga.kt
index dd9ebe2..9547846 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/database/entity/TrackLogWithManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/database/entity/TrackLogWithManga.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.database.entity
+package org.xtimms.etsudoku.core.database.entity
import androidx.room.Embedded
import androidx.room.Junction
diff --git a/app/src/main/java/org/xtimms/tokusho/core/exceptions/CloudflareProtectedException.kt b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/CloudflareProtectedException.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/core/exceptions/CloudflareProtectedException.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/exceptions/CloudflareProtectedException.kt
index 079aa1d..3ec0e48 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/exceptions/CloudflareProtectedException.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/CloudflareProtectedException.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.exceptions
+package org.xtimms.etsudoku.core.exceptions
import okhttp3.Headers
import okio.IOException
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/exceptions/SyncApiException.kt b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/SyncApiException.kt
new file mode 100644
index 0000000..ee5c9bb
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/SyncApiException.kt
@@ -0,0 +1,6 @@
+package org.xtimms.etsudoku.core.exceptions
+
+class SyncApiException(
+ message: String,
+ val code: Int,
+) : RuntimeException(message)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/exceptions/TooManyRequestExceptions.kt b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/TooManyRequestExceptions.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/core/exceptions/TooManyRequestExceptions.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/exceptions/TooManyRequestExceptions.kt
index 351963f..7f1d1d3 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/exceptions/TooManyRequestExceptions.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/exceptions/TooManyRequestExceptions.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.exceptions
+package org.xtimms.etsudoku.core.exceptions
import okio.IOException
import java.time.Instant
diff --git a/app/src/main/java/org/xtimms/tokusho/core/logs/FileLogger.kt b/app/src/main/java/org/xtimms/etsudoku/core/logs/FileLogger.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/logs/FileLogger.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/logs/FileLogger.kt
index 8ebbaf7..c5b67b9 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/logs/FileLogger.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/logs/FileLogger.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.logs
+package org.xtimms.etsudoku.core.logs
import android.content.Context
import androidx.annotation.WorkerThread
@@ -14,9 +14,9 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import kotlinx.coroutines.withContext
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
-import org.xtimms.tokusho.utils.system.subdir
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.system.subdir
import java.io.File
import java.io.FileOutputStream
import java.time.LocalDateTime
diff --git a/app/src/main/java/org/xtimms/tokusho/core/logs/Loggers.kt b/app/src/main/java/org/xtimms/etsudoku/core/logs/Loggers.kt
similarity index 71%
rename from app/src/main/java/org/xtimms/tokusho/core/logs/Loggers.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/logs/Loggers.kt
index 1478083..aeea3a5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/logs/Loggers.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/logs/Loggers.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.logs
+package org.xtimms.etsudoku.core.logs
import javax.inject.Qualifier
diff --git a/app/src/main/java/org/xtimms/tokusho/core/logs/LoggersModule.kt b/app/src/main/java/org/xtimms/etsudoku/core/logs/LoggersModule.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/logs/LoggersModule.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/logs/LoggersModule.kt
index 9f21107..34bd8fe 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/logs/LoggersModule.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/logs/LoggersModule.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.logs
+package org.xtimms.etsudoku.core.logs
import android.content.Context
import androidx.collection.arraySetOf
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/Bookmark.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/Bookmark.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/core/model/Bookmark.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/Bookmark.kt
index ce21490..83ff2e1 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/Bookmark.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/Bookmark.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaPage
-import org.xtimms.tokusho.utils.hasImageExtension
+import org.xtimms.etsudoku.utils.hasImageExtension
import java.time.Instant
data class Bookmark(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/FavouriteCategory.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/FavouriteCategory.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/model/FavouriteCategory.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/FavouriteCategory.kt
index 254bf85..9da2371 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/FavouriteCategory.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/FavouriteCategory.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/ListModel.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/ListModel.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/core/model/ListModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/ListModel.kt
index eeba04b..4f97c7d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/ListModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/ListModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
interface ListModel {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/ListSortOrder.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/ListSortOrder.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/model/ListSortOrder.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/ListSortOrder.kt
index 7b04905..e2b2186 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/ListSortOrder.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/ListSortOrder.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import androidx.annotation.StringRes
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
import org.koitharu.kotatsu.parsers.util.find
import java.util.EnumSet
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/LocalManga.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/LocalManga.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/core/model/LocalManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/LocalManga.kt
index 41b97b4..d95ac7c 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/LocalManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/LocalManga.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import androidx.core.net.toFile
import androidx.core.net.toUri
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaTag
-import org.xtimms.tokusho.utils.system.creationTime
+import org.xtimms.etsudoku.utils.system.creationTime
import java.io.File
data class LocalManga(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/Manga.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/Manga.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/model/Manga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/Manga.kt
index 012658c..6ee72e8 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/Manga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/Manga.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import androidx.core.os.LocaleListCompat
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.utils.system.iterator
+import org.xtimms.etsudoku.utils.system.iterator
import java.text.DecimalFormat
import java.text.DecimalFormatSymbols
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/MangaHistory.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaHistory.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/core/model/MangaHistory.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/MangaHistory.kt
index 91f6450..cf12c42 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/MangaHistory.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaHistory.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/MangaSource.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaSource.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/core/model/MangaSource.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/MangaSource.kt
index ad722af..e1309e5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/MangaSource.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaSource.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/MangaSuggestion.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaSuggestion.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/core/model/MangaSuggestion.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/MangaSuggestion.kt
index fa0fb56..191a644 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/MangaSuggestion.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaSuggestion.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import androidx.annotation.FloatRange
import org.koitharu.kotatsu.parsers.model.Manga
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/MangaWithHistory.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaWithHistory.kt
similarity index 76%
rename from app/src/main/java/org/xtimms/tokusho/core/model/MangaWithHistory.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/MangaWithHistory.kt
index 31b9908..4764dcc 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/MangaWithHistory.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/MangaWithHistory.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import org.koitharu.kotatsu.parsers.model.Manga
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/ShelfCategory.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/ShelfCategory.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/model/ShelfCategory.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/ShelfCategory.kt
index a64b448..1b3dba6 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/ShelfCategory.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/ShelfCategory.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import java.io.Serializable
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/TagsBlacklist.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/TagsBlacklist.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/model/TagsBlacklist.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/TagsBlacklist.kt
index 222566e..7ff4ab1 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/TagsBlacklist.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/TagsBlacklist.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model
+package org.xtimms.etsudoku.core.model
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaTag
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcelableMangaTags.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcelableMangaTags.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcelableMangaTags.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcelableMangaTags.kt
index 68d5844..cd1920e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcelableMangaTags.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcelableMangaTags.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model.parcelable
+package org.xtimms.etsudoku.core.model.parcelable
import android.os.Parcel
import android.os.Parcelable
@@ -6,7 +6,7 @@ import kotlinx.parcelize.Parceler
import kotlinx.parcelize.Parcelize
import kotlinx.parcelize.TypeParceler
import org.koitharu.kotatsu.parsers.model.MangaTag
-import org.xtimms.tokusho.utils.lang.readSerializableCompat
+import org.xtimms.etsudoku.utils.lang.readSerializableCompat
object MangaTagParceler : Parceler {
override fun create(parcel: Parcel) = MangaTag(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcerableManga.kt b/app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcerableManga.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcerableManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcerableManga.kt
index 25f4995..f1ca97e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/model/parcelable/ParcerableManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/model/parcelable/ParcerableManga.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.model.parcelable
+package org.xtimms.etsudoku.core.model.parcelable
import android.os.Parcel
import android.os.Parcelable
@@ -6,8 +6,8 @@ import androidx.core.os.ParcelCompat
import kotlinx.parcelize.Parceler
import kotlinx.parcelize.Parcelize
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.utils.lang.readParcelableCompat
-import org.xtimms.tokusho.utils.lang.readSerializableCompat
+import org.xtimms.etsudoku.utils.lang.readParcelableCompat
+import org.xtimms.etsudoku.utils.lang.readSerializableCompat
@Parcelize
data class ParcelableManga(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/MaterialSharedAxis.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/MaterialSharedAxis.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/MaterialSharedAxis.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/MaterialSharedAxis.kt
index 1097886..aedce3d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/MaterialSharedAxis.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/MaterialSharedAxis.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion
+package org.xtimms.etsudoku.core.motion
import androidx.compose.animation.ContentTransform
import androidx.compose.animation.EnterTransition
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/MotionConstants.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/MotionConstants.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/MotionConstants.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/MotionConstants.kt
index 9a60d23..92b9e44 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/MotionConstants.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/MotionConstants.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion
+package org.xtimms.etsudoku.core.motion
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/DelayExit.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/DelayExit.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/DelayExit.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/DelayExit.kt
index 8a5f3fe..8e01389 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/DelayExit.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/DelayExit.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ElementContainer.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ElementContainer.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ElementContainer.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ElementContainer.kt
index 9d81365..f0f1d9b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ElementContainer.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ElementContainer.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/KeyframeBasedMotion.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/KeyframeBasedMotion.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/KeyframeBasedMotion.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/KeyframeBasedMotion.kt
index e13e65f..31d39c8 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/KeyframeBasedMotion.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/KeyframeBasedMotion.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.lerp
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MaterialArcMotion.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MaterialArcMotion.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MaterialArcMotion.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MaterialArcMotion.kt
index 69149e7..b68ad8e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MaterialArcMotion.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MaterialArcMotion.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.ui.geometry.Offset
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MathUtils.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MathUtils.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MathUtils.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MathUtils.kt
index 42d8bb3..40d3dee 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/MathUtils.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/MathUtils.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.Rect
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/PathMotion.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/PathMotion.kt
similarity index 68%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/PathMotion.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/PathMotion.kt
index 99f68fb..5d34f6a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/PathMotion.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/PathMotion.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.ui.geometry.Offset
import androidx.compose.ui.geometry.lerp
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ProgressThresholds.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ProgressThresholds.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ProgressThresholds.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ProgressThresholds.kt
index bff3b60..9f6c1e4 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/ProgressThresholds.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/ProgressThresholds.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.runtime.Immutable
import androidx.compose.runtime.Stable
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/QuadraticBezier.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/QuadraticBezier.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/QuadraticBezier.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/QuadraticBezier.kt
index 902cbb5..cb5446b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/QuadraticBezier.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/QuadraticBezier.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.ui.geometry.Offset
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElement.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElement.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElement.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElement.kt
index 97bd2fa..95d095a 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElement.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElement.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.foundation.layout.offset
import androidx.compose.foundation.layout.size
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsRoot.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsRoot.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsRoot.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsRoot.kt
index 6eb68e2..33887a9 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsRoot.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsRoot.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import android.view.Choreographer
import androidx.compose.animation.core.Animatable
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsTransitionSpec.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsTransitionSpec.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsTransitionSpec.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsTransitionSpec.kt
index 8a58355..7348763 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedElementsTransitionSpec.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedElementsTransitionSpec.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.animation.core.AnimationConstants
import androidx.compose.animation.core.Easing
diff --git a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedMaterialContainer.kt b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedMaterialContainer.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedMaterialContainer.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedMaterialContainer.kt
index 14faba1..d9a5e56 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/motion/sharedelements/SharedMaterialContainer.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/motion/sharedelements/SharedMaterialContainer.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.motion.sharedelements
+package org.xtimms.etsudoku.core.motion.sharedelements
import androidx.compose.animation.core.AnimationConstants
import androidx.compose.animation.core.Easing
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/CommonHeaders.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/CommonHeaders.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/network/CommonHeaders.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/CommonHeaders.kt
index ef44c9b..5861787 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/CommonHeaders.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/CommonHeaders.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network
+package org.xtimms.etsudoku.core.network
import okhttp3.CacheControl
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/HttpClients.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/HttpClients.kt
similarity index 69%
rename from app/src/main/java/org/xtimms/tokusho/core/network/HttpClients.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/HttpClients.kt
index 6e25b0e..7def503 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/HttpClients.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/HttpClients.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network
+package org.xtimms.etsudoku.core.network
import javax.inject.Qualifier
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/NetworkModule.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/NetworkModule.kt
similarity index 75%
rename from app/src/main/java/org/xtimms/tokusho/core/network/NetworkModule.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/NetworkModule.kt
index 31af83f..3059ecb 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/NetworkModule.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/NetworkModule.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network
+package org.xtimms.etsudoku.core.network
import android.content.Context
import android.util.AndroidRuntimeException
@@ -11,16 +11,16 @@ import dagger.hilt.components.SingletonComponent
import okhttp3.Cache
import okhttp3.CookieJar
import okhttp3.OkHttpClient
-import org.xtimms.tokusho.core.network.cookies.AndroidCookieJar
-import org.xtimms.tokusho.core.network.cookies.MutableCookieJar
-import org.xtimms.tokusho.core.network.cookies.PreferencesCookieJar
-import org.xtimms.tokusho.core.network.interceptors.CacheLimitInterceptor
-import org.xtimms.tokusho.core.network.interceptors.CloudflareInterceptor
-import org.xtimms.tokusho.core.network.interceptors.CommonHeadersInterceptor
-import org.xtimms.tokusho.core.network.interceptors.GZipInterceptor
-import org.xtimms.tokusho.core.network.interceptors.RateLimitInterceptor
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.data.LocalStorageManager
+import org.xtimms.etsudoku.core.network.cookies.AndroidCookieJar
+import org.xtimms.etsudoku.core.network.cookies.MutableCookieJar
+import org.xtimms.etsudoku.core.network.cookies.PreferencesCookieJar
+import org.xtimms.etsudoku.core.network.interceptors.CacheLimitInterceptor
+import org.xtimms.etsudoku.core.network.interceptors.CloudflareInterceptor
+import org.xtimms.etsudoku.core.network.interceptors.CommonHeadersInterceptor
+import org.xtimms.etsudoku.core.network.interceptors.GZipInterceptor
+import org.xtimms.etsudoku.core.network.interceptors.RateLimitInterceptor
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.data.LocalStorageManager
import java.util.concurrent.TimeUnit
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/SSLBypass.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/SSLBypass.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/network/SSLBypass.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/SSLBypass.kt
index 5cd8861..bd65bb7 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/SSLBypass.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/SSLBypass.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network
+package org.xtimms.etsudoku.core.network
import android.annotation.SuppressLint
import okhttp3.OkHttpClient
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/AndroidCookieJar.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/AndroidCookieJar.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/network/cookies/AndroidCookieJar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/cookies/AndroidCookieJar.kt
index fcf0e16..765caa3 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/AndroidCookieJar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/AndroidCookieJar.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.core.network.cookies
+package org.xtimms.etsudoku.core.network.cookies
import android.webkit.CookieManager
import androidx.annotation.WorkerThread
import androidx.core.util.Predicate
import okhttp3.Cookie
import okhttp3.HttpUrl
-import org.xtimms.tokusho.utils.system.newBuilder
+import org.xtimms.etsudoku.utils.system.newBuilder
import kotlin.coroutines.resume
import kotlin.coroutines.suspendCoroutine
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/CookieWrapper.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/CookieWrapper.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/network/cookies/CookieWrapper.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/cookies/CookieWrapper.kt
index b6befb7..5c4a9b5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/CookieWrapper.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/CookieWrapper.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network.cookies
+package org.xtimms.etsudoku.core.network.cookies
import android.util.Base64
import okhttp3.Cookie
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/MutableCookieJar.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/MutableCookieJar.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/network/cookies/MutableCookieJar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/cookies/MutableCookieJar.kt
index 32419ce..ec52974 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/MutableCookieJar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/MutableCookieJar.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network.cookies
+package org.xtimms.etsudoku.core.network.cookies
import androidx.annotation.WorkerThread
import androidx.core.util.Predicate
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/PreferencesCookieJar.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/PreferencesCookieJar.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/core/network/cookies/PreferencesCookieJar.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/cookies/PreferencesCookieJar.kt
index 2dc40b7..6de3059 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/cookies/PreferencesCookieJar.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/cookies/PreferencesCookieJar.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network.cookies
+package org.xtimms.etsudoku.core.network.cookies
import android.content.Context
import androidx.annotation.WorkerThread
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CacheLimitInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CacheLimitInterceptor.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CacheLimitInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CacheLimitInterceptor.kt
index c48e8e8..229df8b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CacheLimitInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CacheLimitInterceptor.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import okhttp3.CacheControl
import okhttp3.Interceptor
import okhttp3.Response
-import org.xtimms.tokusho.core.network.CommonHeaders
+import org.xtimms.etsudoku.core.network.CommonHeaders
import java.util.concurrent.TimeUnit
class CacheLimitInterceptor : Interceptor {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CloudflareInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CloudflareInterceptor.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CloudflareInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CloudflareInterceptor.kt
index 6845f84..08b3675 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CloudflareInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CloudflareInterceptor.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import okhttp3.Interceptor
import okhttp3.Response
import okhttp3.internal.closeQuietly
import org.jsoup.Jsoup
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.exceptions.CloudflareProtectedException
+import org.xtimms.etsudoku.core.exceptions.CloudflareProtectedException
import java.net.HttpURLConnection.HTTP_FORBIDDEN
import java.net.HttpURLConnection.HTTP_UNAVAILABLE
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CommonHeadersInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CommonHeadersInterceptor.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CommonHeadersInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CommonHeadersInterceptor.kt
index 9bf02ca..65701a8 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/CommonHeadersInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/CommonHeadersInterceptor.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import android.util.Log
import dagger.Lazy
@@ -9,10 +9,10 @@ import okhttp3.Response
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.network.UserAgents
import org.koitharu.kotatsu.parsers.util.mergeWith
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.network.CommonHeaders
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.RemoteMangaRepository
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.network.CommonHeaders
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.RemoteMangaRepository
import java.net.IDN
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/GZipInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/GZipInterceptor.kt
similarity index 78%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/GZipInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/GZipInterceptor.kt
index d7e4796..86c8172 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/GZipInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/GZipInterceptor.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import okhttp3.Interceptor
import okhttp3.Response
import okio.IOException
-import org.xtimms.tokusho.core.network.CommonHeaders.CONTENT_ENCODING
+import org.xtimms.etsudoku.core.network.CommonHeaders.CONTENT_ENCODING
class GZipInterceptor : Interceptor {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/ImageProxyInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/ImageProxyInterceptor.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/ImageProxyInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/ImageProxyInterceptor.kt
index e09f2a6..0274e38 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/ImageProxyInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/ImageProxyInterceptor.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import android.util.Log
import androidx.collection.ArraySet
@@ -15,10 +15,10 @@ import okhttp3.Request
import okhttp3.Response
import org.koitharu.kotatsu.parsers.util.await
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.utils.system.ensureSuccess
-import org.xtimms.tokusho.utils.system.isHttpOrHttps
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.utils.system.ensureSuccess
+import org.xtimms.etsudoku.utils.system.isHttpOrHttps
import java.util.Collections
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/RateLimitInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/RateLimitInterceptor.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/core/network/interceptors/RateLimitInterceptor.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/RateLimitInterceptor.kt
index 524f589..c15f5f9 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/network/interceptors/RateLimitInterceptor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/network/interceptors/RateLimitInterceptor.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.core.network.interceptors
+package org.xtimms.etsudoku.core.network.interceptors
import okhttp3.Interceptor
import okhttp3.Response
import okhttp3.internal.closeQuietly
-import org.xtimms.tokusho.core.exceptions.TooManyRequestExceptions
-import org.xtimms.tokusho.core.network.CommonHeaders
+import org.xtimms.etsudoku.core.exceptions.TooManyRequestExceptions
+import org.xtimms.etsudoku.core.network.CommonHeaders
import java.time.Instant
import java.time.ZonedDateTime
import java.time.format.DateTimeFormatter
diff --git a/app/src/main/java/org/xtimms/tokusho/core/os/NetworkState.kt b/app/src/main/java/org/xtimms/etsudoku/core/os/NetworkState.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/os/NetworkState.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/os/NetworkState.kt
index 2309c30..c5a51c0 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/os/NetworkState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/os/NetworkState.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.core.os
+package org.xtimms.etsudoku.core.os
import android.net.ConnectivityManager
import android.net.Network
import android.net.NetworkCapabilities
import android.net.NetworkRequest
import kotlinx.coroutines.flow.first
-import org.xtimms.tokusho.utils.MediatorStateFlow
-import org.xtimms.tokusho.utils.system.isOnline
+import org.xtimms.etsudoku.utils.MediatorStateFlow
+import org.xtimms.etsudoku.utils.system.isOnline
class NetworkState(
private val connectivityManager: ConnectivityManager,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/LocalMangaRepository.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/LocalMangaRepository.kt
similarity index 50%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/LocalMangaRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/LocalMangaRepository.kt
index 93d414b..bfabbd5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/LocalMangaRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/LocalMangaRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
private const val MAX_PARALLELISM = 4
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaDataRepository.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaDataRepository.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaDataRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaDataRepository.kt
index ba476a5..1898c18 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaDataRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaDataRepository.kt
@@ -1,18 +1,18 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import androidx.room.withTransaction
import dagger.Reusable
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.toEntities
-import org.xtimms.tokusho.core.database.entity.toEntity
-import org.xtimms.tokusho.core.database.entity.toManga
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.toEntities
+import org.xtimms.etsudoku.core.database.entity.toEntity
+import org.xtimms.etsudoku.core.database.entity.toManga
import javax.inject.Inject
import javax.inject.Provider
@Reusable
class MangaDataRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
private val resolverProvider: Provider,
) {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaIntent.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaIntent.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaIntent.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaIntent.kt
index 4e57f39..f44c41f 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaIntent.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaIntent.kt
@@ -1,14 +1,14 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import android.content.Intent
import android.net.Uri
import android.os.Bundle
import androidx.lifecycle.SavedStateHandle
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.MainActivity
-import org.xtimms.tokusho.core.model.parcelable.ParcelableManga
-import org.xtimms.tokusho.utils.lang.getParcelableCompat
-import org.xtimms.tokusho.utils.lang.getParcelableExtraCompat
+import org.xtimms.etsudoku.MainActivity
+import org.xtimms.etsudoku.core.model.parcelable.ParcelableManga
+import org.xtimms.etsudoku.utils.lang.getParcelableCompat
+import org.xtimms.etsudoku.utils.lang.getParcelableExtraCompat
class MangaIntent private constructor(
@JvmField val manga: Manga?,
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaLinkResolver.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLinkResolver.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaLinkResolver.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLinkResolver.kt
index 94393bf..4cb0c89 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaLinkResolver.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLinkResolver.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import android.net.Uri
import coil.request.CachePolicy
@@ -12,9 +12,9 @@ import org.koitharu.kotatsu.parsers.util.almostEquals
import org.koitharu.kotatsu.parsers.util.levenshteinDistance
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.parsers.util.toRelativeUrl
-import org.xtimms.tokusho.core.model.MangaSource
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.utils.lang.ifNullOrEmpty
+import org.xtimms.etsudoku.core.model.MangaSource
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.utils.lang.ifNullOrEmpty
import javax.inject.Inject
@Reusable
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaLoaderContextImpl.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLoaderContextImpl.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaLoaderContextImpl.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLoaderContextImpl.kt
index 31d16c5..82cdbc5 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaLoaderContextImpl.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaLoaderContextImpl.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import android.annotation.SuppressLint
import android.content.Context
@@ -12,10 +12,10 @@ import okhttp3.OkHttpClient
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.config.MangaSourceConfig
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.network.MangaHttpClient
-import org.xtimms.tokusho.core.network.cookies.MutableCookieJar
-import org.xtimms.tokusho.core.prefs.SourceSettings
-import org.xtimms.tokusho.utils.system.toList
+import org.xtimms.etsudoku.core.network.MangaHttpClient
+import org.xtimms.etsudoku.core.network.cookies.MutableCookieJar
+import org.xtimms.etsudoku.core.prefs.SourceSettings
+import org.xtimms.etsudoku.utils.system.toList
import java.lang.ref.WeakReference
import java.util.Locale
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaParser.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaParser.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaParser.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaParser.kt
index ec87920..5982837 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaParser.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaParser.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import org.koitharu.kotatsu.parsers.MangaLoaderContext
import org.koitharu.kotatsu.parsers.MangaParser
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaRepository.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaRepository.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/MangaRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/MangaRepository.kt
index de92f61..0859cbf 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/MangaRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/MangaRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import androidx.annotation.AnyThread
import org.koitharu.kotatsu.parsers.MangaLoaderContext
@@ -11,8 +11,8 @@ import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder
-import org.xtimms.tokusho.core.cache.ContentCache
-import org.xtimms.tokusho.core.parser.local.LocalMangaRepository
+import org.xtimms.etsudoku.core.cache.ContentCache
+import org.xtimms.etsudoku.core.parser.local.LocalMangaRepository
import java.lang.ref.WeakReference
import java.util.EnumMap
import java.util.Locale
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/RemoteMangaRepository.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/RemoteMangaRepository.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/RemoteMangaRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/RemoteMangaRepository.kt
index 5822d3c..30fa7b0 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/RemoteMangaRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/RemoteMangaRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser
+package org.xtimms.etsudoku.core.parser
import android.util.Log
import coil.request.CachePolicy
@@ -26,11 +26,11 @@ import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.domain
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.cache.ContentCache
-import org.xtimms.tokusho.core.cache.SafeDeferred
-import org.xtimms.tokusho.core.prefs.SourceSettings
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.cache.ContentCache
+import org.xtimms.etsudoku.core.cache.SafeDeferred
+import org.xtimms.etsudoku.core.prefs.SourceSettings
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
import java.util.Locale
@OptIn(InternalParsersApi::class)
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconFetcher.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconFetcher.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconFetcher.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconFetcher.kt
index 1b26401..ae0b45e 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconFetcher.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconFetcher.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.favicon
+package org.xtimms.etsudoku.core.parser.favicon
import android.content.Context
import android.net.Uri
@@ -25,12 +25,12 @@ import okio.Closeable
import okio.buffer
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.await
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.core.model.MangaSource
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.RemoteMangaRepository
-import org.xtimms.tokusho.utils.lang.writeAllCancellable
-import org.xtimms.tokusho.utils.withExtraCloseable
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.core.model.MangaSource
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.RemoteMangaRepository
+import org.xtimms.etsudoku.utils.lang.writeAllCancellable
+import org.xtimms.etsudoku.utils.withExtraCloseable
import java.net.HttpURLConnection
import kotlin.coroutines.coroutineContext
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconUri.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconUri.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconUri.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconUri.kt
index 1600b8f..65293ac 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/favicon/FaviconUri.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/favicon/FaviconUri.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.favicon
+package org.xtimms.etsudoku.core.parser.favicon
import android.net.Uri
import org.koitharu.kotatsu.parsers.model.MangaSource
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/CbzFilter.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/CbzFilter.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/CbzFilter.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/CbzFilter.kt
index 8915092..122665d 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/CbzFilter.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/CbzFilter.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
import android.net.Uri
-import org.xtimms.tokusho.utils.system.URI_SCHEME_ZIP
+import org.xtimms.etsudoku.utils.system.URI_SCHEME_ZIP
import java.io.File
private fun isCbzExtension(ext: String?): Boolean {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/DownloadFormat.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/DownloadFormat.kt
similarity index 62%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/DownloadFormat.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/DownloadFormat.kt
index 68f0362..1eb40f7 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/DownloadFormat.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/DownloadFormat.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
enum class DownloadFormat {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/LocalMangaRepository.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/LocalMangaRepository.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/LocalMangaRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/LocalMangaRepository.kt
index 7ac8d1f..6f7feb8 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/LocalMangaRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/LocalMangaRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
import android.net.Uri
import androidx.core.net.toFile
@@ -21,18 +21,18 @@ import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.local.input.LocalMangaInput
-import org.xtimms.tokusho.core.parser.local.output.LocalMangaOutput
-import org.xtimms.tokusho.core.parser.local.output.LocalMangaUtil
-import org.xtimms.tokusho.data.LocalStorageManager
-import org.xtimms.tokusho.utils.AlphanumComparator
-import org.xtimms.tokusho.utils.CompositeMutex2
-import org.xtimms.tokusho.utils.system.children
-import org.xtimms.tokusho.utils.system.deleteAwait
-import org.xtimms.tokusho.utils.system.filterWith
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.local.input.LocalMangaInput
+import org.xtimms.etsudoku.core.parser.local.output.LocalMangaOutput
+import org.xtimms.etsudoku.core.parser.local.output.LocalMangaUtil
+import org.xtimms.etsudoku.data.LocalStorageManager
+import org.xtimms.etsudoku.utils.AlphanumComparator
+import org.xtimms.etsudoku.utils.CompositeMutex2
+import org.xtimms.etsudoku.utils.system.children
+import org.xtimms.etsudoku.utils.system.deleteAwait
+import org.xtimms.etsudoku.utils.system.filterWith
import java.io.File
import java.util.EnumSet
import java.util.Locale
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/MangaIndex.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/MangaIndex.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/MangaIndex.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/MangaIndex.kt
index c214e5c..ee4ef3c 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/MangaIndex.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/MangaIndex.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
import androidx.annotation.WorkerThread
import org.json.JSONArray
@@ -16,9 +16,9 @@ import org.koitharu.kotatsu.parsers.util.json.getLongOrDefault
import org.koitharu.kotatsu.parsers.util.json.getStringOrNull
import org.koitharu.kotatsu.parsers.util.json.mapJSONToSet
import org.koitharu.kotatsu.parsers.util.toTitleCase
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.utils.AlphanumComparator
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.utils.AlphanumComparator
import java.io.File
class MangaIndex(source: String?) {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/Qualifiers.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/Qualifiers.kt
similarity index 50%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/Qualifiers.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/Qualifiers.kt
index 4d01cca..b825aa6 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/Qualifiers.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/Qualifiers.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
import javax.inject.Qualifier
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/TempFileFilter.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/TempFileFilter.kt
similarity index 80%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/TempFileFilter.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/TempFileFilter.kt
index 9346e5c..3512463 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/TempFileFilter.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/TempFileFilter.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local
+package org.xtimms.etsudoku.core.parser.local
import java.io.File
import java.io.FileFilter
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaDirInput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaDirInput.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaDirInput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaDirInput.kt
index eaa08cf..559691c 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaDirInput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaDirInput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.input
+package org.xtimms.etsudoku.core.parser.local.input
import androidx.core.net.toFile
import androidx.core.net.toUri
@@ -9,17 +9,17 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.toCamelCase
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.parser.local.MangaIndex
-import org.xtimms.tokusho.core.parser.local.hasCbzExtension
-import org.xtimms.tokusho.core.parser.local.output.LocalMangaOutput
-import org.xtimms.tokusho.utils.AlphanumComparator
-import org.xtimms.tokusho.utils.hasImageExtension
-import org.xtimms.tokusho.utils.lang.longHashCode
-import org.xtimms.tokusho.utils.lang.toListSorted
-import org.xtimms.tokusho.utils.system.children
-import org.xtimms.tokusho.utils.system.creationTime
-import org.xtimms.tokusho.utils.system.walkCompat
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.parser.local.MangaIndex
+import org.xtimms.etsudoku.core.parser.local.hasCbzExtension
+import org.xtimms.etsudoku.core.parser.local.output.LocalMangaOutput
+import org.xtimms.etsudoku.utils.AlphanumComparator
+import org.xtimms.etsudoku.utils.hasImageExtension
+import org.xtimms.etsudoku.utils.lang.longHashCode
+import org.xtimms.etsudoku.utils.lang.toListSorted
+import org.xtimms.etsudoku.utils.system.children
+import org.xtimms.etsudoku.utils.system.creationTime
+import org.xtimms.etsudoku.utils.system.walkCompat
import java.io.File
import java.util.TreeMap
import java.util.zip.ZipFile
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaInput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaInput.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaInput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaInput.kt
index c4e2160..c36a8fe 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaInput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaInput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.input
+package org.xtimms.etsudoku.core.parser.local.input
import android.net.Uri
import androidx.core.net.toFile
@@ -13,8 +13,8 @@ import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.parsers.util.toFileNameSafe
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.parser.local.hasCbzExtension
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.parser.local.hasCbzExtension
import java.io.File
sealed class LocalMangaInput(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaZipInput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaZipInput.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaZipInput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaZipInput.kt
index b5600d9..c22838b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/input/LocalMangaZipInput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/input/LocalMangaZipInput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.input
+package org.xtimms.etsudoku.core.parser.local.input
import android.net.Uri
import android.webkit.MimeTypeMap
@@ -12,13 +12,13 @@ import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.toCamelCase
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.parser.local.MangaIndex
-import org.xtimms.tokusho.core.parser.local.output.LocalMangaOutput
-import org.xtimms.tokusho.utils.AlphanumComparator
-import org.xtimms.tokusho.utils.lang.longHashCode
-import org.xtimms.tokusho.utils.lang.toListSorted
-import org.xtimms.tokusho.utils.system.readText
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.parser.local.MangaIndex
+import org.xtimms.etsudoku.core.parser.local.output.LocalMangaOutput
+import org.xtimms.etsudoku.utils.AlphanumComparator
+import org.xtimms.etsudoku.utils.lang.longHashCode
+import org.xtimms.etsudoku.utils.lang.toListSorted
+import org.xtimms.etsudoku.utils.system.readText
import java.io.File
import java.util.Enumeration
import java.util.zip.ZipEntry
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaDirOutput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaDirOutput.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaDirOutput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaDirOutput.kt
index 4b8c52b..6537583 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaDirOutput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaDirOutput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.output
+package org.xtimms.etsudoku.core.parser.local.output
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runInterruptible
@@ -7,11 +7,11 @@ import kotlinx.coroutines.sync.withLock
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.util.toFileNameSafe
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.core.parser.local.MangaIndex
-import org.xtimms.tokusho.core.zip.ZipOutput
-import org.xtimms.tokusho.utils.system.deleteAwait
-import org.xtimms.tokusho.utils.system.takeIfReadable
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.core.parser.local.MangaIndex
+import org.xtimms.etsudoku.core.zip.ZipOutput
+import org.xtimms.etsudoku.utils.system.deleteAwait
+import org.xtimms.etsudoku.utils.system.takeIfReadable
import java.io.File
class LocalMangaDirOutput(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaOutput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaOutput.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaOutput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaOutput.kt
index ae95592..786caf7 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaOutput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaOutput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.output
+package org.xtimms.etsudoku.core.parser.local.output
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.sync.Mutex
@@ -9,8 +9,8 @@ import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
import org.koitharu.kotatsu.parsers.util.toFileNameSafe
-import org.xtimms.tokusho.core.parser.local.DownloadFormat
-import org.xtimms.tokusho.core.parser.local.input.LocalMangaInput
+import org.xtimms.etsudoku.core.parser.local.DownloadFormat
+import org.xtimms.etsudoku.core.parser.local.input.LocalMangaInput
import java.io.File
sealed class LocalMangaOutput(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaUtil.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaUtil.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaUtil.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaUtil.kt
index e768f93..3a62aee 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaUtil.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaUtil.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.output
+package org.xtimms.etsudoku.core.parser.local.output
import androidx.core.net.toFile
import androidx.core.net.toUri
diff --git a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaZipOutput.kt b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaZipOutput.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaZipOutput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaZipOutput.kt
index 3b6baa7..930ef12 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/parser/local/output/LocalMangaZipOutput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/parser/local/output/LocalMangaZipOutput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.parser.local.output
+package org.xtimms.etsudoku.core.parser.local.output
import androidx.annotation.WorkerThread
import kotlinx.coroutines.Dispatchers
@@ -7,11 +7,11 @@ import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.core.parser.local.MangaIndex
-import org.xtimms.tokusho.core.zip.ZipOutput
-import org.xtimms.tokusho.utils.system.deleteAwait
-import org.xtimms.tokusho.utils.system.readText
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.core.parser.local.MangaIndex
+import org.xtimms.etsudoku.core.zip.ZipOutput
+import org.xtimms.etsudoku.utils.system.deleteAwait
+import org.xtimms.etsudoku.utils.system.readText
import java.io.File
import java.util.zip.ZipFile
diff --git a/app/src/main/java/org/xtimms/tokusho/core/prefs/AppSettings.kt b/app/src/main/java/org/xtimms/etsudoku/core/prefs/AppSettings.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/prefs/AppSettings.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/prefs/AppSettings.kt
index 68ca701..bb7f109 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/prefs/AppSettings.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/prefs/AppSettings.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.prefs
+package org.xtimms.etsudoku.core.prefs
import android.os.Build
import androidx.annotation.DeprecatedSinceApi
@@ -13,11 +13,11 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.ui.theme.SEED
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.ui.monet.PaletteStyle
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
-import org.xtimms.tokusho.utils.system.LocaleLanguageCodeMap
+import org.xtimms.etsudoku.ui.theme.SEED
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.ui.monet.PaletteStyle
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.system.LocaleLanguageCodeMap
import java.util.Locale
private const val DYNAMIC_COLOR = "dynamic_color"
diff --git a/app/src/main/java/org/xtimms/tokusho/core/prefs/KotatsuAppSettings.kt b/app/src/main/java/org/xtimms/etsudoku/core/prefs/KotatsuAppSettings.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/prefs/KotatsuAppSettings.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/prefs/KotatsuAppSettings.kt
index 6c4fd9a..7fd2b0b 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/prefs/KotatsuAppSettings.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/prefs/KotatsuAppSettings.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.prefs
+package org.xtimms.etsudoku.core.prefs
import android.content.Context
import android.content.SharedPreferences
@@ -15,9 +15,9 @@ import kotlinx.coroutines.flow.callbackFlow
import kotlinx.coroutines.flow.flow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.flow.transform
-import org.xtimms.tokusho.sections.explore.data.SourcesSortOrder
-import org.xtimms.tokusho.utils.system.getEnumValue
-import org.xtimms.tokusho.utils.system.putEnumValue
+import org.xtimms.etsudoku.sections.explore.data.SourcesSortOrder
+import org.xtimms.etsudoku.utils.system.getEnumValue
+import org.xtimms.etsudoku.utils.system.putEnumValue
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/core/prefs/SourceSettings.kt b/app/src/main/java/org/xtimms/etsudoku/core/prefs/SourceSettings.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/core/prefs/SourceSettings.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/prefs/SourceSettings.kt
index bf53b1f..ef725da 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/prefs/SourceSettings.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/prefs/SourceSettings.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.prefs
+package org.xtimms.etsudoku.core.prefs
import android.content.Context
import androidx.core.content.edit
@@ -6,9 +6,9 @@ import org.koitharu.kotatsu.parsers.config.ConfigKey
import org.koitharu.kotatsu.parsers.config.MangaSourceConfig
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.SortOrder
-import org.xtimms.tokusho.utils.lang.ifNullOrEmpty
-import org.xtimms.tokusho.utils.system.getEnumValue
-import org.xtimms.tokusho.utils.system.putEnumValue
+import org.xtimms.etsudoku.utils.lang.ifNullOrEmpty
+import org.xtimms.etsudoku.utils.system.getEnumValue
+import org.xtimms.etsudoku.utils.system.putEnumValue
private const val KEY_SORT_ORDER = "sort_order"
private const val KEY_SLOWDOWN = "slowdown"
diff --git a/app/src/main/java/org/xtimms/tokusho/core/screens/EmptyScreen.kt b/app/src/main/java/org/xtimms/etsudoku/core/screens/EmptyScreen.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/core/screens/EmptyScreen.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/screens/EmptyScreen.kt
index f11030a..bd55a34 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/screens/EmptyScreen.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/screens/EmptyScreen.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.screens
+package org.xtimms.etsudoku.core.screens
import androidx.annotation.StringRes
import androidx.compose.foundation.layout.Arrangement
@@ -27,8 +27,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
import androidx.compose.ui.util.fastForEach
import kotlinx.collections.immutable.ImmutableList
-import org.xtimms.tokusho.core.components.ActionButton
-import org.xtimms.tokusho.utils.composable.secondaryItemAlpha
+import org.xtimms.etsudoku.core.components.ActionButton
+import org.xtimms.etsudoku.utils.composable.secondaryItemAlpha
import kotlin.random.Random
data class EmptyScreenAction(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/screens/InfoScreen.kt b/app/src/main/java/org/xtimms/etsudoku/core/screens/InfoScreen.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/screens/InfoScreen.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/screens/InfoScreen.kt
index 401d9ca..a5bf636 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/screens/InfoScreen.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/screens/InfoScreen.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.screens
+package org.xtimms.etsudoku.core.screens
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
@@ -29,7 +29,7 @@ import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.Dp
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
-import org.xtimms.tokusho.utils.composable.secondaryItemAlpha
+import org.xtimms.etsudoku.utils.composable.secondaryItemAlpha
@Composable
fun InfoScreen(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/screens/LoadingScreen.kt b/app/src/main/java/org/xtimms/etsudoku/core/screens/LoadingScreen.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/core/screens/LoadingScreen.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/screens/LoadingScreen.kt
index 361360f..2ff39aa 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/screens/LoadingScreen.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/screens/LoadingScreen.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.screens
+package org.xtimms.etsudoku.core.screens
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.fillMaxSize
diff --git a/app/src/main/java/org/xtimms/tokusho/core/screens/UpdateDialog.kt b/app/src/main/java/org/xtimms/etsudoku/core/screens/UpdateDialog.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/core/screens/UpdateDialog.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/screens/UpdateDialog.kt
index c6139d8..2225fe3 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/screens/UpdateDialog.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/screens/UpdateDialog.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.screens
+package org.xtimms.etsudoku.core.screens
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.rememberScrollState
@@ -20,10 +20,10 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.DismissButton
-import org.xtimms.tokusho.core.updates.Updater
-import org.xtimms.tokusho.utils.system.suspendToast
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.DismissButton
+import org.xtimms.etsudoku.core.updates.Updater
+import org.xtimms.etsudoku.utils.system.suspendToast
@Composable
fun UpdateDialog(
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAccountAuthenticator.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAccountAuthenticator.kt
new file mode 100644
index 0000000..5151d6c
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAccountAuthenticator.kt
@@ -0,0 +1,78 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.AbstractAccountAuthenticator
+import android.accounts.Account
+import android.accounts.AccountAuthenticatorResponse
+import android.accounts.AccountManager
+import android.content.Context
+import android.content.Intent
+import android.os.Bundle
+import android.text.TextUtils
+
+class SyncAccountAuthenticator(private val context: Context) : AbstractAccountAuthenticator(context) {
+
+ override fun editProperties(response: AccountAuthenticatorResponse?, accountType: String?): Bundle? = null
+
+ override fun addAccount(
+ response: AccountAuthenticatorResponse?,
+ accountType: String?,
+ authTokenType: String?,
+ requiredFeatures: Array?,
+ options: Bundle?,
+ ): Bundle {
+ val intent = Intent(context, SyncAuthActivity::class.java)
+ intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response)
+ val bundle = Bundle()
+ if (options != null) {
+ bundle.putAll(options)
+ }
+ bundle.putParcelable(AccountManager.KEY_INTENT, intent)
+ return bundle
+ }
+
+ override fun confirmCredentials(
+ response: AccountAuthenticatorResponse?,
+ account: Account?,
+ options: Bundle?,
+ ): Bundle? = null
+
+ override fun getAuthToken(
+ response: AccountAuthenticatorResponse?,
+ account: Account,
+ authTokenType: String?,
+ options: Bundle?,
+ ): Bundle {
+ val result = Bundle()
+ val am = AccountManager.get(context.applicationContext)
+ val authToken = am.peekAuthToken(account, authTokenType)
+ if (!TextUtils.isEmpty(authToken)) {
+ result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name)
+ result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type)
+ result.putString(AccountManager.KEY_AUTHTOKEN, authToken)
+ } else {
+ val intent = Intent(context, SyncAuthActivity::class.java)
+ intent.putExtra(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE, response)
+ val bundle = Bundle()
+ if (options != null) {
+ bundle.putAll(options)
+ }
+ bundle.putParcelable(AccountManager.KEY_INTENT, intent)
+ }
+ return result
+ }
+
+ override fun getAuthTokenLabel(authTokenType: String?): String? = null
+
+ override fun updateCredentials(
+ response: AccountAuthenticatorResponse?,
+ account: Account?,
+ authTokenType: String?,
+ options: Bundle?,
+ ): Bundle? = null
+
+ override fun hasFeatures(
+ response: AccountAuthenticatorResponse?,
+ account: Account?,
+ features: Array?,
+ ): Bundle? = null
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAdapterEntryPoint.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAdapterEntryPoint.kt
new file mode 100644
index 0000000..ce38bca
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAdapterEntryPoint.kt
@@ -0,0 +1,11 @@
+package org.xtimms.etsudoku.core.sync
+
+import dagger.hilt.EntryPoint
+import dagger.hilt.InstallIn
+import dagger.hilt.components.SingletonComponent
+
+@EntryPoint
+@InstallIn(SingletonComponent::class)
+interface SyncAdapterEntryPoint {
+ val syncHelperFactory: SyncHelper.Factory
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthActivity.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthActivity.kt
new file mode 100644
index 0000000..f3d2edb
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthActivity.kt
@@ -0,0 +1,203 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.accounts.AccountAuthenticatorResponse
+import android.accounts.AccountManager
+import android.os.Bundle
+import android.text.Editable
+import android.text.TextWatcher
+import android.view.View
+import android.widget.Button
+import android.widget.Toast
+import androidx.activity.OnBackPressedCallback
+import androidx.activity.viewModels
+import androidx.core.view.isVisible
+import androidx.fragment.app.FragmentResultListener
+import androidx.transition.Fade
+import androidx.transition.TransitionManager
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import dagger.hilt.android.AndroidEntryPoint
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.base.BaseActivity
+import org.xtimms.etsudoku.databinding.ActivitySyncAuthBinding
+import org.xtimms.etsudoku.utils.lang.getParcelableExtraCompat
+import org.xtimms.etsudoku.utils.lang.observe
+import org.xtimms.etsudoku.utils.lang.observeEvent
+import org.xtimms.etsudoku.utils.system.getDisplayMessage
+
+@AndroidEntryPoint
+class SyncAuthActivity : BaseActivity(), View.OnClickListener,
+ FragmentResultListener {
+
+ private var accountAuthenticatorResponse: AccountAuthenticatorResponse? = null
+ private var resultBundle: Bundle? = null
+ private val pageBackCallback = PageBackCallback()
+
+ private val viewModel by viewModels()
+
+ override fun onCreate(savedInstanceState: Bundle?) {
+ super.onCreate(savedInstanceState)
+ setContentView(ActivitySyncAuthBinding.inflate(layoutInflater))
+ accountAuthenticatorResponse =
+ intent.getParcelableExtraCompat(AccountManager.KEY_ACCOUNT_AUTHENTICATOR_RESPONSE)
+ accountAuthenticatorResponse?.onRequestContinued()
+ viewBinding.buttonCancel.setOnClickListener(this)
+ viewBinding.buttonNext.setOnClickListener(this)
+ viewBinding.buttonBack.setOnClickListener(this)
+ viewBinding.buttonDone.setOnClickListener(this)
+ viewBinding.layoutProgress.setOnClickListener(this)
+ viewBinding.buttonSettings.setOnClickListener(this)
+ viewBinding.editEmail.addTextChangedListener(EmailTextWatcher(viewBinding.buttonNext))
+ viewBinding.editPassword.addTextChangedListener(PasswordTextWatcher(viewBinding.buttonDone))
+
+ onBackPressedDispatcher.addCallback(pageBackCallback)
+
+ viewModel.onTokenObtained.observeEvent(this, ::onTokenReceived)
+ viewModel.onError.observeEvent(this, ::onError)
+ viewModel.isLoading.observe(this, ::onLoadingStateChanged)
+ viewModel.onAccountAlreadyExists.observeEvent(this) {
+ onAccountAlreadyExists()
+ }
+
+ supportFragmentManager.setFragmentResultListener(SyncHostDialogFragment.REQUEST_KEY, this, this)
+ pageBackCallback.update()
+ }
+
+ override fun onClick(v: View) {
+ when (v.id) {
+ R.id.button_cancel -> {
+ setResult(RESULT_CANCELED)
+ finish()
+ }
+
+ R.id.button_next -> {
+ viewBinding.groupLogin.isVisible = false
+ viewBinding.groupPassword.isVisible = true
+ pageBackCallback.update()
+ viewBinding.editPassword.requestFocus()
+ }
+
+ R.id.button_back -> {
+ viewBinding.groupPassword.isVisible = false
+ viewBinding.groupLogin.isVisible = true
+ pageBackCallback.update()
+ viewBinding.editEmail.requestFocus()
+ }
+
+ R.id.button_done -> {
+ viewModel.obtainToken(
+ email = viewBinding.editEmail.text.toString(),
+ password = viewBinding.editPassword.text.toString(),
+ )
+ }
+
+ R.id.button_settings -> {
+ // SyncHostDialogFragment.show(supportFragmentManager, viewModel.host.value)
+ }
+ }
+ }
+
+ override fun onFragmentResult(requestKey: String, result: Bundle) {
+ val host = result.getString(SyncHostDialogFragment.KEY_HOST) ?: return
+ viewModel.host.value = host
+ }
+
+ override fun finish() {
+ accountAuthenticatorResponse?.let { response ->
+ resultBundle?.also {
+ response.onResult(it)
+ } ?: response.onError(AccountManager.ERROR_CODE_CANCELED, getString(R.string.canceled))
+ }
+ super.finish()
+ }
+
+ private fun onLoadingStateChanged(isLoading: Boolean) {
+ if (isLoading == viewBinding.layoutProgress.isVisible) {
+ return
+ }
+ TransitionManager.beginDelayedTransition(viewBinding.root, Fade())
+ viewBinding.layoutProgress.isVisible = isLoading
+ pageBackCallback.update()
+ }
+
+ private fun onError(error: Throwable) {
+ MaterialAlertDialogBuilder(this)
+ .setTitle(R.string.error)
+ .setMessage(error.getDisplayMessage(resources))
+ .setNegativeButton(R.string.close, null)
+ .show()
+ }
+
+ private fun onTokenReceived(authResult: SyncAuthResult) {
+ val am = AccountManager.get(this)
+ val account = Account(authResult.email, getString(R.string.account_type_sync))
+ val userdata = Bundle(1)
+ userdata.putString(SyncSettings.KEY_HOST, authResult.host)
+ val result = Bundle()
+ if (am.addAccountExplicitly(account, authResult.password, userdata)) {
+ result.putString(AccountManager.KEY_ACCOUNT_NAME, account.name)
+ result.putString(AccountManager.KEY_ACCOUNT_TYPE, account.type)
+ result.putString(AccountManager.KEY_AUTHTOKEN, authResult.token)
+ am.setAuthToken(account, account.type, authResult.token)
+ } else {
+ result.putString(AccountManager.KEY_ERROR_MESSAGE, getString(R.string.account_already_exists))
+ }
+ resultBundle = result
+ setResult(RESULT_OK)
+ finish()
+ }
+
+ private fun onAccountAlreadyExists() {
+ Toast.makeText(this, R.string.account_already_exists, Toast.LENGTH_SHORT)
+ .show()
+ accountAuthenticatorResponse?.onError(
+ AccountManager.ERROR_CODE_UNSUPPORTED_OPERATION,
+ getString(R.string.account_already_exists),
+ )
+ super.finishAfterTransition()
+ }
+
+ private class EmailTextWatcher(
+ private val button: Button,
+ ) : TextWatcher {
+
+ private val regexEmail = Regex("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", RegexOption.IGNORE_CASE)
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+
+ override fun afterTextChanged(s: Editable?) {
+ val text = s?.toString()
+ button.isEnabled = !text.isNullOrEmpty() && regexEmail.matches(text)
+ }
+ }
+
+ private class PasswordTextWatcher(
+ private val button: Button,
+ ) : TextWatcher {
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+
+ override fun afterTextChanged(s: Editable?) {
+ val text = s?.toString()
+ button.isEnabled = text != null && text.length >= 4
+ }
+ }
+
+ private inner class PageBackCallback : OnBackPressedCallback(false) {
+
+ override fun handleOnBackPressed() {
+ viewBinding.groupLogin.isVisible = true
+ viewBinding.groupPassword.isVisible = false
+ viewBinding.editEmail.requestFocus()
+ update()
+ }
+
+ fun update() {
+ isEnabled = !viewBinding.layoutProgress.isVisible && viewBinding.groupPassword.isVisible
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthApi.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthApi.kt
new file mode 100644
index 0000000..26a3e0d
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthApi.kt
@@ -0,0 +1,47 @@
+package org.xtimms.etsudoku.core.sync
+
+import dagger.Reusable
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import org.json.JSONObject
+import org.koitharu.kotatsu.parsers.util.await
+import org.koitharu.kotatsu.parsers.util.parseJson
+import org.koitharu.kotatsu.parsers.util.removeSurrounding
+import org.xtimms.etsudoku.core.exceptions.SyncApiException
+import org.xtimms.etsudoku.core.network.BaseHttpClient
+import org.xtimms.etsudoku.utils.system.toRequestBody
+import javax.inject.Inject
+
+@Reusable
+class SyncAuthApi @Inject constructor(
+ @BaseHttpClient private val okHttpClient: OkHttpClient,
+) {
+
+ suspend fun authenticate(host: String, email: String, password: String): String {
+ val body = JSONObject(
+ mapOf("email" to email, "password" to password),
+ ).toRequestBody()
+ val scheme = getScheme(host)
+ val request = Request.Builder()
+ .url("$scheme://$host/auth")
+ .post(body)
+ .build()
+ val response = okHttpClient.newCall(request).await()
+ if (response.isSuccessful) {
+ return response.parseJson().getString("token")
+ } else {
+ val code = response.code
+ val message = response.use { checkNotNull(it.body).string() }.removeSurrounding('"')
+ throw SyncApiException(message, code)
+ }
+ }
+
+ private suspend fun getScheme(host: String): String {
+ val request = Request.Builder()
+ .url("http://$host/")
+ .head()
+ .build()
+ val response = okHttpClient.newCall(request).await()
+ return response.request.url.scheme
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthResult.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthResult.kt
new file mode 100644
index 0000000..ffb5c13
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthResult.kt
@@ -0,0 +1,8 @@
+package org.xtimms.etsudoku.core.sync
+
+data class SyncAuthResult(
+ val host: String,
+ val email: String,
+ val password: String,
+ val token: String,
+)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthViewModel.kt
new file mode 100644
index 0000000..37e677a
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthViewModel.kt
@@ -0,0 +1,43 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.AccountManager
+import android.content.Context
+import dagger.hilt.android.lifecycle.HiltViewModel
+import dagger.hilt.android.qualifiers.ApplicationContext
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.flow.MutableStateFlow
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
+import javax.inject.Inject
+
+@HiltViewModel
+class SyncAuthViewModel @Inject constructor(
+ @ApplicationContext context: Context,
+ private val api: SyncAuthApi,
+) : KotatsuBaseViewModel() {
+
+ val onAccountAlreadyExists = MutableEventFlow()
+ val onTokenObtained = MutableEventFlow()
+ val host = MutableStateFlow(context.getString(R.string.sync_host_default))
+
+ init {
+ launchJob(Dispatchers.Default) {
+ val am = AccountManager.get(context)
+ val accounts = am.getAccountsByType(context.getString(R.string.account_type_sync))
+ if (accounts.isNotEmpty()) {
+ onAccountAlreadyExists.call(Unit)
+ }
+ }
+ }
+
+ fun obtainToken(email: String, password: String) {
+ val hostValue = host.value
+ launchLoadingJob(Dispatchers.Default) {
+ val token = api.authenticate(hostValue, email, password)
+ val result = SyncAuthResult(host.value, email, password, token)
+ onTokenObtained.call(result)
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticator.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticator.kt
new file mode 100644
index 0000000..68fa984
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticator.kt
@@ -0,0 +1,41 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.accounts.AccountManager
+import android.content.Context
+import kotlinx.coroutines.runBlocking
+import okhttp3.Authenticator
+import okhttp3.Request
+import okhttp3.Response
+import okhttp3.Route
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.network.CommonHeaders
+
+class SyncAuthenticator(
+ context: Context,
+ private val account: Account,
+ private val syncSettings: SyncSettings,
+ private val authApi: SyncAuthApi,
+) : Authenticator {
+
+ private val accountManager = AccountManager.get(context)
+ private val tokenType = context.getString(R.string.account_type_sync)
+
+ override fun authenticate(route: Route?, response: Response): Request? {
+ val newToken = tryRefreshToken() ?: return null
+ accountManager.setAuthToken(account, tokenType, newToken)
+ return response.request.newBuilder()
+ .header(CommonHeaders.AUTHORIZATION, "Bearer $newToken")
+ .build()
+ }
+
+ private fun tryRefreshToken() = runCatching {
+ runBlocking {
+ authApi.authenticate(
+ syncSettings.host,
+ account.name,
+ accountManager.getPassword(account),
+ )
+ }
+ }.getOrNull()
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticatorService.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticatorService.kt
new file mode 100644
index 0000000..eb96da7
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncAuthenticatorService.kt
@@ -0,0 +1,19 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.app.Service
+import android.content.Intent
+import android.os.IBinder
+
+class SyncAuthenticatorService : Service() {
+
+ private lateinit var authenticator: SyncAccountAuthenticator
+
+ override fun onCreate() {
+ super.onCreate()
+ authenticator = SyncAccountAuthenticator(this)
+ }
+
+ override fun onBind(intent: Intent?): IBinder? {
+ return authenticator.iBinder
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncController.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncController.kt
new file mode 100644
index 0000000..a18ef6a
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncController.kt
@@ -0,0 +1,145 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.accounts.AccountManager
+import android.content.ContentResolver
+import android.content.ContentResolver.SYNC_OBSERVER_TYPE_ACTIVE
+import android.content.Context
+import android.os.Bundle
+import androidx.room.InvalidationTracker
+import androidx.room.withTransaction
+import dagger.hilt.android.qualifiers.ApplicationContext
+import kotlinx.coroutines.Dispatchers
+import kotlinx.coroutines.channels.awaitClose
+import kotlinx.coroutines.channels.trySendBlocking
+import kotlinx.coroutines.flow.Flow
+import kotlinx.coroutines.flow.callbackFlow
+import kotlinx.coroutines.launch
+import kotlinx.coroutines.sync.Mutex
+import kotlinx.coroutines.sync.withLock
+import kotlinx.coroutines.withContext
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITE_CATEGORIES
+import org.xtimms.etsudoku.core.database.TABLE_HISTORY
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import java.util.concurrent.TimeUnit
+import javax.inject.Inject
+import javax.inject.Provider
+import javax.inject.Singleton
+
+@Singleton
+class SyncController @Inject constructor(
+ @ApplicationContext context: Context,
+ private val dbProvider: Provider,
+) : InvalidationTracker.Observer(arrayOf(TABLE_HISTORY, TABLE_FAVOURITES, TABLE_FAVOURITE_CATEGORIES)) {
+
+ private val authorityHistory = context.getString(R.string.sync_authority_history)
+ private val authorityFavourites = context.getString(R.string.sync_authority_favourites)
+ private val am = AccountManager.get(context)
+ private val accountType = context.getString(R.string.account_type_sync)
+ private val mutex = Mutex()
+ private val defaultGcPeriod = TimeUnit.DAYS.toMillis(2) // gc period if sync disabled
+
+ override fun onInvalidated(tables: Set) {
+ val favourites = (TABLE_FAVOURITES in tables || TABLE_FAVOURITE_CATEGORIES in tables)
+ && !isSyncActiveOrPending(authorityFavourites)
+ val history = TABLE_HISTORY in tables && !isSyncActiveOrPending(authorityHistory)
+ if (favourites || history) {
+ requestSync(favourites, history)
+ }
+ }
+
+ fun isEnabled(account: Account): Boolean {
+ return ContentResolver.getMasterSyncAutomatically() && (ContentResolver.getSyncAutomatically(
+ account,
+ authorityFavourites,
+ ) || ContentResolver.getSyncAutomatically(
+ account,
+ authorityHistory,
+ ))
+ }
+
+ fun getLastSync(account: Account, authority: String): Long {
+ val key = "last_sync_" + authority.substringAfterLast('.')
+ val rawValue = am.getUserData(account, key) ?: return 0L
+ return rawValue.toLongOrNull() ?: 0L
+ }
+
+ fun observeSyncStatus(): Flow = callbackFlow {
+ val handle = ContentResolver.addStatusChangeListener(SYNC_OBSERVER_TYPE_ACTIVE) { which ->
+ trySendBlocking(which and SYNC_OBSERVER_TYPE_ACTIVE != 0)
+ }
+ awaitClose { ContentResolver.removeStatusChangeListener(handle) }
+ }
+
+ suspend fun requestFullSync() = withContext(Dispatchers.Default) {
+ requestSyncImpl(favourites = true, history = true)
+ }
+
+ private fun requestSync(favourites: Boolean, history: Boolean) = processLifecycleScope.launch(Dispatchers.Default) {
+ requestSyncImpl(favourites = favourites, history = history)
+ }
+
+ private suspend fun requestSyncImpl(favourites: Boolean, history: Boolean) = mutex.withLock {
+ if (!favourites && !history) {
+ return
+ }
+ val db = dbProvider.get()
+ val account = peekAccount()
+ if (account == null || !ContentResolver.getMasterSyncAutomatically()) {
+ db.gc(favourites, history)
+ return
+ }
+ var gcHistory = false
+ var gcFavourites = false
+ if (favourites) {
+ if (ContentResolver.getSyncAutomatically(account, authorityFavourites)) {
+ ContentResolver.requestSync(account, authorityFavourites, Bundle.EMPTY)
+ } else {
+ gcFavourites = true
+ }
+ }
+ if (history) {
+ if (ContentResolver.getSyncAutomatically(account, authorityHistory)) {
+ ContentResolver.requestSync(account, authorityHistory, Bundle.EMPTY)
+ } else {
+ gcHistory = true
+ }
+ }
+ if (gcHistory || gcFavourites) {
+ db.gc(gcFavourites, gcHistory)
+ }
+ }
+
+ private fun peekAccount(): Account? {
+ return am.getAccountsByType(accountType).firstOrNull()
+ }
+
+ private suspend fun EtsudokuDatabase.gc(favourites: Boolean, history: Boolean) = withTransaction {
+ val deletedAt = System.currentTimeMillis() - defaultGcPeriod
+ if (history) {
+ getHistoryDao().gc(deletedAt)
+ }
+ if (favourites) {
+ getFavouritesDao().gc(deletedAt)
+ getFavouriteCategoriesDao().gc(deletedAt)
+ }
+ }
+
+ private fun isSyncActiveOrPending(authority: String): Boolean {
+ val account = peekAccount() ?: return false
+ return ContentResolver.isSyncActive(account, authority) || ContentResolver.isSyncPending(account, authority)
+ }
+
+ companion object {
+
+ @JvmStatic
+ fun setLastSync(context: Context, account: Account, authority: String, time: Long) {
+ val key = "last_sync_" + authority.substringAfterLast('.')
+ val am = AccountManager.get(context)
+ am.setUserData(account, key, time.toString())
+ }
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHelper.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHelper.kt
new file mode 100644
index 0000000..31712ac
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHelper.kt
@@ -0,0 +1,325 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.content.ContentProviderClient
+import android.content.ContentProviderOperation
+import android.content.ContentProviderResult
+import android.content.Context
+import android.content.OperationApplicationException
+import android.content.SyncResult
+import android.content.SyncStats
+import android.database.Cursor
+import android.net.Uri
+import androidx.annotation.WorkerThread
+import androidx.core.content.contentValuesOf
+import dagger.assisted.Assisted
+import dagger.assisted.AssistedFactory
+import dagger.assisted.AssistedInject
+import dagger.hilt.android.qualifiers.ApplicationContext
+import okhttp3.OkHttpClient
+import okhttp3.Request
+import okhttp3.Response
+import org.json.JSONArray
+import org.json.JSONObject
+import org.koitharu.kotatsu.parsers.util.json.mapJSONTo
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITE_CATEGORIES
+import org.xtimms.etsudoku.core.database.TABLE_HISTORY
+import org.xtimms.etsudoku.core.database.TABLE_MANGA
+import org.xtimms.etsudoku.core.database.TABLE_MANGA_TAGS
+import org.xtimms.etsudoku.core.database.TABLE_TAGS
+import org.xtimms.etsudoku.core.logs.FileLogger
+import org.xtimms.etsudoku.core.logs.SyncLogger
+import org.xtimms.etsudoku.core.network.BaseHttpClient
+import org.xtimms.etsudoku.utils.system.parseJsonOrNull
+import org.xtimms.etsudoku.utils.system.toContentValues
+import org.xtimms.etsudoku.utils.system.toJson
+import org.xtimms.etsudoku.utils.system.toRequestBody
+import java.util.concurrent.TimeUnit
+
+private const val FIELD_TIMESTAMP = "timestamp"
+
+class SyncHelper @AssistedInject constructor(
+ @ApplicationContext context: Context,
+ @BaseHttpClient baseHttpClient: OkHttpClient,
+ @Assisted private val account: Account,
+ @Assisted private val provider: ContentProviderClient,
+ private val settings: SyncSettings,
+ @SyncLogger private val logger: FileLogger,
+) {
+
+ private val authorityHistory = context.getString(R.string.sync_authority_history)
+ private val authorityFavourites = context.getString(R.string.sync_authority_favourites)
+ private val httpClient = baseHttpClient.newBuilder()
+ .authenticator(SyncAuthenticator(context, account, settings, SyncAuthApi(OkHttpClient())))
+ .addInterceptor(SyncInterceptor(context, account))
+ .build()
+ private val baseUrl: String by lazy {
+ val host = settings.host
+ val scheme = getScheme(host)
+ "$scheme://$host"
+ }
+ private val defaultGcPeriod: Long // gc period if sync enabled
+ get() = TimeUnit.DAYS.toMillis(4)
+
+ @WorkerThread
+ fun syncFavourites(stats: SyncStats) {
+ val data = JSONObject()
+ data.put(TABLE_FAVOURITE_CATEGORIES, getFavouriteCategories())
+ data.put(TABLE_FAVOURITES, getFavourites())
+ data.put(FIELD_TIMESTAMP, System.currentTimeMillis())
+ val request = Request.Builder()
+ .url("$baseUrl/resource/$TABLE_FAVOURITES")
+ .post(data.toRequestBody())
+ .build()
+ val response = httpClient.newCall(request).execute().log().parseJsonOrNull()
+ if (response != null) {
+ val timestamp = response.getLong(FIELD_TIMESTAMP)
+ val categoriesResult =
+ upsertFavouriteCategories(response.getJSONArray(TABLE_FAVOURITE_CATEGORIES), timestamp)
+ stats.numDeletes += categoriesResult.first().count?.toLong() ?: 0L
+ stats.numInserts += categoriesResult.drop(1).sumOf { it.count?.toLong() ?: 0L }
+ val favouritesResult = upsertFavourites(response.getJSONArray(TABLE_FAVOURITES), timestamp)
+ stats.numDeletes += favouritesResult.first().count?.toLong() ?: 0L
+ stats.numInserts += favouritesResult.drop(1).sumOf { it.count?.toLong() ?: 0L }
+ stats.numEntries += stats.numInserts + stats.numDeletes
+ }
+ gcFavourites()
+ }
+
+ @WorkerThread
+ fun syncHistory(stats: SyncStats) {
+ val data = JSONObject()
+ data.put(TABLE_HISTORY, getHistory())
+ data.put(FIELD_TIMESTAMP, System.currentTimeMillis())
+ val request = Request.Builder()
+ .url("$baseUrl/resource/$TABLE_HISTORY")
+ .post(data.toRequestBody())
+ .build()
+ val response = httpClient.newCall(request).execute().log().parseJsonOrNull()
+ if (response != null) {
+ val result = upsertHistory(
+ json = response.getJSONArray(TABLE_HISTORY),
+ timestamp = response.getLong(FIELD_TIMESTAMP),
+ )
+ stats.numDeletes += result.first().count?.toLong() ?: 0L
+ stats.numInserts += result.drop(1).sumOf { it.count?.toLong() ?: 0L }
+ stats.numEntries += stats.numInserts + stats.numDeletes
+ }
+ gcHistory()
+ }
+
+ fun onError(e: Throwable) {
+ if (logger.isEnabled) {
+ logger.log("Sync error", e)
+ }
+ }
+
+ fun onSyncComplete(result: SyncResult) {
+ if (logger.isEnabled) {
+ logger.log("Sync finshed: ${result.toDebugString()}")
+ logger.flushBlocking()
+ }
+ }
+
+ private fun upsertHistory(json: JSONArray, timestamp: Long): Array {
+ val uri = uri(authorityHistory, TABLE_HISTORY)
+ val operations = ArrayList()
+ json.mapJSONTo(operations) { jo ->
+ operations.addAll(upsertManga(jo.removeJSONObject("manga"), authorityHistory))
+ ContentProviderOperation.newInsert(uri)
+ .withValues(jo.toContentValues())
+ .build()
+ }
+ return provider.applyBatch(operations)
+ }
+
+ private fun upsertFavouriteCategories(json: JSONArray, timestamp: Long): Array {
+ val uri = uri(authorityFavourites, TABLE_FAVOURITE_CATEGORIES)
+ val operations = ArrayList()
+ json.mapJSONTo(operations) { jo ->
+ ContentProviderOperation.newInsert(uri)
+ .withValues(jo.toContentValues())
+ .build()
+ }
+ return provider.applyBatch(operations)
+ }
+
+ private fun upsertFavourites(json: JSONArray, timestamp: Long): Array {
+ val uri = uri(authorityFavourites, TABLE_FAVOURITES)
+ val operations = ArrayList()
+ json.mapJSONTo(operations) { jo ->
+ operations.addAll(upsertManga(jo.removeJSONObject("manga"), authorityFavourites))
+ ContentProviderOperation.newInsert(uri)
+ .withValues(jo.toContentValues())
+ .build()
+ }
+ return provider.applyBatch(operations)
+ }
+
+ private fun upsertManga(json: JSONObject, authority: String): List {
+ val tags = json.removeJSONArray(TABLE_TAGS)
+ val result = ArrayList(tags.length() * 2 + 1)
+ for (i in 0 until tags.length()) {
+ val tag = tags.getJSONObject(i)
+ result += ContentProviderOperation.newInsert(uri(authority, TABLE_TAGS))
+ .withValues(tag.toContentValues())
+ .build()
+ result += ContentProviderOperation.newInsert(uri(authority, TABLE_MANGA_TAGS))
+ .withValues(
+ contentValuesOf(
+ "manga_id" to json.getLong("manga_id"),
+ "tag_id" to tag.getLong("tag_id"),
+ ),
+ ).build()
+ }
+ result.add(
+ 0,
+ ContentProviderOperation.newInsert(uri(authority, TABLE_MANGA))
+ .withValues(json.toContentValues())
+ .build(),
+ )
+ return result
+ }
+
+ private fun getHistory(): JSONArray {
+ return provider.query(authorityHistory, TABLE_HISTORY).use { cursor ->
+ val json = JSONArray()
+ if (cursor.moveToFirst()) {
+ do {
+ val jo = cursor.toJson()
+ jo.put("manga", getManga(authorityHistory, jo.getLong("manga_id")))
+ json.put(jo)
+ } while (cursor.moveToNext())
+ }
+ json
+ }
+ }
+
+ private fun getFavourites(): JSONArray {
+ return provider.query(authorityFavourites, TABLE_FAVOURITES).use { cursor ->
+ val json = JSONArray()
+ if (cursor.moveToFirst()) {
+ do {
+ val jo = cursor.toJson()
+ jo.put("manga", getManga(authorityFavourites, jo.getLong("manga_id")))
+ json.put(jo)
+ } while (cursor.moveToNext())
+ }
+ json
+ }
+ }
+
+ private fun getFavouriteCategories(): JSONArray {
+ return provider.query(authorityFavourites, TABLE_FAVOURITE_CATEGORIES).use { cursor ->
+ val json = JSONArray()
+ if (cursor.moveToFirst()) {
+ do {
+ json.put(cursor.toJson())
+ } while (cursor.moveToNext())
+ }
+ json
+ }
+ }
+
+ private fun getManga(authority: String, id: Long): JSONObject {
+ val manga = provider.query(
+ uri(authority, TABLE_MANGA),
+ null,
+ "manga_id = ?",
+ arrayOf(id.toString()),
+ null,
+ )?.use { cursor ->
+ cursor.moveToFirst()
+ cursor.toJson()
+ }
+ requireNotNull(manga)
+ val tags = provider.query(
+ uri(authority, TABLE_MANGA_TAGS),
+ arrayOf("tag_id"),
+ "manga_id = ?",
+ arrayOf(id.toString()),
+ null,
+ )?.use { cursor ->
+ val json = JSONArray()
+ if (cursor.moveToFirst()) {
+ do {
+ val tagId = cursor.getLong(0)
+ json.put(getTag(authority, tagId))
+ } while (cursor.moveToNext())
+ }
+ json
+ }
+ manga.put("tags", requireNotNull(tags))
+ return manga
+ }
+
+ private fun getTag(authority: String, tagId: Long): JSONObject {
+ val tag = provider.query(
+ uri(authority, TABLE_TAGS),
+ null,
+ "tag_id = ?",
+ arrayOf(tagId.toString()),
+ null,
+ )?.use { cursor ->
+ if (cursor.moveToFirst()) {
+ cursor.toJson()
+ } else {
+ null
+ }
+ }
+ return requireNotNull(tag)
+ }
+
+ private fun getScheme(host: String): String {
+ val request = Request.Builder()
+ .url("http://$host/")
+ .head()
+ .build()
+ val response = httpClient.newCall(request).execute()
+ return response.request.url.scheme
+ }
+
+ private fun gcFavourites() {
+ val deletedAt = System.currentTimeMillis() - defaultGcPeriod
+ val selection = "deleted_at != 0 AND deleted_at < ?"
+ val args = arrayOf(deletedAt.toString())
+ provider.delete(uri(authorityFavourites, TABLE_FAVOURITES), selection, args)
+ provider.delete(uri(authorityFavourites, TABLE_FAVOURITE_CATEGORIES), selection, args)
+ }
+
+ private fun gcHistory() {
+ val deletedAt = System.currentTimeMillis() - defaultGcPeriod
+ val selection = "deleted_at != 0 AND deleted_at < ?"
+ val args = arrayOf(deletedAt.toString())
+ provider.delete(uri(authorityHistory, TABLE_HISTORY), selection, args)
+ }
+
+ private fun ContentProviderClient.query(authority: String, table: String): Cursor {
+ val uri = uri(authority, table)
+ return query(uri, null, null, null, null)
+ ?: throw OperationApplicationException("Query failed: $uri")
+ }
+
+ private fun uri(authority: String, table: String) = Uri.parse("content://$authority/$table")
+
+ private fun JSONObject.removeJSONObject(name: String) = remove(name) as JSONObject
+
+ private fun JSONObject.removeJSONArray(name: String) = remove(name) as JSONArray
+
+ private fun Response.log() = apply {
+ if (logger.isEnabled) {
+ logger.log("$code ${request.url}")
+ }
+ }
+
+ @AssistedFactory
+ interface Factory {
+
+ fun create(
+ account: Account,
+ contentProviderClient: ContentProviderClient,
+ ): SyncHelper
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHostDialogFragment.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHostDialogFragment.kt
new file mode 100644
index 0000000..925acfb
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncHostDialogFragment.kt
@@ -0,0 +1,82 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.content.DialogInterface
+import android.os.Bundle
+import android.view.LayoutInflater
+import android.view.ViewGroup
+import android.widget.ArrayAdapter
+import androidx.core.os.bundleOf
+import androidx.core.view.updateLayoutParams
+import androidx.fragment.app.FragmentManager
+import com.google.android.material.dialog.MaterialAlertDialogBuilder
+import dagger.hilt.android.AndroidEntryPoint
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.base.AlertDialogFragment
+import org.xtimms.etsudoku.databinding.PreferenceDialogAutocompleteTextViewBinding
+import org.xtimms.etsudoku.utils.DomainValidator
+import org.xtimms.etsudoku.utils.lang.ifNullOrEmpty
+import javax.inject.Inject
+
+@AndroidEntryPoint
+class SyncHostDialogFragment : AlertDialogFragment(),
+ DialogInterface.OnClickListener {
+
+ @Inject
+ lateinit var syncSettings: SyncSettings
+
+ override fun onCreateViewBinding(
+ inflater: LayoutInflater,
+ container: ViewGroup?
+ ) = PreferenceDialogAutocompleteTextViewBinding.inflate(inflater, container, false)
+
+ override fun onBuildDialog(builder: MaterialAlertDialogBuilder): MaterialAlertDialogBuilder {
+ return super.onBuildDialog(builder)
+ .setPositiveButton(android.R.string.ok, this)
+ .setNegativeButton(android.R.string.cancel, this)
+ .setCancelable(false)
+ .setTitle(R.string.server_address)
+ }
+
+ override fun onViewBindingCreated(
+ binding: PreferenceDialogAutocompleteTextViewBinding,
+ savedInstanceState: Bundle?
+ ) {
+ super.onViewBindingCreated(binding, savedInstanceState)
+ binding.message.updateLayoutParams {
+ topMargin = binding.root.resources.getDimensionPixelOffset(R.dimen.screen_padding)
+ bottomMargin = topMargin
+ }
+ binding.message.setText(R.string.sync_host_description)
+ val entries = binding.root.resources.getStringArray(R.array.sync_host_list)
+ val editText = binding.edit
+ editText.setText(arguments?.getString(KEY_HOST).ifNullOrEmpty { syncSettings.host })
+ editText.threshold = 0
+ editText.setAdapter(ArrayAdapter(binding.root.context, android.R.layout.simple_spinner_dropdown_item, entries))
+ binding.dropdown.setOnClickListener {
+ editText.showDropDown()
+ }
+ DomainValidator().attachToEditText(editText)
+ }
+
+ override fun onClick(dialog: DialogInterface, which: Int) {
+ when (which) {
+ DialogInterface.BUTTON_POSITIVE -> {
+ val result = requireViewBinding().edit.text?.toString().orEmpty()
+ syncSettings.host = result
+ parentFragmentManager.setFragmentResult(REQUEST_KEY, bundleOf(KEY_HOST to result))
+ }
+ }
+ dialog.dismiss()
+ }
+
+ companion object {
+
+ private const val TAG = "SyncHostDialogFragment"
+ const val REQUEST_KEY = "sync_host"
+ const val KEY_HOST = "host"
+
+ //fun show(fm: FragmentManager, host: String?) = SyncHostDialogFragment().withArgs(1) {
+ // putString(KEY_HOST, host)
+ //}.show(fm, TAG)
+ }
+}
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncInterceptor.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncInterceptor.kt
new file mode 100644
index 0000000..82ed9d1
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncInterceptor.kt
@@ -0,0 +1,31 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.accounts.AccountManager
+import android.content.Context
+import okhttp3.Interceptor
+import okhttp3.Response
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.database.DATABASE_VERSION
+import org.xtimms.etsudoku.core.network.CommonHeaders
+
+class SyncInterceptor(
+ context: Context,
+ private val account: Account,
+) : Interceptor {
+
+ private val accountManager = AccountManager.get(context)
+ private val tokenType = context.getString(R.string.account_type_sync)
+
+ override fun intercept(chain: Interceptor.Chain): Response {
+ val token = accountManager.peekAuthToken(account, tokenType)
+ val requestBuilder = chain.request().newBuilder()
+ if (token != null) {
+ requestBuilder.header(CommonHeaders.AUTHORIZATION, "Bearer $token")
+ }
+ requestBuilder.header("X-App-Version", BuildConfig.VERSION_CODE.toString())
+ requestBuilder.header("X-Db-Version", DATABASE_VERSION.toString())
+ return chain.proceed(requestBuilder.build())
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncProvider.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncProvider.kt
new file mode 100644
index 0000000..bdba3c4
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncProvider.kt
@@ -0,0 +1,130 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.content.ContentProvider
+import android.content.ContentProviderOperation
+import android.content.ContentProviderResult
+import android.content.ContentValues
+import android.database.Cursor
+import android.database.sqlite.SQLiteDatabase
+import android.net.Uri
+import androidx.sqlite.db.SupportSQLiteDatabase
+import androidx.sqlite.db.SupportSQLiteQueryBuilder
+import dagger.hilt.EntryPoint
+import dagger.hilt.InstallIn
+import dagger.hilt.android.EntryPointAccessors
+import dagger.hilt.components.SingletonComponent
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITE_CATEGORIES
+import org.xtimms.etsudoku.core.database.TABLE_HISTORY
+import org.xtimms.etsudoku.core.database.TABLE_MANGA
+import org.xtimms.etsudoku.core.database.TABLE_MANGA_TAGS
+import org.xtimms.etsudoku.core.database.TABLE_TAGS
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import java.util.concurrent.Callable
+
+abstract class SyncProvider : ContentProvider() {
+
+ private val entryPoint by lazy {
+ EntryPointAccessors.fromApplication(checkNotNull(context), SyncProviderEntryPoint::class.java)
+ }
+ private val database by lazy { entryPoint.database }
+
+ private val supportedTables = setOf(
+ TABLE_FAVOURITES,
+ TABLE_MANGA,
+ TABLE_TAGS,
+ TABLE_FAVOURITE_CATEGORIES,
+ TABLE_HISTORY,
+ TABLE_MANGA_TAGS,
+ )
+
+ override fun onCreate(): Boolean {
+ return true
+ }
+
+ override fun query(
+ uri: Uri,
+ projection: Array?,
+ selection: String?,
+ selectionArgs: Array?,
+ sortOrder: String?,
+ ): Cursor? {
+ val tableName = getTableName(uri) ?: return null
+ val sqlQuery = SupportSQLiteQueryBuilder.builder(tableName)
+ .columns(projection)
+ .selection(selection, selectionArgs)
+ .orderBy(sortOrder)
+ .create()
+ return database.openHelper.readableDatabase.query(sqlQuery)
+ }
+
+ override fun getType(uri: Uri): String? {
+ return getTableName(uri)?.let { "vnd.android.cursor.dir/" }
+ }
+
+ override fun insert(uri: Uri, values: ContentValues?): Uri? {
+ val table = getTableName(uri)
+ if (values == null || table == null) {
+ return null
+ }
+ val db = database.openHelper.writableDatabase
+ if (db.insert(table, SQLiteDatabase.CONFLICT_IGNORE, values) < 0) {
+ db.update(table, values)
+ }
+ return uri
+ }
+
+ override fun delete(uri: Uri, selection: String?, selectionArgs: Array?): Int {
+ val table = getTableName(uri) ?: return 0
+ return database.openHelper.writableDatabase.delete(table, selection, selectionArgs)
+ }
+
+ override fun update(uri: Uri, values: ContentValues?, selection: String?, selectionArgs: Array?): Int {
+ val table = getTableName(uri)
+ if (values == null || table == null) {
+ return 0
+ }
+ return database.openHelper.writableDatabase
+ .update(table, SQLiteDatabase.CONFLICT_IGNORE, values, selection, selectionArgs)
+ }
+
+ override fun applyBatch(operations: ArrayList): Array {
+ return runAtomicTransaction { super.applyBatch(operations) }
+ }
+
+ override fun bulkInsert(uri: Uri, values: Array): Int {
+ return runAtomicTransaction { super.bulkInsert(uri, values) }
+ }
+
+ private fun getTableName(uri: Uri): String? {
+ return uri.pathSegments.singleOrNull()?.takeIf { it in supportedTables }
+ }
+
+ private fun runAtomicTransaction(callable: Callable): R {
+ return synchronized(database) {
+ database.runInTransaction(callable)
+ }
+ }
+
+ private fun SupportSQLiteDatabase.update(table: String, values: ContentValues) {
+ val keys = when (table) {
+ TABLE_TAGS -> listOf("tag_id")
+ TABLE_MANGA_TAGS -> listOf("tag_id", "manga_id")
+ TABLE_MANGA -> listOf("manga_id")
+ TABLE_FAVOURITES -> listOf("manga_id", "category_id")
+ TABLE_FAVOURITE_CATEGORIES -> listOf("category_id")
+ TABLE_HISTORY -> listOf("manga_id")
+ else -> throw IllegalArgumentException("Update for $table is not supported")
+ }
+ val whereClause = keys.joinToString(" AND ") { "`$it` = ?" }
+ val whereArgs = Array(keys.size) { i -> values.get("`${keys[i]}`") ?: values.get(keys[i]) }
+ this.update(table, SQLiteDatabase.CONFLICT_IGNORE, values, whereClause, whereArgs)
+ }
+
+ @EntryPoint
+ @InstallIn(SingletonComponent::class)
+ interface SyncProviderEntryPoint {
+
+ val database: EtsudokuDatabase
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncSettings.kt b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncSettings.kt
new file mode 100644
index 0000000..afa2ea5
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/core/sync/SyncSettings.kt
@@ -0,0 +1,44 @@
+package org.xtimms.etsudoku.core.sync
+
+import android.accounts.Account
+import android.accounts.AccountManager
+import android.content.Context
+import androidx.annotation.WorkerThread
+import dagger.hilt.android.qualifiers.ApplicationContext
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.utils.lang.ifNullOrEmpty
+import javax.inject.Inject
+
+class SyncSettings(
+ context: Context,
+ private val account: Account?,
+) {
+
+ @Inject
+ constructor(@ApplicationContext context: Context) : this(
+ context,
+ AccountManager.get(context)
+ .getAccountsByType(context.getString(R.string.account_type_sync))
+ .firstOrNull(),
+ )
+
+ private val accountManager = AccountManager.get(context)
+ private val defaultHost = context.getString(R.string.sync_host_default)
+
+ @get:WorkerThread
+ @set:WorkerThread
+ var host: String
+ get() = account?.let {
+ accountManager.getUserData(it, KEY_HOST)
+ }.ifNullOrEmpty { defaultHost }
+ set(value) {
+ account?.let {
+ accountManager.setUserData(it, KEY_HOST, value)
+ }
+ }
+
+ companion object {
+
+ const val KEY_HOST = "host"
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/tracker/Tracker.kt b/app/src/main/java/org/xtimms/etsudoku/core/tracker/Tracker.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/core/tracker/Tracker.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/tracker/Tracker.kt
index 5dddfc8..eaf6b73 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/tracker/Tracker.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/tracker/Tracker.kt
@@ -1,19 +1,19 @@
-package org.xtimms.tokusho.core.tracker
+package org.xtimms.etsudoku.core.tracker
import androidx.annotation.VisibleForTesting
import androidx.collection.MutableLongSet
import coil.request.CachePolicy
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.getPreferredBranch
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.RemoteMangaRepository
-import org.xtimms.tokusho.core.tracker.model.MangaTracking
-import org.xtimms.tokusho.core.tracker.model.MangaUpdates
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.data.repository.TrackingRepository
-import org.xtimms.tokusho.utils.CompositeMutex2
-import org.xtimms.tokusho.work.tracker.TrackerNotificationChannels
-import org.xtimms.tokusho.work.tracker.TrackingItem
+import org.xtimms.etsudoku.core.model.getPreferredBranch
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.RemoteMangaRepository
+import org.xtimms.etsudoku.core.tracker.model.MangaTracking
+import org.xtimms.etsudoku.core.tracker.model.MangaUpdates
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.data.repository.TrackingRepository
+import org.xtimms.etsudoku.utils.CompositeMutex2
+import org.xtimms.etsudoku.work.tracker.TrackerNotificationChannels
+import org.xtimms.etsudoku.work.tracker.TrackingItem
import javax.inject.Inject
import kotlin.contracts.ExperimentalContracts
import kotlin.contracts.InvocationKind
diff --git a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaTracking.kt b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaTracking.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaTracking.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaTracking.kt
index 418b8c6..5367ebb 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaTracking.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaTracking.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.tracker.model
+package org.xtimms.etsudoku.core.tracker.model
import org.koitharu.kotatsu.parsers.model.Manga
import java.time.Instant
diff --git a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaUpdates.kt b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaUpdates.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaUpdates.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaUpdates.kt
index b6abe75..ebad6ad 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/MangaUpdates.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/MangaUpdates.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.core.tracker.model
+package org.xtimms.etsudoku.core.tracker.model
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.exceptions.TooManyRequestExceptions
+import org.xtimms.etsudoku.core.exceptions.TooManyRequestExceptions
sealed interface MangaUpdates {
diff --git a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/TrackingLogItem.kt b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/TrackingLogItem.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/core/tracker/model/TrackingLogItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/tracker/model/TrackingLogItem.kt
index 4c4d764..4a5b093 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/tracker/model/TrackingLogItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/tracker/model/TrackingLogItem.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.core.tracker.model
+package org.xtimms.etsudoku.core.tracker.model
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
import java.time.Instant
data class TrackingLogItem(
diff --git a/app/src/main/java/org/xtimms/tokusho/core/updates/Updater.kt b/app/src/main/java/org/xtimms/etsudoku/core/updates/Updater.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/core/updates/Updater.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/updates/Updater.kt
index e36b2dd..6a23a36 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/updates/Updater.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/updates/Updater.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.core.updates
+package org.xtimms.etsudoku.core.updates
import android.content.Context
import android.content.Intent
@@ -19,19 +19,19 @@ import kotlinx.serialization.json.Json
import okhttp3.OkHttpClient
import okhttp3.Request
import okhttp3.ResponseBody
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.prefs.AppSettings.getInt
-import org.xtimms.tokusho.core.prefs.STABLE
-import org.xtimms.tokusho.core.prefs.UPDATE_CHANNEL
-import org.xtimms.tokusho.utils.system.getFileProvider
-import org.xtimms.tokusho.utils.system.toast
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.prefs.AppSettings.getInt
+import org.xtimms.etsudoku.core.prefs.STABLE
+import org.xtimms.etsudoku.core.prefs.UPDATE_CHANNEL
+import org.xtimms.etsudoku.utils.system.getFileProvider
+import org.xtimms.etsudoku.utils.system.toast
import java.io.File
import java.util.regex.Pattern
object Updater {
private const val OWNER = "ztimms73"
- private const val REPO = "tokusho"
+ private const val REPO = "etsudoku"
private const val TAG = "Updates"
private val client = OkHttpClient()
diff --git a/app/src/main/java/org/xtimms/tokusho/core/zip/ZipOutput.kt b/app/src/main/java/org/xtimms/etsudoku/core/zip/ZipOutput.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/core/zip/ZipOutput.kt
rename to app/src/main/java/org/xtimms/etsudoku/core/zip/ZipOutput.kt
index 2f82d7b..1efdd64 100644
--- a/app/src/main/java/org/xtimms/tokusho/core/zip/ZipOutput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/core/zip/ZipOutput.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.core.zip
+package org.xtimms.etsudoku.core.zip
import androidx.annotation.WorkerThread
import androidx.collection.ArraySet
import okio.Closeable
-import org.xtimms.tokusho.utils.system.children
+import org.xtimms.etsudoku.utils.system.children
import java.io.File
import java.io.FileInputStream
import java.util.zip.Deflater
diff --git a/app/src/main/java/org/xtimms/tokusho/crash/CrashActivity.kt b/app/src/main/java/org/xtimms/etsudoku/crash/CrashActivity.kt
similarity index 80%
rename from app/src/main/java/org/xtimms/tokusho/crash/CrashActivity.kt
rename to app/src/main/java/org/xtimms/etsudoku/crash/CrashActivity.kt
index 8dc3fd6..7338bdf 100644
--- a/app/src/main/java/org/xtimms/tokusho/crash/CrashActivity.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/crash/CrashActivity.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.crash
+package org.xtimms.etsudoku.crash
import android.content.Intent
import android.os.Bundle
@@ -6,11 +6,11 @@ import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.activity.enableEdgeToEdge
import dagger.hilt.android.AndroidEntryPoint
-import org.xtimms.tokusho.LocalDarkTheme
-import org.xtimms.tokusho.LocalDynamicColorSwitch
-import org.xtimms.tokusho.MainActivity
-import org.xtimms.tokusho.SettingsProvider
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.LocalDarkTheme
+import org.xtimms.etsudoku.LocalDynamicColorSwitch
+import org.xtimms.etsudoku.MainActivity
+import org.xtimms.etsudoku.SettingsProvider
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
@AndroidEntryPoint
class CrashActivity : ComponentActivity() {
@@ -22,7 +22,7 @@ class CrashActivity : ComponentActivity() {
val exception = GlobalExceptionHandler.getThrowableFromIntent(intent)
setContent {
SettingsProvider {
- TokushoTheme(
+ EtsudokuTheme(
darkTheme = LocalDarkTheme.current.isDarkTheme(),
isDynamicColorEnabled = LocalDynamicColorSwitch.current,
isHighContrastModeEnabled = LocalDarkTheme.current.isHighContrastModeEnabled,
diff --git a/app/src/main/java/org/xtimms/tokusho/crash/CrashScreen.kt b/app/src/main/java/org/xtimms/etsudoku/crash/CrashScreen.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/crash/CrashScreen.kt
rename to app/src/main/java/org/xtimms/etsudoku/crash/CrashScreen.kt
index 3916c35..1ac2292 100644
--- a/app/src/main/java/org/xtimms/tokusho/crash/CrashScreen.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/crash/CrashScreen.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.crash
+package org.xtimms.etsudoku.crash
import androidx.compose.foundation.background
import androidx.compose.foundation.layout.Box
@@ -18,10 +18,10 @@ import androidx.compose.ui.text.font.FontFamily
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.dp
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.screens.InfoScreen
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.CrashLogUtil
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.screens.InfoScreen
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.CrashLogUtil
@Composable
fun CrashScreen(
@@ -65,7 +65,7 @@ fun CrashScreen(
@PreviewLightDark
@Composable
private fun CrashScreenPreview() {
- TokushoTheme {
+ EtsudokuTheme {
CrashScreen(exception = RuntimeException("Dummy")) {}
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/crash/GlobalExceptionHandler.kt b/app/src/main/java/org/xtimms/etsudoku/crash/GlobalExceptionHandler.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/crash/GlobalExceptionHandler.kt
rename to app/src/main/java/org/xtimms/etsudoku/crash/GlobalExceptionHandler.kt
index 443a493..98b478b 100644
--- a/app/src/main/java/org/xtimms/tokusho/crash/GlobalExceptionHandler.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/crash/GlobalExceptionHandler.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.crash
+package org.xtimms.etsudoku.crash
import android.content.Context
import android.content.Intent
diff --git a/app/src/main/java/org/xtimms/tokusho/data/LocalStorageManager.kt b/app/src/main/java/org/xtimms/etsudoku/data/LocalStorageManager.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/data/LocalStorageManager.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/LocalStorageManager.kt
index f2c5edd..58c03cf 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/LocalStorageManager.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/LocalStorageManager.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data
+package org.xtimms.etsudoku.data
import android.content.Context
import android.os.StatFs
@@ -10,8 +10,8 @@ import kotlinx.coroutines.runInterruptible
import kotlinx.coroutines.withContext
import okhttp3.Cache
import org.koitharu.kotatsu.parsers.util.mapToSet
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.utils.system.computeSize
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.utils.system.computeSize
import java.io.File
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/BookmarksRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/BookmarksRepository.kt
similarity index 81%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/BookmarksRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/BookmarksRepository.kt
index 8ee9e0d..740611d 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/BookmarksRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/BookmarksRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import android.database.SQLException
import androidx.room.withTransaction
@@ -6,21 +6,21 @@ import dagger.Reusable
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.BookmarkEntity
-import org.xtimms.tokusho.core.database.entity.toBookmark
-import org.xtimms.tokusho.core.database.entity.toBookmarks
-import org.xtimms.tokusho.core.database.entity.toEntities
-import org.xtimms.tokusho.core.database.entity.toEntity
-import org.xtimms.tokusho.core.database.entity.toManga
-import org.xtimms.tokusho.core.model.Bookmark
-import org.xtimms.tokusho.utils.ReversibleHandle
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.BookmarkEntity
+import org.xtimms.etsudoku.core.database.entity.toBookmark
+import org.xtimms.etsudoku.core.database.entity.toBookmarks
+import org.xtimms.etsudoku.core.database.entity.toEntities
+import org.xtimms.etsudoku.core.database.entity.toEntity
+import org.xtimms.etsudoku.core.database.entity.toManga
+import org.xtimms.etsudoku.core.model.Bookmark
+import org.xtimms.etsudoku.utils.ReversibleHandle
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
@Reusable
class BookmarksRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
) {
fun observeBookmark(manga: Manga, chapterId: Long, page: Int): Flow {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/ExploreRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/ExploreRepository.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/ExploreRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/ExploreRepository.kt
index 6f09220..59ec43a 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/ExploreRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/ExploreRepository.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaListFilter
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.almostEquals
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.utils.lang.asArrayList
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.utils.lang.asArrayList
import javax.inject.Inject
class ExploreRepository @Inject constructor(
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/FavouritesRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/FavouritesRepository.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/FavouritesRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/FavouritesRepository.kt
index bcc80aa..2deae81 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/FavouritesRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/FavouritesRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import androidx.room.withTransaction
import dagger.Reusable
@@ -9,23 +9,23 @@ import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.toEntities
-import org.xtimms.tokusho.core.database.entity.toEntity
-import org.xtimms.tokusho.core.database.entity.toFavouriteCategory
-import org.xtimms.tokusho.core.database.entity.toManga
-import org.xtimms.tokusho.core.database.entity.toMangaList
-import org.xtimms.tokusho.core.model.FavouriteCategory
-import org.xtimms.tokusho.core.model.ListSortOrder
-import org.xtimms.tokusho.utils.ReversibleHandle
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.toEntities
+import org.xtimms.etsudoku.core.database.entity.toEntity
+import org.xtimms.etsudoku.core.database.entity.toFavouriteCategory
+import org.xtimms.etsudoku.core.database.entity.toManga
+import org.xtimms.etsudoku.core.database.entity.toMangaList
+import org.xtimms.etsudoku.core.model.FavouriteCategory
+import org.xtimms.etsudoku.core.model.ListSortOrder
+import org.xtimms.etsudoku.utils.ReversibleHandle
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
@Reusable
class FavouritesRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
) {
suspend fun getAllManga(): List {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/HistoryRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/HistoryRepository.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/HistoryRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/HistoryRepository.kt
index 0d45e55..2cbe05c 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/HistoryRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/HistoryRepository.kt
@@ -1,28 +1,28 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import androidx.room.withTransaction
import dagger.Reusable
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.map
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.toManga
-import org.xtimms.tokusho.core.database.entity.toMangaHistory
-import org.xtimms.tokusho.core.database.entity.toMangaTags
-import org.xtimms.tokusho.core.model.MangaHistory
-import org.xtimms.tokusho.core.model.MangaWithHistory
-import org.xtimms.tokusho.core.model.findById
-import org.xtimms.tokusho.core.model.isNsfw
-import org.xtimms.tokusho.core.parser.MangaDataRepository
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.toManga
+import org.xtimms.etsudoku.core.database.entity.toMangaHistory
+import org.xtimms.etsudoku.core.database.entity.toMangaTags
+import org.xtimms.etsudoku.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.MangaWithHistory
+import org.xtimms.etsudoku.core.model.findById
+import org.xtimms.etsudoku.core.model.isNsfw
+import org.xtimms.etsudoku.core.parser.MangaDataRepository
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
const val PROGRESS_NONE = -1f
@Reusable
class HistoryRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
private val mangaRepository: MangaDataRepository,
) {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/MangaSourcesRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/MangaSourcesRepository.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/MangaSourcesRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/MangaSourcesRepository.kt
index f279cb3..a7e8c37 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/MangaSourcesRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/MangaSourcesRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import androidx.compose.runtime.Composable
import dagger.Reusable
@@ -14,17 +14,17 @@ import kotlinx.coroutines.flow.map
import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.mapToSet
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.dao.MangaSourcesDao
-import org.xtimms.tokusho.core.database.entity.MangaSourceEntity
-import org.xtimms.tokusho.core.model.MangaSource
-import org.xtimms.tokusho.core.model.isNsfw
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.KotatsuAppSettings
-import org.xtimms.tokusho.core.prefs.observeAsFlow
-import org.xtimms.tokusho.sections.explore.data.SourcesSortOrder
-import org.xtimms.tokusho.utils.ReversibleHandle
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.dao.MangaSourcesDao
+import org.xtimms.etsudoku.core.database.entity.MangaSourceEntity
+import org.xtimms.etsudoku.core.model.MangaSource
+import org.xtimms.etsudoku.core.model.isNsfw
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.KotatsuAppSettings
+import org.xtimms.etsudoku.core.prefs.observeAsFlow
+import org.xtimms.etsudoku.sections.explore.data.SourcesSortOrder
+import org.xtimms.etsudoku.utils.ReversibleHandle
import java.util.Collections
import java.util.EnumSet
import javax.inject.Inject
@@ -32,7 +32,7 @@ import javax.inject.Inject
@OptIn(ExperimentalCoroutinesApi::class)
@Reusable
class MangaSourcesRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
private val settings: KotatsuAppSettings,
) {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/SuggestionRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/SuggestionRepository.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/SuggestionRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/SuggestionRepository.kt
index e0656b4..fa0b149 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/SuggestionRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/SuggestionRepository.kt
@@ -1,20 +1,20 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import androidx.room.withTransaction
import kotlinx.coroutines.flow.Flow
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.SuggestionEntity
-import org.xtimms.tokusho.core.database.entity.toEntities
-import org.xtimms.tokusho.core.database.entity.toEntity
-import org.xtimms.tokusho.core.database.entity.toManga
-import org.xtimms.tokusho.core.database.entity.toMangaTags
-import org.xtimms.tokusho.core.model.MangaSuggestion
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.SuggestionEntity
+import org.xtimms.etsudoku.core.database.entity.toEntities
+import org.xtimms.etsudoku.core.database.entity.toEntity
+import org.xtimms.etsudoku.core.database.entity.toManga
+import org.xtimms.etsudoku.core.database.entity.toMangaTags
+import org.xtimms.etsudoku.core.model.MangaSuggestion
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
class SuggestionRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
) {
fun observeAll(): Flow> {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/TrackingRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/TrackingRepository.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/TrackingRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/TrackingRepository.kt
index 3beff23..a7b46ea 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/TrackingRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/TrackingRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository
+package org.xtimms.etsudoku.data.repository
import androidx.annotation.VisibleForTesting
import androidx.collection.MutableLongSet
@@ -13,20 +13,20 @@ import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.onStart
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.util.mapToSet
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.TrackEntity
-import org.xtimms.tokusho.core.database.entity.TrackLogEntity
-import org.xtimms.tokusho.core.database.entity.toFavouriteCategory
-import org.xtimms.tokusho.core.database.entity.toManga
-import org.xtimms.tokusho.core.database.entity.toTrackingLogItem
-import org.xtimms.tokusho.core.model.FavouriteCategory
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.core.parser.local.LocalMangaRepository
-import org.xtimms.tokusho.core.tracker.model.MangaTracking
-import org.xtimms.tokusho.core.tracker.model.MangaUpdates
-import org.xtimms.tokusho.core.tracker.model.TrackingLogItem
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.TrackEntity
+import org.xtimms.etsudoku.core.database.entity.TrackLogEntity
+import org.xtimms.etsudoku.core.database.entity.toFavouriteCategory
+import org.xtimms.etsudoku.core.database.entity.toManga
+import org.xtimms.etsudoku.core.database.entity.toTrackingLogItem
+import org.xtimms.etsudoku.core.model.FavouriteCategory
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.core.parser.local.LocalMangaRepository
+import org.xtimms.etsudoku.core.tracker.model.MangaTracking
+import org.xtimms.etsudoku.core.tracker.model.MangaUpdates
+import org.xtimms.etsudoku.core.tracker.model.TrackingLogItem
+import org.xtimms.etsudoku.utils.lang.mapItems
import java.time.Instant
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
@@ -37,7 +37,7 @@ private const val MAX_QUERY_IDS = 100
@Reusable
class TrackingRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
private val localMangaRepositoryProvider: Provider,
) {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupEntry.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupEntry.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupEntry.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupEntry.kt
index d4c12f4..2c41d9c 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupEntry.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupEntry.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import org.json.JSONArray
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupRepository.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupRepository.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupRepository.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupRepository.kt
index 5b0b3c7..5025d55 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupRepository.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupRepository.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import androidx.room.withTransaction
import org.json.JSONArray
@@ -7,15 +7,15 @@ import org.koitharu.kotatsu.parsers.util.json.JSONIterator
import org.koitharu.kotatsu.parsers.util.json.getLongOrDefault
import org.koitharu.kotatsu.parsers.util.json.mapJSON
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.core.database.TokushoDatabase
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
import java.util.Date
import javax.inject.Inject
private const val PAGE_SIZE = 10
class BackupRepository @Inject constructor(
- private val db: TokushoDatabase,
+ private val db: EtsudokuDatabase,
) {
suspend fun dumpHistory(): BackupEntry {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipInput.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipInput.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipInput.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipInput.kt
index 54e11bf..c23ef9f 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipInput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipInput.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
@@ -6,7 +6,7 @@ import kotlinx.coroutines.launch
import kotlinx.coroutines.runInterruptible
import okio.Closeable
import org.json.JSONArray
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
import java.io.File
import java.util.EnumSet
import java.util.zip.ZipFile
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipOutput.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipOutput.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipOutput.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipOutput.kt
index 4a0a8d3..efafe76 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/BackupZipOutput.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/BackupZipOutput.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import android.content.Context
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runInterruptible
import okio.Closeable
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.zip.ZipOutput
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.zip.ZipOutput
import java.io.File
import java.time.LocalDate
import java.time.format.DateTimeFormatter
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/CompositeResult.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/CompositeResult.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/CompositeResult.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/CompositeResult.kt
index 5cda730..9601322 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/CompositeResult.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/CompositeResult.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
class CompositeResult {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonDeserializer.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonDeserializer.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonDeserializer.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonDeserializer.kt
index e51dc1b..77d55ad 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonDeserializer.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonDeserializer.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import org.json.JSONObject
import org.koitharu.kotatsu.parsers.model.SortOrder
@@ -6,13 +6,13 @@ import org.koitharu.kotatsu.parsers.util.json.getBooleanOrDefault
import org.koitharu.kotatsu.parsers.util.json.getFloatOrDefault
import org.koitharu.kotatsu.parsers.util.json.getIntOrDefault
import org.koitharu.kotatsu.parsers.util.json.getStringOrNull
-import org.xtimms.tokusho.core.database.entity.BookmarkEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.MangaSourceEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.BookmarkEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.MangaSourceEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
class JsonDeserializer(private val json: JSONObject) {
diff --git a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonSerializer.kt b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializer.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonSerializer.kt
rename to app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializer.kt
index 9e3a221..ffc8e24 100644
--- a/app/src/main/java/org/xtimms/tokusho/data/repository/backup/JsonSerializer.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializer.kt
@@ -1,13 +1,13 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import org.json.JSONObject
-import org.xtimms.tokusho.core.database.entity.BookmarkEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.MangaSourceEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.BookmarkEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.MangaSourceEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
class JsonSerializer private constructor(private val json: JSONObject) {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/ChapterListItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/ChapterListItem.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/ChapterListItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/ChapterListItem.kt
index 59eecd2..6c867e9 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/ChapterListItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/ChapterListItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
@@ -30,10 +30,14 @@ import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.DotSeparatorText
-import org.xtimms.tokusho.utils.composable.selectedBackground
-import org.xtimms.tokusho.utils.material.SecondaryItemAlpha
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.DotSeparatorText
+import org.xtimms.etsudoku.utils.composable.selectedBackground
+import org.xtimms.etsudoku.utils.material.SecondaryItemAlpha
+import java.time.Instant
+import java.time.LocalDateTime
+import java.time.ZoneId
+import java.time.format.DateTimeFormatter
@OptIn(ExperimentalFoundationApi::class)
@Composable
@@ -106,7 +110,12 @@ fun ChapterListItem(
ProvideTextStyle(value = MaterialTheme.typography.bodySmall) {
if (date != null) {
Text(
- text = date.toString(),
+ text = LocalDateTime.ofInstant(
+ Instant.ofEpochMilli(date),
+ ZoneId.systemDefault()
+ ).format(
+ DateTimeFormatter.ISO_LOCAL_DATE
+ ),
maxLines = 1,
overflow = TextOverflow.Ellipsis,
)
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/ChaptersMapper.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/ChaptersMapper.kt
similarity index 85%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/ChaptersMapper.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/ChaptersMapper.kt
index 0d15011..2570c23 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/ChaptersMapper.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/ChaptersMapper.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import org.koitharu.kotatsu.parsers.util.mapToSet
-import org.xtimms.tokusho.core.model.Bookmark
-import org.xtimms.tokusho.core.model.MangaHistory
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.sections.details.model.ChapterItem
-import org.xtimms.tokusho.sections.details.model.toListItem
+import org.xtimms.etsudoku.core.model.Bookmark
+import org.xtimms.etsudoku.core.model.MangaHistory
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.sections.details.model.ChapterItem
+import org.xtimms.etsudoku.sections.details.model.toListItem
fun MangaDetails.mapChapters(
history: MangaHistory?,
diff --git a/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsEvent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsEvent.kt
new file mode 100644
index 0000000..53a1cce
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsEvent.kt
@@ -0,0 +1,5 @@
+package org.xtimms.etsudoku.sections.details
+
+import org.xtimms.etsudoku.core.base.event.UiEvent
+
+interface DetailsEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsInfoHeader.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsInfoHeader.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/DetailsInfoHeader.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsInfoHeader.kt
index 112984e..a74f0f8 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsInfoHeader.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsInfoHeader.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import android.net.Uri
import androidx.compose.animation.AnimatedContent
@@ -82,9 +82,12 @@ import androidx.compose.ui.graphics.Color
import androidx.compose.ui.layout.ContentScale
import androidx.compose.ui.layout.Layout
import androidx.compose.ui.platform.LocalContext
+import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.semantics.Role
+import androidx.compose.ui.text.SpanStyle
import androidx.compose.ui.text.style.TextAlign
+import androidx.compose.ui.text.style.TextDecoration
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.Constraints
@@ -95,16 +98,19 @@ import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.MangaTag
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.AsyncImageImpl
-import org.xtimms.tokusho.core.components.AnimatedButton
-import org.xtimms.tokusho.core.components.ButtonType
-import org.xtimms.tokusho.core.components.MangaCover
-import org.xtimms.tokusho.core.components.ReadButton
-import org.xtimms.tokusho.core.parser.favicon.faviconUri
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.composable.clickableNoIndication
-import org.xtimms.tokusho.utils.composable.secondaryItemAlpha
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.components.AnimatedButton
+import org.xtimms.etsudoku.core.components.ButtonType
+import org.xtimms.etsudoku.core.components.HtmlTextField
+import org.xtimms.etsudoku.core.components.MangaCover
+import org.xtimms.etsudoku.core.components.ReadButton
+import org.xtimms.etsudoku.core.parser.favicon.faviconUri
+import org.xtimms.etsudoku.sections.details.data.ReadingTime
+import org.xtimms.etsudoku.sections.details.model.HistoryInfo
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.composable.clickableNoIndication
+import org.xtimms.etsudoku.utils.composable.secondaryItemAlpha
import kotlin.math.roundToInt
private val whitespaceLineRegex = Regex("[\\r\\n]{2,}", setOf(RegexOption.MULTILINE))
@@ -116,13 +122,12 @@ fun DetailsInfoBox(
favicon: Uri,
title: String,
altTitle: String,
- score: Float,
author: String,
- artist: String?,
isNsfw: Boolean,
state: MangaState?,
source: MangaSource,
- chapters: String?,
+ historyInfo: HistoryInfo,
+ readingTime: ReadingTime?,
isTabletUi: Boolean,
appBarPadding: Dp,
modifier: Modifier = Modifier,
@@ -172,21 +177,17 @@ fun DetailsInfoBox(
if (!isTabletUi) {
MangaAndSourceTitlesSmall(
coil = coil,
- appBarPadding = appBarPadding,
- imageUrl = imageUrl,
favicon = favicon,
title = title,
altTitle = altTitle,
- score = score,
author = author,
- artist = artist,
- isNsfw = isNsfw,
state = state,
source = source,
- chapters = chapters,
isInShelf = isInShelf,
onAddToShelfClicked = onAddToShelfClicked,
- onSourceClicked = onSourceClicked
+ onSourceClicked = onSourceClicked,
+ historyInfo = historyInfo,
+ readingTime = readingTime
)
} else {
MangaAndSourceTitlesLarge(
@@ -196,15 +197,14 @@ fun DetailsInfoBox(
favicon = favicon,
title = title,
altTitle = altTitle,
- score = score,
author = author,
- artist = artist,
- isNsfw = isNsfw,
state = state,
source = source,
isInShelf = isInShelf,
onAddToShelfClicked = onAddToShelfClicked,
- onSourceClicked = onSourceClicked
+ onSourceClicked = onSourceClicked,
+ historyInfo = historyInfo,
+ readingTime = readingTime
)
}
}
@@ -219,12 +219,11 @@ private fun MangaAndSourceTitlesLarge(
favicon: Uri,
title: String,
altTitle: String,
- score: Float,
author: String,
- artist: String?,
- isNsfw: Boolean,
source: MangaSource,
state: MangaState?,
+ historyInfo: HistoryInfo,
+ readingTime: ReadingTime?,
isInShelf: Boolean,
onAddToShelfClicked: () -> Unit,
onSourceClicked: () -> Unit,
@@ -247,14 +246,14 @@ private fun MangaAndSourceTitlesLarge(
favicon = favicon,
title = title,
altTitle = altTitle,
- score = score,
author = author,
- isNsfw = isNsfw,
state = state,
source = source.title,
isInShelf = isInShelf,
onAddToShelfClicked = onAddToShelfClicked,
- onSourceClicked = onSourceClicked
+ onSourceClicked = onSourceClicked,
+ historyInfo = historyInfo,
+ readingTime = readingTime
)
}
}
@@ -262,18 +261,14 @@ private fun MangaAndSourceTitlesLarge(
@Composable
private fun MangaAndSourceTitlesSmall(
coil: ImageLoader,
- appBarPadding: Dp,
- imageUrl: String,
favicon: Uri,
title: String,
altTitle: String,
- score: Float,
author: String,
- artist: String?,
- isNsfw: Boolean,
state: MangaState?,
source: MangaSource,
- chapters: String?,
+ historyInfo: HistoryInfo,
+ readingTime: ReadingTime?,
isInShelf: Boolean,
onAddToShelfClicked: () -> Unit,
onSourceClicked: () -> Unit,
@@ -301,14 +296,14 @@ private fun MangaAndSourceTitlesSmall(
favicon = favicon,
title = title,
altTitle = altTitle,
- score = score,
author = author,
- isNsfw = isNsfw,
state = state,
source = source.title,
isInShelf = isInShelf,
onAddToShelfClicked = onAddToShelfClicked,
- onSourceClicked = onSourceClicked
+ onSourceClicked = onSourceClicked,
+ historyInfo = historyInfo,
+ readingTime = readingTime
)
}
}
@@ -324,11 +319,11 @@ private fun DetailsContentInfo(
favicon: Uri,
title: String,
altTitle: String,
- score: Float,
author: String,
- isNsfw: Boolean,
state: MangaState?,
source: String?,
+ historyInfo: HistoryInfo,
+ readingTime: ReadingTime?,
isInShelf: Boolean,
onAddToShelfClicked: () -> Unit,
onSourceClicked: () -> Unit,
@@ -481,7 +476,7 @@ private fun DetailsContentInfo(
modifier = Modifier
.height(32.dp)
.width(56.dp),
- onClick = { /*TODO*/ },
+ onClick = { onAddToShelfClicked() /*TODO*/ },
shape = MaterialTheme.shapes.small,
border = BorderStroke(1.dp, MaterialTheme.colorScheme.outline)
) {
@@ -509,18 +504,12 @@ private fun DetailsContentInfo(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.spacedBy(8.dp)
) {
- ReadButton()
- /*FilledTonalButton(
- modifier = Modifier
- .height(54.dp)
- .weight(1f),
- onClick = { /*TODO*/ }
- ) {
- Icon(imageVector = Icons.Outlined.PlayArrow, contentDescription = null)
- Spacer(modifier = Modifier.width(8.dp))
- Text(text = stringResource(id = R.string.read))
- }*/
-
+ val readTime = if (readingTime?.isContinue == true) {
+ readingTime.format(LocalContext.current.resources)
+ } else {
+ stringResource(id = R.string.you_completed_reading)
+ }
+ ReadButton(historyInfo, readTime)
AnimatedButton(
modifier = Modifier
.size(54.dp),
@@ -550,92 +539,6 @@ private fun DetailsContentInfo(
}
}
-@Composable
-private fun RowScope.DetailsRow(
- source: String?,
- chapters: String?,
- state: MangaState?,
- textAlign: TextAlign? = LocalTextStyle.current.textAlign,
-) {
- Column(
- modifier = Modifier
- .weight(1f)
- .wrapContentSize()
- .secondaryItemAlpha()
- .padding(bottom = 16.dp),
- verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Icon(
- imageVector = when (state) {
- MangaState.ONGOING -> Icons.Outlined.Schedule
- MangaState.FINISHED -> Icons.Outlined.DoneAll
- MangaState.ABANDONED -> Icons.Outlined.Close
- MangaState.PAUSED -> Icons.Outlined.Pause
- MangaState.UPCOMING -> Icons.Outlined.Upcoming
- else -> Icons.Outlined.Block
- },
- contentDescription = null,
- modifier = Modifier
- .size(24.dp),
- )
- ProvideTextStyle(MaterialTheme.typography.bodySmall) {
- Text(
- text = when (state) {
- MangaState.ONGOING -> stringResource(id = R.string.ongoing)
- MangaState.FINISHED -> stringResource(id = R.string.finished)
- MangaState.ABANDONED -> stringResource(id = R.string.abandoned)
- MangaState.PAUSED -> stringResource(id = R.string.paused)
- MangaState.UPCOMING -> stringResource(id = R.string.upcoming)
- else -> stringResource(id = R.string.unknown)
- },
- overflow = TextOverflow.Ellipsis,
- maxLines = 1,
- )
- }
- }
- Column(
- modifier = Modifier
- .weight(1f)
- .wrapContentSize()
- .secondaryItemAlpha(),
- verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically),
- horizontalAlignment = Alignment.CenterHorizontally,
- ) {
- Icon(
- imageVector = Icons.AutoMirrored.Outlined.MenuBook,
- contentDescription = null,
- modifier = Modifier.size(24.dp)
- )
- Text(
- text = chapters?.takeIf { it.isNotBlank() }
- ?: stringResource(id = R.string.unknown),
- style = MaterialTheme.typography.bodySmall,
- textAlign = textAlign
- )
- }
- Column(
- modifier = Modifier
- .weight(1f)
- .wrapContentSize()
- .secondaryItemAlpha(),
- verticalArrangement = Arrangement.spacedBy(4.dp, Alignment.CenterVertically),
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Icon(
- imageVector = Icons.Outlined.Language,
- contentDescription = null,
- modifier = Modifier.size(24.dp)
- )
- Text(
- text = source?.takeIf { it.isNotBlank() }
- ?: stringResource(id = R.string.unknown),
- style = MaterialTheme.typography.bodySmall,
- textAlign = textAlign
- )
- }
-}
-
@OptIn(ExperimentalLayoutApi::class)
@Composable
fun ExpandableMangaDescription(
@@ -732,6 +635,9 @@ private fun MangaSummary(
expanded: Boolean,
modifier: Modifier = Modifier,
) {
+
+ val uriHandler = LocalUriHandler.current
+
val animProgress by animateFloatAsState(
targetValue = if (expanded) 1f else 0f,
label = "summary",
@@ -746,19 +652,26 @@ private fun MangaSummary(
)
},
{
- Text(
+ HtmlTextField(
text = expandedDescription,
style = MaterialTheme.typography.bodyMedium,
+ urlSpanStyle = SpanStyle(
+ color = MaterialTheme.colorScheme.primary,
+ textDecoration = TextDecoration.Underline
+ )
)
},
{
SelectionContainer {
- Text(
+ HtmlTextField(
text = if (expanded) expandedDescription else shrunkDescription,
maxLines = Int.MAX_VALUE,
style = MaterialTheme.typography.bodyMedium,
- color = MaterialTheme.colorScheme.onBackground,
modifier = Modifier.secondaryItemAlpha(),
+ urlSpanStyle = SpanStyle(
+ color = MaterialTheme.colorScheme.primary,
+ textDecoration = TextDecoration.Underline
+ )
)
}
},
@@ -822,49 +735,4 @@ private fun TagsChip(
label = { Text(text = tag.title) },
)
}
-}
-
-@Preview(showBackground = true, showSystemUi = true)
-@Composable
-fun DetailsInfoBoxPreview() {
- TokushoTheme {
- LazyColumn() {
- item {
- DetailsInfoBox(
- coil = ImageLoader(LocalContext.current),
- appBarPadding = 0.dp,
- imageUrl = "",
- favicon = MangaSource.MANGADEX.faviconUri(),
- title = "Yofukashi no Uta",
- altTitle = "よふかしのうた",
- score = 3f,
- author = "Kotoyama",
- artist = null,
- isNsfw = true,
- state = MangaState.UPCOMING,
- source = MangaSource.MANGADEX,
- chapters = "22",
- isTabletUi = false,
- onCoverClick = {},
- isInShelf = true,
- onAddToShelfClicked = {},
- onSourceClicked = {}
- )
- }
- item {
- ExpandableMangaDescription(
- defaultExpandState = true,
- description = "Test ".repeat(5),
- tagsProvider = {
- setOf(
- MangaTag("Test", "1", MangaSource.DUMMY),
- MangaTag("Test", "2", MangaSource.DUMMY)
- )
- },
- onTagSearch = { },
- onCopyTagToClipboard = { }
- )
- }
- }
- }
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsUiState.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsUiState.kt
similarity index 66%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/DetailsUiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsUiState.kt
index f1b396d..ce4a9d9 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsUiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsUiState.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
-import org.xtimms.tokusho.core.base.state.UiState
-import org.xtimms.tokusho.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.core.base.state.UiState
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
data class DetailsUiState(
val details: MangaDetails? = null,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsView.kt
similarity index 80%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/DetailsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsView.kt
index a4dfa69..6640509 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsView.kt
@@ -1,7 +1,10 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import android.net.Uri
+import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.animateFloatAsState
+import androidx.compose.animation.fadeIn
+import androidx.compose.animation.fadeOut
import androidx.compose.foundation.gestures.snapping.rememberSnapFlingBehavior
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -10,6 +13,8 @@ import androidx.compose.foundation.layout.WindowInsets
import androidx.compose.foundation.layout.calculateEndPadding
import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxHeight
+import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.sizeIn
@@ -46,11 +51,12 @@ import kotlinx.coroutines.flow.collectLatest
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.RATING_UNKNOWN
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.DetailsToolbar
-import org.xtimms.tokusho.core.components.MangaHorizontalItem
-import org.xtimms.tokusho.core.parser.favicon.faviconUri
-import org.xtimms.tokusho.utils.lang.toNavArgument
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.DetailsToolbar
+import org.xtimms.etsudoku.core.components.MangaHorizontalItem
+import org.xtimms.etsudoku.core.parser.favicon.faviconUri
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.utils.lang.toNavArgument
const val MANGA_ID_ARGUMENT = "{mangaId}"
const val DETAILS_DESTINATION = "details/?mangaId=$MANGA_ID_ARGUMENT"
@@ -78,15 +84,15 @@ fun DetailsView(
uriHandler.openUri(url)
}
- val isChaptersEmpty by viewModel.isChaptersEmpty.collectAsStateWithLifecycle(false)
val chapters by viewModel.chapters.collectAsStateWithLifecycle(emptyList())
val relatedManga by viewModel.relatedManga.collectAsStateWithLifecycle(emptyList())
val readingTime by viewModel.readingTime.collectAsStateWithLifecycle(null)
val favouriteCategories by viewModel.favouriteCategories.collectAsStateWithLifecycle()
val details by viewModel.details.collectAsStateWithLifecycle(null)
+ val historyInfo by viewModel.historyInfo.collectAsStateWithLifecycle()
LaunchedEffect(mangaId) {
- if (viewModel.details.value == null) viewModel.doLoad(mangaId)
+ if (details == null) viewModel.doLoad(mangaId)
}
LaunchedEffect(Unit) {
@@ -152,13 +158,10 @@ fun DetailsView(
favicon = manga?.source?.faviconUri() ?: Uri.EMPTY,
title = manga?.title.orEmpty(),
altTitle = manga?.altTitle.orEmpty(),
- score = manga?.rating ?: RATING_UNKNOWN,
author = manga?.author.orEmpty(),
- artist = "",
isNsfw = manga?.isNsfw ?: true,
state = manga?.state ?: MangaState.FINISHED,
source = manga?.source ?: MangaSource.DUMMY,
- chapters = chapters.size.toString(),
isTabletUi = false,
appBarPadding = topPadding,
onCoverClick = {
@@ -168,6 +171,8 @@ fun DetailsView(
).toNavArgument()
)
},
+ historyInfo = historyInfo,
+ readingTime = readingTime,
isInShelf = favouriteCategories,
onAddToShelfClicked = {
openCategoriesBottomSheet = !openCategoriesBottomSheet
@@ -206,33 +211,39 @@ fun DetailsView(
}
item {
- Column {
- Text(
- modifier = Modifier.padding(start = 16.dp, end = 8.dp),
- text = stringResource(id = R.string.related_manga),
- style = MaterialTheme.typography.titleLarge
- )
- LazyRow(
- modifier = Modifier
- .padding(top = 8.dp)
- .sizeIn(minHeight = 100.dp),
- state = relatedMangaListState,
- contentPadding = PaddingValues(horizontal = 8.dp),
- flingBehavior = rememberSnapFlingBehavior(lazyListState = relatedMangaListState)
- ) {
- items(
- items = relatedManga,
- key = { it.id },
- contentType = { it }
+ AnimatedVisibility(
+ visible = relatedManga.isNotEmpty(),
+ enter = fadeIn(),
+ exit = fadeOut()
+ ) {
+ Column {
+ Text(
+ modifier = Modifier.padding(start = 16.dp, end = 8.dp),
+ text = stringResource(id = R.string.related_manga),
+ style = MaterialTheme.typography.titleLarge
+ )
+ LazyRow(
+ modifier = Modifier
+ .padding(top = 8.dp)
+ .sizeIn(minHeight = 100.dp),
+ state = relatedMangaListState,
+ contentPadding = PaddingValues(horizontal = 8.dp),
+ flingBehavior = rememberSnapFlingBehavior(lazyListState = relatedMangaListState)
) {
- MangaHorizontalItem(
- coil = coil,
- manga = it,
- onClick = { navigateToDetails(it.id) },
- onLongClick = { })
+ items(
+ items = relatedManga,
+ key = { it.id },
+ contentType = { it }
+ ) {
+ MangaHorizontalItem(
+ coil = coil,
+ manga = it,
+ onClick = { navigateToDetails(it.id) },
+ onLongClick = { })
+ }
}
+ HorizontalDivider(modifier = Modifier.padding(16.dp))
}
- HorizontalDivider(modifier = Modifier.padding(16.dp))
}
}
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewConstants.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewConstants.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewConstants.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewConstants.kt
index c63972a..aae35f4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewConstants.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewConstants.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
enum class DetailsViewItem {
INFO_BOX,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewModel.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewModel.kt
index 409337c..0418055 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/DetailsViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import androidx.lifecycle.SavedStateHandle
import androidx.lifecycle.viewModelScope
@@ -21,24 +21,24 @@ import kotlinx.coroutines.flow.receiveAsFlow
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.core.model.findById
-import org.xtimms.tokusho.core.model.getPreferredBranch
-import org.xtimms.tokusho.core.parser.MangaIntent
-import org.xtimms.tokusho.data.repository.BookmarksRepository
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.sections.details.domain.BranchComparator
-import org.xtimms.tokusho.sections.details.domain.DetailsInteractor
-import org.xtimms.tokusho.sections.details.domain.DetailsLoadUseCase
-import org.xtimms.tokusho.sections.details.domain.ReadingTimeUseCase
-import org.xtimms.tokusho.sections.details.domain.RelatedMangaUseCase
-import org.xtimms.tokusho.sections.details.model.ChapterItem
-import org.xtimms.tokusho.sections.details.model.HistoryInfo
-import org.xtimms.tokusho.sections.details.model.MangaBranch
-import org.xtimms.tokusho.utils.lang.onEachWhile
-import org.xtimms.tokusho.utils.lang.removeFirstAndLast
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.core.model.findById
+import org.xtimms.etsudoku.core.model.getPreferredBranch
+import org.xtimms.etsudoku.core.parser.MangaIntent
+import org.xtimms.etsudoku.data.repository.BookmarksRepository
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.sections.details.domain.BranchComparator
+import org.xtimms.etsudoku.sections.details.domain.DetailsInteractor
+import org.xtimms.etsudoku.sections.details.domain.DetailsLoadUseCase
+import org.xtimms.etsudoku.sections.details.domain.ReadingTimeUseCase
+import org.xtimms.etsudoku.sections.details.domain.RelatedMangaUseCase
+import org.xtimms.etsudoku.sections.details.model.ChapterItem
+import org.xtimms.etsudoku.sections.details.model.HistoryInfo
+import org.xtimms.etsudoku.sections.details.model.MangaBranch
+import org.xtimms.etsudoku.utils.lang.onEachWhile
+import org.xtimms.etsudoku.utils.lang.removeFirstAndLast
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/FullImageView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/FullImageView.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/FullImageView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/FullImageView.kt
index f233a42..fe92fda 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/FullImageView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/FullImageView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details
+package org.xtimms.etsudoku.sections.details
import androidx.compose.foundation.background
import androidx.compose.foundation.clickable
@@ -30,10 +30,10 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import coil.ImageLoader
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.core.AsyncImageImpl
-import org.xtimms.tokusho.core.components.BackIconButton
-import org.xtimms.tokusho.core.components.ViewInBrowserButton
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.components.BackIconButton
+import org.xtimms.etsudoku.core.components.ViewInBrowserButton
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
const val PICTURES_ARGUMENT = "{pictures}"
const val FULL_POSTER_DESTINATION = "full_poster/$PICTURES_ARGUMENT"
@@ -129,7 +129,7 @@ fun FullImageView(
@Preview(showBackground = true)
@Composable
fun FullPosterPreview() {
- TokushoTheme {
+ EtsudokuTheme {
FullImageView(
coil = ImageLoader(LocalContext.current),
pictures = arrayOf("", ""),
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/data/MangaDetails.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/data/MangaDetails.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/data/MangaDetails.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/data/MangaDetails.kt
index 839498a..36d6bc7 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/data/MangaDetails.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/data/MangaDetails.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.sections.details.data
+package org.xtimms.etsudoku.sections.details.data
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.model.LocalManga
-import org.xtimms.tokusho.core.model.isLocal
+import org.xtimms.etsudoku.core.model.LocalManga
+import org.xtimms.etsudoku.core.model.isLocal
data class MangaDetails(
private val manga: Manga,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/data/ReadingTime.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/data/ReadingTime.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/data/ReadingTime.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/data/ReadingTime.kt
index 1a06321..65694de 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/data/ReadingTime.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/data/ReadingTime.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.details.data
+package org.xtimms.etsudoku.sections.details.data
import android.content.res.Resources
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
data class ReadingTime(
val minutes: Int,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/BranchComparator.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/BranchComparator.kt
similarity index 56%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/domain/BranchComparator.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/domain/BranchComparator.kt
index af79ade..2c3f5e9 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/BranchComparator.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/BranchComparator.kt
@@ -1,6 +1,6 @@
-package org.xtimms.tokusho.sections.details.domain
+package org.xtimms.etsudoku.sections.details.domain
-import org.xtimms.tokusho.sections.details.model.MangaBranch
+import org.xtimms.etsudoku.sections.details.model.MangaBranch
class BranchComparator : Comparator {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsInteractor.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsInteractor.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsInteractor.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsInteractor.kt
index 516d137..c17516e 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsInteractor.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsInteractor.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details.domain
+package org.xtimms.etsudoku.sections.details.domain
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.flow.Flow
@@ -7,9 +7,9 @@ import kotlinx.coroutines.flow.distinctUntilChangedBy
import kotlinx.coroutines.flow.flatMapLatest
import kotlinx.coroutines.flow.map
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.data.repository.HistoryRepository
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.data.repository.HistoryRepository
import javax.inject.Inject
class DetailsInteractor @Inject constructor(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsLoadUseCase.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsLoadUseCase.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsLoadUseCase.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsLoadUseCase.kt
index b90e0aa..41d76c4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/DetailsLoadUseCase.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/DetailsLoadUseCase.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.details.domain
+package org.xtimms.etsudoku.sections.details.domain
import android.text.Html
import android.text.SpannableString
@@ -13,14 +13,14 @@ import kotlinx.coroutines.flow.channelFlow
import kotlinx.coroutines.runInterruptible
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.model.isLocal
-import org.xtimms.tokusho.core.parser.MangaDataRepository
-import org.xtimms.tokusho.core.parser.MangaIntent
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.local.LocalMangaRepository
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.utils.lang.peek
-import org.xtimms.tokusho.utils.lang.sanitize
+import org.xtimms.etsudoku.core.model.isLocal
+import org.xtimms.etsudoku.core.parser.MangaDataRepository
+import org.xtimms.etsudoku.core.parser.MangaIntent
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.local.LocalMangaRepository
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.utils.lang.peek
+import org.xtimms.etsudoku.utils.lang.sanitize
import java.io.IOException
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/ReadingTimeUseCase.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/ReadingTimeUseCase.kt
similarity index 78%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/domain/ReadingTimeUseCase.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/domain/ReadingTimeUseCase.kt
index 9bc04d6..332a57a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/ReadingTimeUseCase.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/ReadingTimeUseCase.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.sections.details.domain
+package org.xtimms.etsudoku.sections.details.domain
-import org.xtimms.tokusho.core.model.MangaHistory
-import org.xtimms.tokusho.core.model.findById
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.sections.details.data.ReadingTime
+import org.xtimms.etsudoku.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.findById
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.sections.details.data.ReadingTime
import javax.inject.Inject
import kotlin.math.roundToInt
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/RelatedMangaUseCase.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/RelatedMangaUseCase.kt
similarity index 81%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/domain/RelatedMangaUseCase.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/domain/RelatedMangaUseCase.kt
index a71066e..6e72570 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/domain/RelatedMangaUseCase.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/domain/RelatedMangaUseCase.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.sections.details.domain
+package org.xtimms.etsudoku.sections.details.domain
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.MangaRepository
import javax.inject.Inject
class RelatedMangaUseCase @Inject constructor(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/model/ChapterItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/ChapterItem.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/model/ChapterItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/model/ChapterItem.kt
index 305806c..c77228d 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/model/ChapterItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/ChapterItem.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.sections.details.model
+package org.xtimms.etsudoku.sections.details.model
import android.text.format.DateUtils
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.model.ListModel
-import org.xtimms.tokusho.core.model.formatNumber
+import org.xtimms.etsudoku.core.model.ListModel
+import org.xtimms.etsudoku.core.model.formatNumber
import org.jsoup.internal.StringUtil.StringJoiner
data class ChapterItem(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/model/HistoryInfo.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/HistoryInfo.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/model/HistoryInfo.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/model/HistoryInfo.kt
index 73dc6de..a18b7d7 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/model/HistoryInfo.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/HistoryInfo.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.details.model
+package org.xtimms.etsudoku.sections.details.model
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.MangaHistory
data class HistoryInfo(
val totalChapters: Int,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/model/ListModelConversionExt.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/ListModelConversionExt.kt
similarity index 55%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/model/ListModelConversionExt.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/model/ListModelConversionExt.kt
index 96e81a1..49db462 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/model/ListModelConversionExt.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/ListModelConversionExt.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.sections.details.model
+package org.xtimms.etsudoku.sections.details.model
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.sections.details.model.ChapterItem.Companion.FLAG_BOOKMARKED
-import org.xtimms.tokusho.sections.details.model.ChapterItem.Companion.FLAG_CURRENT
-import org.xtimms.tokusho.sections.details.model.ChapterItem.Companion.FLAG_DOWNLOADED
-import org.xtimms.tokusho.sections.details.model.ChapterItem.Companion.FLAG_NEW
-import org.xtimms.tokusho.sections.details.model.ChapterItem.Companion.FLAG_UNREAD
+import org.xtimms.etsudoku.sections.details.model.ChapterItem.Companion.FLAG_BOOKMARKED
+import org.xtimms.etsudoku.sections.details.model.ChapterItem.Companion.FLAG_CURRENT
+import org.xtimms.etsudoku.sections.details.model.ChapterItem.Companion.FLAG_DOWNLOADED
+import org.xtimms.etsudoku.sections.details.model.ChapterItem.Companion.FLAG_NEW
+import org.xtimms.etsudoku.sections.details.model.ChapterItem.Companion.FLAG_UNREAD
fun MangaChapter.toListItem(
isCurrent: Boolean,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/model/MangaBranch.kt b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/MangaBranch.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/sections/details/model/MangaBranch.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/details/model/MangaBranch.kt
index c1916ba..1d6d793 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/model/MangaBranch.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/details/model/MangaBranch.kt
@@ -1,6 +1,6 @@
-package org.xtimms.tokusho.sections.details.model
+package org.xtimms.etsudoku.sections.details.model
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class MangaBranch(
val name: String?,
diff --git a/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreEvent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreEvent.kt
new file mode 100644
index 0000000..bd5faba
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreEvent.kt
@@ -0,0 +1,5 @@
+package org.xtimms.etsudoku.sections.explore
+
+import org.xtimms.etsudoku.core.base.event.UiEvent
+
+interface ExploreEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreUiState.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreUiState.kt
similarity index 81%
rename from app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreUiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreUiState.kt
index d53429d..135a3bb 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreUiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreUiState.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.sections.explore
+package org.xtimms.etsudoku.sections.explore
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.base.state.UiState
+import org.xtimms.etsudoku.core.base.state.UiState
data class ExploreUiState(
val sources: List = emptyList(),
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreView.kt
similarity index 81%
rename from app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreView.kt
index 0db1d8c..025b972 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreView.kt
@@ -1,12 +1,14 @@
-package org.xtimms.tokusho.sections.explore
+package org.xtimms.etsudoku.sections.explore
import androidx.compose.animation.animateContentSize
-import androidx.compose.animation.core.Animatable
-import androidx.compose.animation.core.AnimationVector1D
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
+import androidx.compose.foundation.layout.ExperimentalLayoutApi
+import androidx.compose.foundation.layout.FlowRow
+import androidx.compose.foundation.layout.FlowRowOverflow
+import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.aspectRatio
@@ -16,11 +18,9 @@ import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.layout.size
-import androidx.compose.foundation.lazy.grid.GridCells
-import androidx.compose.foundation.lazy.grid.GridItemSpan
-import androidx.compose.foundation.lazy.grid.LazyGridState
-import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
-import androidx.compose.foundation.lazy.grid.items
+import androidx.compose.foundation.layout.width
+import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.Bookmarks
@@ -42,7 +42,6 @@ import androidx.compose.ui.draw.clipToBounds
import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.layout.ContentScale
-import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
@@ -51,15 +50,16 @@ import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.AsyncImageImpl
-import org.xtimms.tokusho.core.components.ExploreButton
-import org.xtimms.tokusho.core.components.SourceItem
-import org.xtimms.tokusho.core.components.icons.Dice
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.components.ExploreButton
+import org.xtimms.etsudoku.core.components.SourceItem
+import org.xtimms.etsudoku.core.components.icons.Dice
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
const val EXPLORE_DESTINATION = "explore"
+@OptIn(ExperimentalLayoutApi::class)
@Composable
fun ExploreView(
viewModel: ExploreViewModel = hiltViewModel(),
@@ -68,13 +68,10 @@ fun ExploreView(
navigateToSource: (SourceItemModel) -> Unit,
navigateToSuggestions: () -> Unit,
nestedScrollConnection: NestedScrollConnection? = null,
- topBarHeightPx: Float = 0f,
- topBarOffsetY: Animatable = Animatable(0f),
- listState: LazyGridState,
+ listState: LazyListState,
padding: PaddingValues = PaddingValues(),
) {
- val context = LocalContext.current
val layoutDirection = LocalLayoutDirection.current
val sources = viewModel.content.collectAsStateWithLifecycle(emptyList())
@@ -94,22 +91,18 @@ fun ExploreView(
Modifier.nestedScroll(nestedScrollConnection)
else Modifier
)
- LazyVerticalGrid(
- columns = GridCells.Fixed(4),
+ LazyColumn(
modifier = listModifier,
state = listState,
contentPadding = PaddingValues(
start = padding.calculateStartPadding(layoutDirection) + 8.dp,
top = padding.calculateTopPadding() + 8.dp,
end = padding.calculateEndPadding(layoutDirection) + 8.dp,
- bottom = padding.calculateBottomPadding()
+ bottom = padding.calculateBottomPadding() + 8.dp
),
- verticalArrangement = Arrangement.spacedBy(16.dp),
- horizontalArrangement = Arrangement.spacedBy(8.dp, Alignment.CenterHorizontally)
+ verticalArrangement = Arrangement.spacedBy(16.dp)
) {
- item(
- span = { GridItemSpan(maxCurrentLineSpan) }
- ) {
+ item {
Row {
ExploreButton(
text = stringResource(R.string.local_storage),
@@ -126,9 +119,7 @@ fun ExploreView(
)
}
}
- item(
- span = { GridItemSpan(maxCurrentLineSpan) }
- ) {
+ item {
Row {
ExploreButton(
text = stringResource(R.string.random),
@@ -145,9 +136,7 @@ fun ExploreView(
)
}
}
- item(
- span = { GridItemSpan(maxCurrentLineSpan) }
- ) {
+ item {
Card(
modifier = Modifier
.fillMaxWidth()
@@ -216,21 +205,27 @@ fun ExploreView(
}
}
}
- items(
- items = sources.value,
- key = { it.id },
- contentType = { it }
- ) { item ->
- Box(
- modifier = Modifier.fillMaxWidth(),
- contentAlignment = Alignment.TopCenter
+ item {
+ FlowRow(
+ modifier = Modifier
+ .fillMaxWidth(1f),
+ horizontalArrangement = Arrangement.SpaceEvenly,
+ verticalArrangement = Arrangement.spacedBy(8.dp),
+ overflow = FlowRowOverflow.Clip
) {
- SourceItem(
- coil = coil,
- faviconUrl = item.favicon,
- title = item.title
- ) {
- navigateToSource(item)
+ for (item in sources.value) {
+ Box(
+ modifier = Modifier.width(IntrinsicSize.Min),
+ contentAlignment = Alignment.TopCenter
+ ) {
+ SourceItem(
+ coil = coil,
+ faviconUrl = item.favicon,
+ title = item.title
+ ) {
+ navigateToSource(item)
+ }
+ }
}
}
}
@@ -241,7 +236,7 @@ fun ExploreView(
@PreviewLightDark
@Composable
fun RecommendationPreview() {
- TokushoTheme {
+ EtsudokuTheme {
Row(
verticalAlignment = Alignment.CenterVertically
) {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreViewModel.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreViewModel.kt
index 1b4b67d..961c06e 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/ExploreViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.explore
+package org.xtimms.etsudoku.sections.explore
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -16,13 +16,13 @@ import kotlinx.coroutines.plus
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.core.parser.favicon.faviconUri
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.data.repository.ExploreRepository
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.data.repository.SuggestionRepository
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.core.parser.favicon.faviconUri
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.data.repository.ExploreRepository
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.data.repository.SuggestionRepository
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/SourceItemModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/SourceItemModel.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/sections/explore/SourceItemModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/explore/SourceItemModel.kt
index 3bec067..37acb83 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/SourceItemModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/SourceItemModel.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.explore
+package org.xtimms.etsudoku.sections.explore
import android.net.Uri
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class SourceItemModel(
val id: Int,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/data/SourcesSortOrder.kt b/app/src/main/java/org/xtimms/etsudoku/sections/explore/data/SourcesSortOrder.kt
similarity index 71%
rename from app/src/main/java/org/xtimms/tokusho/sections/explore/data/SourcesSortOrder.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/explore/data/SourcesSortOrder.kt
index 1daf28e..05825db 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/data/SourcesSortOrder.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/explore/data/SourcesSortOrder.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.explore.data
+package org.xtimms.etsudoku.sections.explore.data
import androidx.annotation.StringRes
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
enum class SourcesSortOrder(
@StringRes val titleResId: Int,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedView.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/feed/FeedView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedView.kt
index 2d25c80..8388abb 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedView.kt
@@ -1,5 +1,8 @@
-package org.xtimms.tokusho.sections.feed
+package org.xtimms.etsudoku.sections.feed
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.VisibilityThreshold
+import androidx.compose.animation.core.spring
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -26,26 +29,27 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.tooling.preview.Preview
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ConfirmButton
-import org.xtimms.tokusho.core.components.DialogCheckBoxItem
-import org.xtimms.tokusho.core.components.DismissButton
-import org.xtimms.tokusho.core.components.ListGroupHeader
-import org.xtimms.tokusho.core.components.ScaffoldWithClassicTopAppBar
-import org.xtimms.tokusho.core.components.TokushoDialog
-import org.xtimms.tokusho.core.components.effects.RowEntity
-import org.xtimms.tokusho.core.components.effects.RowEntityType
-import org.xtimms.tokusho.core.components.effects.animatedItemsIndexed
-import org.xtimms.tokusho.core.components.effects.updateAnimatedItemsState
-import org.xtimms.tokusho.core.screens.EmptyScreen
-import org.xtimms.tokusho.core.tracker.model.TrackingLogItem
-import org.xtimms.tokusho.sections.feed.model.toFeedItem
-import org.xtimms.tokusho.utils.lang.calculateTimeAgo
-import org.xtimms.tokusho.utils.lang.isSameDay
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ConfirmButton
+import org.xtimms.etsudoku.core.components.DialogCheckBoxItem
+import org.xtimms.etsudoku.core.components.DismissButton
+import org.xtimms.etsudoku.core.components.ListGroupHeader
+import org.xtimms.etsudoku.core.components.ScaffoldWithClassicTopAppBar
+import org.xtimms.etsudoku.core.components.EtsudokuDialog
+import org.xtimms.etsudoku.core.components.effects.RowEntity
+import org.xtimms.etsudoku.core.components.effects.RowEntityType
+import org.xtimms.etsudoku.core.components.effects.animatedItemsIndexed
+import org.xtimms.etsudoku.core.components.effects.updateAnimatedItemsState
+import org.xtimms.etsudoku.core.screens.EmptyScreen
+import org.xtimms.etsudoku.core.tracker.model.TrackingLogItem
+import org.xtimms.etsudoku.sections.feed.model.toFeedItem
+import org.xtimms.etsudoku.utils.lang.calculateTimeAgo
+import org.xtimms.etsudoku.utils.lang.isSameDay
import java.time.Instant
const val FEED_DESTINATION = "feed"
@@ -129,8 +133,6 @@ fun FeedView(
verticalArrangement = Arrangement.spacedBy(8.dp),
contentPadding = padding
) {
-
-
animatedItemsIndexed(
state = animatedList.value,
key = { rowItem -> rowItem.key },
@@ -190,7 +192,7 @@ fun ClearFeedDialog(
mutableStateOf(isClearInfoAboutNewChaptersSelected)
}
- TokushoDialog(
+ EtsudokuDialog(
onDismissRequest = onDismissRequest,
confirmButton = {
ConfirmButton {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewItem.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewItem.kt
index c7eeea0..e1155e2 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.feed
+package org.xtimms.etsudoku.sections.feed
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
@@ -27,10 +27,10 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.MangaCover
-import org.xtimms.tokusho.sections.feed.model.FeedItem
-import org.xtimms.tokusho.utils.composable.selectedBackground
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.MangaCover
+import org.xtimms.etsudoku.sections.feed.model.FeedItem
+import org.xtimms.etsudoku.utils.composable.selectedBackground
const val ReadItemAlpha = .38f
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewModel.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewModel.kt
index e1e27fa..dcd9c5f 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/feed/FeedViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/feed/FeedViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.feed
+package org.xtimms.etsudoku.sections.feed
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -7,12 +7,12 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.SharingStarted
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.TrackingRepository
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
-import org.xtimms.tokusho.utils.lang.insertSeparators
-import org.xtimms.tokusho.work.tracker.TrackWorker
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.TrackingRepository
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
+import org.xtimms.etsudoku.utils.lang.insertSeparators
+import org.xtimms.etsudoku.work.tracker.TrackWorker
import java.util.concurrent.atomic.AtomicBoolean
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/feed/model/FeedItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/feed/model/FeedItem.kt
similarity index 77%
rename from app/src/main/java/org/xtimms/tokusho/sections/feed/model/FeedItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/feed/model/FeedItem.kt
index 75cde68..b68b554 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/feed/model/FeedItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/feed/model/FeedItem.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.feed.model
+package org.xtimms.etsudoku.sections.feed.model
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class FeedItem(
val id: Long,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/feed/model/ListModelConversionExt.kt b/app/src/main/java/org/xtimms/etsudoku/sections/feed/model/ListModelConversionExt.kt
similarity index 61%
rename from app/src/main/java/org/xtimms/tokusho/sections/feed/model/ListModelConversionExt.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/feed/model/ListModelConversionExt.kt
index 7e4d6d1..25dfa82 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/feed/model/ListModelConversionExt.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/feed/model/ListModelConversionExt.kt
@@ -1,6 +1,6 @@
-package org.xtimms.tokusho.sections.feed.model
+package org.xtimms.etsudoku.sections.feed.model
-import org.xtimms.tokusho.core.tracker.model.TrackingLogItem
+import org.xtimms.etsudoku.core.tracker.model.TrackingLogItem
fun TrackingLogItem.toFeedItem() = FeedItem(
id = id,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItem.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItem.kt
index eb6d4c7..1beea65 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.history
+package org.xtimms.etsudoku.sections.history
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Arrangement
@@ -16,7 +16,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
import coil.ImageLoader
-import org.xtimms.tokusho.core.components.MangaCover
+import org.xtimms.etsudoku.core.components.MangaCover
@Composable
fun HistoryItem(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItemModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItemModel.kt
similarity index 66%
rename from app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItemModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItemModel.kt
index 9d02e1d..8b14da0 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryItemModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryItemModel.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.sections.history
+package org.xtimms.etsudoku.sections.history
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.ListModel
-import org.xtimms.tokusho.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.ListModel
+import org.xtimms.etsudoku.core.model.MangaHistory
data class HistoryItemModel(
val manga: Manga,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryView.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/sections/history/HistoryView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryView.kt
index dedabf6..5855038 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryView.kt
@@ -1,17 +1,23 @@
-package org.xtimms.tokusho.sections.history
+package org.xtimms.etsudoku.sections.history
//noinspection UsingMaterialAndMaterial3Libraries
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationVector1D
import androidx.compose.animation.core.animateDpAsState
+import androidx.compose.foundation.gestures.ScrollableState
import androidx.compose.foundation.layout.Box
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.IntrinsicSize
import androidx.compose.foundation.layout.PaddingValues
+import androidx.compose.foundation.layout.calculateEndPadding
+import androidx.compose.foundation.layout.calculateStartPadding
import androidx.compose.foundation.layout.fillMaxSize
+import androidx.compose.foundation.layout.fillMaxWidth
import androidx.compose.foundation.layout.height
import androidx.compose.foundation.layout.padding
import androidx.compose.foundation.lazy.LazyColumn
+import androidx.compose.foundation.lazy.LazyListState
+import androidx.compose.foundation.lazy.rememberLazyListState
import androidx.compose.foundation.rememberScrollState
import androidx.compose.foundation.shape.RoundedCornerShape
import androidx.compose.material.DismissDirection
@@ -29,29 +35,33 @@ import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
+import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.draw.clip
import androidx.compose.ui.draw.clipToBounds
+import androidx.compose.ui.input.nestedscroll.NestedScrollConnection
+import androidx.compose.ui.input.nestedscroll.nestedScroll
import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalDensity
+import androidx.compose.ui.platform.LocalLayoutDirection
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.min
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.collapsable
-import org.xtimms.tokusho.core.components.ListGroupHeader
-import org.xtimms.tokusho.core.components.effects.RowEntity
-import org.xtimms.tokusho.core.components.effects.RowEntityType
-import org.xtimms.tokusho.core.components.effects.animatedItemsIndexed
-import org.xtimms.tokusho.core.components.effects.updateAnimatedItemsState
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.SWIPE_TUTORIAL
-import org.xtimms.tokusho.core.screens.EmptyScreen
-import org.xtimms.tokusho.core.screens.LoadingScreen
-import org.xtimms.tokusho.utils.lang.calculateTimeAgo
-import org.xtimms.tokusho.utils.lang.isSameDay
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.collapsable
+import org.xtimms.etsudoku.core.components.ListGroupHeader
+import org.xtimms.etsudoku.core.components.effects.RowEntity
+import org.xtimms.etsudoku.core.components.effects.RowEntityType
+import org.xtimms.etsudoku.core.components.effects.animatedItemsIndexed
+import org.xtimms.etsudoku.core.components.effects.updateAnimatedItemsState
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.SWIPE_TUTORIAL
+import org.xtimms.etsudoku.core.screens.EmptyScreen
+import org.xtimms.etsudoku.core.screens.LoadingScreen
+import org.xtimms.etsudoku.utils.lang.calculateTimeAgo
+import org.xtimms.etsudoku.utils.lang.isSameDay
import java.time.Instant
import kotlin.math.abs
import kotlin.math.absoluteValue
@@ -63,13 +73,13 @@ const val HISTORY_DESTINATION = "history"
fun HistoryView(
coil: ImageLoader,
viewModel: HistoryViewModel = hiltViewModel(),
- topBarHeightPx: Float,
- topBarOffsetY: Animatable = Animatable(0f),
+ nestedScrollConnection: NestedScrollConnection? = null,
+ listState: LazyListState,
padding: PaddingValues,
navigateToDetails: (Long) -> Unit,
navigateToReader: () -> Unit
) {
- val scrollState = rememberScrollState()
+
var isUserTrySwipe by remember { mutableStateOf(false) }
val history by viewModel.content.collectAsStateWithLifecycle(null)
@@ -120,6 +130,14 @@ fun HistoryView(
.clipToBounds()
.fillMaxSize(),
) {
+ val listModifier = Modifier
+ .fillMaxWidth()
+ .align(Alignment.TopStart)
+ .then(
+ if (nestedScrollConnection != null)
+ Modifier.nestedScroll(nestedScrollConnection)
+ else Modifier
+ )
history.let {
if (it == null) {
LoadingScreen(Modifier.padding(padding))
@@ -132,13 +150,12 @@ fun HistoryView(
} else {
Column(Modifier.fillMaxSize()) {
LazyColumn(
- modifier = Modifier
- .collapsable(
- state = scrollState,
- topBarHeightPx = topBarHeightPx,
- topBarOffsetY = topBarOffsetY
- )
- .padding(padding)
+ modifier = listModifier,
+ state = listState,
+ contentPadding = PaddingValues(
+ top = padding.calculateTopPadding(),
+ bottom = padding.calculateBottomPadding() + 96.dp
+ ),
) {
animatedItemsIndexed(
state = animatedList.value,
@@ -175,7 +192,6 @@ fun HistoryView(
}
),
onTried = { isUserTrySwipe = true },
- showTutorial = false,
) { state ->
val size = with(LocalDensity.current) {
java.lang.Float.max(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryViewModel.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/sections/history/HistoryViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryViewModel.kt
index 7afef74..a9a8620 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/history/HistoryViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/history/HistoryViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.history
+package org.xtimms.etsudoku.sections.history
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -8,9 +8,9 @@ import kotlinx.coroutines.flow.distinctUntilChanged
import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/history/SwipeActions.kt b/app/src/main/java/org/xtimms/etsudoku/sections/history/SwipeActions.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/sections/history/SwipeActions.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/history/SwipeActions.kt
index 69260f9..56ec230 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/history/SwipeActions.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/history/SwipeActions.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.history
+package org.xtimms.etsudoku.sections.history
import android.view.MotionEvent
import androidx.compose.animation.*
@@ -39,9 +39,9 @@ import kotlin.math.abs
import kotlin.math.absoluteValue
import kotlin.math.sqrt
import androidx.compose.ui.unit.min
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.ui.theme.SEED
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.ui.theme.SEED
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
data class SwipeActionsConfig(
val threshold: Float,
@@ -313,7 +313,7 @@ class CirclePath(private val progress: Float, private val start: Boolean) : Shap
@Preview(widthDp = 300)
@Composable
private fun PreviewDefault() {
- TokushoTheme {
+ EtsudokuTheme {
SwipeActions(
startActionsConfig = SwipeActionsConfig(
threshold = 0.4f,
diff --git a/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListEvent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListEvent.kt
new file mode 100644
index 0000000..3194ec5
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListEvent.kt
@@ -0,0 +1,5 @@
+package org.xtimms.etsudoku.sections.list
+
+import org.xtimms.etsudoku.core.base.event.PagedUiEvent
+
+interface MangaListEvent : PagedUiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListUiState.kt b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListUiState.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/sections/list/MangaListUiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListUiState.kt
index 4ebad61..cd2c8e2 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListUiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListUiState.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.list
+package org.xtimms.etsudoku.sections.list
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.base.state.PagedUiState
+import org.xtimms.etsudoku.core.base.state.PagedUiState
data class MangaListUiState(
val manga: List = listOf(),
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListView.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/sections/list/MangaListView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListView.kt
index 24bc4ad..7f2b3e3 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.list
+package org.xtimms.etsudoku.sections.list
import androidx.compose.animation.AnimatedVisibility
import androidx.compose.animation.core.tween
@@ -34,10 +34,10 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.components.MangaGridItem
-import org.xtimms.tokusho.core.components.ScaffoldWithSmallTopAppBarWithChips
-import org.xtimms.tokusho.utils.composable.onBottomReached
-import org.xtimms.tokusho.utils.system.toast
+import org.xtimms.etsudoku.core.components.MangaGridItem
+import org.xtimms.etsudoku.core.components.ScaffoldWithSmallTopAppBarWithChips
+import org.xtimms.etsudoku.utils.composable.onBottomReached
+import org.xtimms.etsudoku.utils.system.toast
const val PROVIDER_ARGUMENT = "{source}"
const val LIST_DESTINATION = "provider/${PROVIDER_ARGUMENT}"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListViewModel.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/sections/list/MangaListViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListViewModel.kt
index 848f888..47f9609 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/list/MangaListViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.list
+package org.xtimms.etsudoku.sections.list
import androidx.lifecycle.SavedStateHandle
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -12,11 +12,11 @@ import kotlinx.coroutines.flow.getAndUpdate
import kotlinx.coroutines.flow.update
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.base.viewmodel.BaseViewModel
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.utils.lang.call
-import org.xtimms.tokusho.utils.lang.removeFirstAndLast
-import org.xtimms.tokusho.utils.lang.require
+import org.xtimms.etsudoku.core.base.viewmodel.BaseViewModel
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.utils.lang.call
+import org.xtimms.etsudoku.utils.lang.removeFirstAndLast
+import org.xtimms.etsudoku.utils.lang.require
import javax.inject.Inject
import kotlin.coroutines.cancellation.CancellationException
diff --git a/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderContent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderContent.kt
new file mode 100644
index 0000000..4fb877e
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderContent.kt
@@ -0,0 +1,8 @@
+package org.xtimms.etsudoku.sections.reader
+
+import org.xtimms.etsudoku.sections.reader.pager.ReaderPage
+
+data class ReaderContent(
+ val pages: List,
+ val state: ReaderState?
+)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderState.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderState.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderState.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderState.kt
index 1366983..8ff87c1 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderState.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.sections.reader
+package org.xtimms.etsudoku.sections.reader
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.MangaHistory
+import org.xtimms.etsudoku.core.model.MangaHistory
@Parcelize
data class ReaderState(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderView.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderView.kt
index 34b23e2..03b2eb1 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.reader
+package org.xtimms.etsudoku.sections.reader
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.foundation.layout.padding
@@ -28,8 +28,8 @@ import com.google.android.material.slider.Slider
import me.saket.telephoto.zoomable.coil.ZoomableAsyncImage
import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.components.AppBarTitle
-import org.xtimms.tokusho.core.components.BackIconButton
+import org.xtimms.etsudoku.core.components.AppBarTitle
+import org.xtimms.etsudoku.core.components.BackIconButton
const val READER_DESTINATION = "reader"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderViewModel.kt
similarity index 71%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderViewModel.kt
index 2954a84..cdbeb0f 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/ReaderViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.reader
+package org.xtimms.etsudoku.sections.reader
import androidx.lifecycle.SavedStateHandle
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -6,14 +6,14 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.first
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.core.parser.MangaDataRepository
-import org.xtimms.tokusho.core.parser.MangaIntent
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.sections.details.domain.DetailsLoadUseCase
-import org.xtimms.tokusho.sections.reader.domain.ChaptersLoader
-import org.xtimms.tokusho.sections.reader.domain.PageLoader
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.core.parser.MangaDataRepository
+import org.xtimms.etsudoku.core.parser.MangaIntent
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.sections.details.domain.DetailsLoadUseCase
+import org.xtimms.etsudoku.sections.reader.domain.ChaptersLoader
+import org.xtimms.etsudoku.sections.reader.domain.PageLoader
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChapterPages.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChapterPages.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChapterPages.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChapterPages.kt
index 3cc6f79..cc89c0b 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChapterPages.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChapterPages.kt
@@ -1,8 +1,8 @@
-package org.xtimms.tokusho.sections.reader.domain
+package org.xtimms.etsudoku.sections.reader.domain
import androidx.collection.LongSparseArray
import androidx.collection.contains
-import org.xtimms.tokusho.sections.reader.pager.ReaderPage
+import org.xtimms.etsudoku.sections.reader.pager.ReaderPage
class ChapterPages private constructor(private val pages: ArrayDeque) : List by pages {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChaptersLoader.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChaptersLoader.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChaptersLoader.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChaptersLoader.kt
index f9e5522..cdb79b4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/ChaptersLoader.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/ChaptersLoader.kt
@@ -1,13 +1,13 @@
-package org.xtimms.tokusho.sections.reader.domain
+package org.xtimms.etsudoku.sections.reader.domain
import androidx.collection.LongSparseArray
import dagger.hilt.android.scopes.ViewModelScoped
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
import org.koitharu.kotatsu.parsers.model.MangaChapter
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.sections.details.data.MangaDetails
-import org.xtimms.tokusho.sections.reader.pager.ReaderPage
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.sections.details.data.MangaDetails
+import org.xtimms.etsudoku.sections.reader.pager.ReaderPage
import javax.inject.Inject
private const val PAGES_TRIM_THRESHOLD = 120
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/PageLoader.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/PageLoader.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/domain/PageLoader.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/PageLoader.kt
index 3c55ab6..46442ef 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/domain/PageLoader.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/domain/PageLoader.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.reader.domain
+package org.xtimms.etsudoku.sections.reader.domain
import android.content.Context
import android.graphics.BitmapFactory
@@ -27,29 +27,29 @@ import okhttp3.OkHttpClient
import okhttp3.Request
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.cache.PagesCache
-import org.xtimms.tokusho.core.network.CommonHeaders
-import org.xtimms.tokusho.core.network.MangaHttpClient
-import org.xtimms.tokusho.core.network.interceptors.ImageProxyInterceptor
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.RemoteMangaRepository
-import org.xtimms.tokusho.core.parser.local.isFileUri
-import org.xtimms.tokusho.core.parser.local.isZipUri
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.sections.reader.pager.ReaderPage
-import org.xtimms.tokusho.utils.FileSize
-import org.xtimms.tokusho.utils.RetainedLifecycleCoroutineScope
-import org.xtimms.tokusho.utils.lang.getCompletionResultOrNull
-import org.xtimms.tokusho.utils.lang.withProgress
-import org.xtimms.tokusho.utils.progress.ProgressDeferred
-import org.xtimms.tokusho.utils.system.URI_SCHEME_ZIP
-import org.xtimms.tokusho.utils.system.compressToPNG
-import org.xtimms.tokusho.utils.system.ensureRamAtLeast
-import org.xtimms.tokusho.utils.system.ensureSuccess
-import org.xtimms.tokusho.utils.system.exists
-import org.xtimms.tokusho.utils.system.isPowerSaveMode
-import org.xtimms.tokusho.utils.system.isTargetNotEmpty
-import org.xtimms.tokusho.utils.system.ramAvailable
+import org.xtimms.etsudoku.core.cache.PagesCache
+import org.xtimms.etsudoku.core.network.CommonHeaders
+import org.xtimms.etsudoku.core.network.MangaHttpClient
+import org.xtimms.etsudoku.core.network.interceptors.ImageProxyInterceptor
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.RemoteMangaRepository
+import org.xtimms.etsudoku.core.parser.local.isFileUri
+import org.xtimms.etsudoku.core.parser.local.isZipUri
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.sections.reader.pager.ReaderPage
+import org.xtimms.etsudoku.utils.FileSize
+import org.xtimms.etsudoku.utils.RetainedLifecycleCoroutineScope
+import org.xtimms.etsudoku.utils.lang.getCompletionResultOrNull
+import org.xtimms.etsudoku.utils.lang.withProgress
+import org.xtimms.etsudoku.utils.progress.ProgressDeferred
+import org.xtimms.etsudoku.utils.system.URI_SCHEME_ZIP
+import org.xtimms.etsudoku.utils.system.compressToPNG
+import org.xtimms.etsudoku.utils.system.ensureRamAtLeast
+import org.xtimms.etsudoku.utils.system.ensureSuccess
+import org.xtimms.etsudoku.utils.system.exists
+import org.xtimms.etsudoku.utils.system.isPowerSaveMode
+import org.xtimms.etsudoku.utils.system.isTargetNotEmpty
+import org.xtimms.etsudoku.utils.system.ramAvailable
import java.util.LinkedList
import java.util.concurrent.atomic.AtomicInteger
import java.util.zip.ZipFile
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/pager/ReaderPage.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/pager/ReaderPage.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/pager/ReaderPage.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/pager/ReaderPage.kt
index 2e00b4f..3c86003 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/pager/ReaderPage.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/pager/ReaderPage.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.reader.pager
+package org.xtimms.etsudoku.sections.reader.pager
import android.os.Parcelable
import kotlinx.parcelize.Parcelize
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/thumbnails/MangaPageFetcher.kt b/app/src/main/java/org/xtimms/etsudoku/sections/reader/thumbnails/MangaPageFetcher.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/sections/reader/thumbnails/MangaPageFetcher.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/reader/thumbnails/MangaPageFetcher.kt
index 913c5ab..d6bf375 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/thumbnails/MangaPageFetcher.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/reader/thumbnails/MangaPageFetcher.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.reader.thumbnails
+package org.xtimms.etsudoku.sections.reader.thumbnails
import android.content.Context
import android.webkit.MimeTypeMap
@@ -21,14 +21,14 @@ import okio.buffer
import okio.source
import org.koitharu.kotatsu.parsers.model.MangaPage
import org.koitharu.kotatsu.parsers.util.mimeType
-import org.xtimms.tokusho.core.cache.PagesCache
-import org.xtimms.tokusho.core.network.MangaHttpClient
-import org.xtimms.tokusho.core.network.interceptors.ImageProxyInterceptor
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.core.parser.local.isFileUri
-import org.xtimms.tokusho.core.parser.local.isZipUri
-import org.xtimms.tokusho.sections.reader.domain.PageLoader
-import org.xtimms.tokusho.utils.withExtraCloseable
+import org.xtimms.etsudoku.core.cache.PagesCache
+import org.xtimms.etsudoku.core.network.MangaHttpClient
+import org.xtimms.etsudoku.core.network.interceptors.ImageProxyInterceptor
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.core.parser.local.isFileUri
+import org.xtimms.etsudoku.core.parser.local.isZipUri
+import org.xtimms.etsudoku.sections.reader.domain.PageLoader
+import org.xtimms.etsudoku.utils.withExtraCloseable
import java.util.zip.ZipFile
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/search/SearchView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/search/SearchView.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/search/SearchView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/search/SearchView.kt
index 7b439b5..a8c9f32 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/search/SearchView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/search/SearchView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.search
+package org.xtimms.etsudoku.sections.search
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -32,10 +32,10 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.BackIconButton
-import org.xtimms.tokusho.core.screens.EmptyScreen
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.BackIconButton
+import org.xtimms.etsudoku.core.screens.EmptyScreen
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
const val SEARCH_DESTINATION = "search"
@@ -114,7 +114,7 @@ fun SearchView(
@Preview(showBackground = true)
@Composable
fun SearchPreview() {
- TokushoTheme {
+ EtsudokuTheme {
SearchHostView(
isCompactScreen = true,
padding = PaddingValues(),
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsView.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsView.kt
index 4237d22..1c77791 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings
+package org.xtimms.etsudoku.sections.settings
import android.annotation.SuppressLint
import android.content.Context
@@ -40,11 +40,11 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferencesHintCard
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.components.SettingItem
-import org.xtimms.tokusho.utils.FileSize
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferencesHintCard
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.components.SettingItem
+import org.xtimms.etsudoku.utils.FileSize
const val SETTINGS_DESTINATION = "settings"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsViewModel.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsViewModel.kt
index 8f6d7c1..8f88e06 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/SettingsViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/SettingsViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings
+package org.xtimms.etsudoku.sections.settings
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -12,11 +12,11 @@ import kotlinx.coroutines.flow.update
import kotlinx.coroutines.plus
import kotlinx.coroutines.runInterruptible
import okhttp3.Cache
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.data.LocalStorageManager
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.sections.settings.sources.SourcesSettingsViewModel
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.data.LocalStorageManager
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.sections.settings.sources.SourcesSettingsViewModel
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/AboutView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/AboutView.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/about/AboutView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/about/AboutView.kt
index f49bab1..8039797 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/AboutView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/AboutView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.about
+package org.xtimms.etsudoku.sections.settings.about
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -24,20 +24,20 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.platform.LocalUriHandler
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.AnnotatedString
-import org.xtimms.tokusho.App
-import org.xtimms.tokusho.App.Companion.packageInfo
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSwitchWithDivider
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AUTO_UPDATE
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.utils.system.toast
+import org.xtimms.etsudoku.App
+import org.xtimms.etsudoku.App.Companion.packageInfo
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSwitchWithDivider
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AUTO_UPDATE
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.utils.system.toast
const val ABOUT_DESTINATION = "about"
-private const val repoUrl = "https://git.kotatsu.app/Xtimms/Tokusho"
-const val weblate = "https://hosted.weblate.org/engage/tokusho/"
+private const val repoUrl = "https://git.kotatsu.app/Xtimms/Etsudoku"
+const val weblate = "https://hosted.weblate.org/engage/etsudoku/"
@Composable
fun AboutView(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/LicenseView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/LicenseView.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/about/LicenseView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/about/LicenseView.kt
index 32a8536..ace8a08 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/LicenseView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/LicenseView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.about
+package org.xtimms.etsudoku.sections.settings.about
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
@@ -15,7 +15,7 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.viewinterop.AndroidView
import androidx.core.text.HtmlCompat
import com.google.android.material.textview.MaterialTextView
-import org.xtimms.tokusho.core.components.ScaffoldWithClassicTopAppBar
+import org.xtimms.etsudoku.core.components.ScaffoldWithClassicTopAppBar
const val LICENSE_NAME_ARGUMENT = "{name}"
const val LICENSE_WEBSITE_ARGUMENT = "{website}"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/OpenSourceLicensesView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/OpenSourceLicensesView.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/about/OpenSourceLicensesView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/about/OpenSourceLicensesView.kt
index 74e4d49..68e063d 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/OpenSourceLicensesView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/OpenSourceLicensesView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.about
+package org.xtimms.etsudoku.sections.settings.about
import androidx.compose.foundation.layout.fillMaxSize
import androidx.compose.runtime.Composable
@@ -6,8 +6,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import com.mikepenz.aboutlibraries.ui.compose.m3.LibrariesContainer
import com.mikepenz.aboutlibraries.ui.compose.m3.util.htmlReadyLicenseContent
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ScaffoldWithClassicTopAppBar
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ScaffoldWithClassicTopAppBar
const val LICENSES_DESTINATION = "licenses"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/UpdateView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/UpdateView.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/about/UpdateView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/about/UpdateView.kt
index 4ac91ec..37a18d5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/about/UpdateView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/about/UpdateView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.about
+package org.xtimms.etsudoku.sections.settings.about
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.Box
@@ -34,23 +34,23 @@ import androidx.compose.ui.unit.dp
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceInfo
-import org.xtimms.tokusho.core.components.PreferenceSingleChoiceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitchWithContainer
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AUTO_UPDATE
-import org.xtimms.tokusho.core.prefs.AppSettings.updateBoolean
-import org.xtimms.tokusho.core.prefs.AppSettings.updateInt
-import org.xtimms.tokusho.core.prefs.PRE_RELEASE
-import org.xtimms.tokusho.core.prefs.STABLE
-import org.xtimms.tokusho.core.prefs.UPDATE_CHANNEL
-import org.xtimms.tokusho.core.screens.UpdateDialog
-import org.xtimms.tokusho.core.updates.Updater
-import org.xtimms.tokusho.utils.lang.booleanState
-import org.xtimms.tokusho.utils.lang.intState
-import org.xtimms.tokusho.utils.system.suspendToast
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceInfo
+import org.xtimms.etsudoku.core.components.PreferenceSingleChoiceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitchWithContainer
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AUTO_UPDATE
+import org.xtimms.etsudoku.core.prefs.AppSettings.updateBoolean
+import org.xtimms.etsudoku.core.prefs.AppSettings.updateInt
+import org.xtimms.etsudoku.core.prefs.PRE_RELEASE
+import org.xtimms.etsudoku.core.prefs.STABLE
+import org.xtimms.etsudoku.core.prefs.UPDATE_CHANNEL
+import org.xtimms.etsudoku.core.screens.UpdateDialog
+import org.xtimms.etsudoku.core.updates.Updater
+import org.xtimms.etsudoku.utils.lang.booleanState
+import org.xtimms.etsudoku.utils.lang.intState
+import org.xtimms.etsudoku.utils.system.suspendToast
const val UPDATES_DESTINATION = "updates"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/advanced/AdvancedView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/advanced/AdvancedView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/advanced/AdvancedView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/advanced/AdvancedView.kt
index 49ec078..eec7769 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/advanced/AdvancedView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/advanced/AdvancedView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.advanced
+package org.xtimms.etsudoku.sections.settings.advanced
import android.os.Build
import androidx.compose.foundation.layout.PaddingValues
@@ -25,21 +25,21 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.profileinstaller.ProfileVerifier
import kotlinx.coroutines.guava.await
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.logs.FileLogger
-import org.xtimms.tokusho.core.prefs.ACRA
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.LOGGING
-import org.xtimms.tokusho.utils.DeviceUtil
-import org.xtimms.tokusho.utils.ShareHelper
-import org.xtimms.tokusho.utils.WebViewUtil
-import org.xtimms.tokusho.utils.lang.toDateTimestampString
-import org.xtimms.tokusho.utils.system.toast
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.logs.FileLogger
+import org.xtimms.etsudoku.core.prefs.ACRA
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.LOGGING
+import org.xtimms.etsudoku.utils.DeviceUtil
+import org.xtimms.etsudoku.utils.ShareHelper
+import org.xtimms.etsudoku.utils.WebViewUtil
+import org.xtimms.etsudoku.utils.lang.toDateTimestampString
+import org.xtimms.etsudoku.utils.system.toast
import java.text.DateFormat
import java.text.SimpleDateFormat
import java.util.Locale
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/AppearanceView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/AppearanceView.kt
similarity index 90%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/AppearanceView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/AppearanceView.kt
index 084c4e8..d9021af 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/AppearanceView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/AppearanceView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.appearance
+package org.xtimms.etsudoku.sections.settings.appearance
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateDpAsState
@@ -59,34 +59,34 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import com.google.accompanist.pager.HorizontalPagerIndicator
import com.google.android.material.color.DynamicColors
-import org.xtimms.tokusho.LocalDarkTheme
-import org.xtimms.tokusho.LocalDynamicColorSwitch
-import org.xtimms.tokusho.LocalPaletteStyleIndex
-import org.xtimms.tokusho.LocalSeedColor
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.PreferenceSwitchWithDivider
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.DarkThemePreference.Companion.OFF
-import org.xtimms.tokusho.core.prefs.DarkThemePreference.Companion.ON
-import org.xtimms.tokusho.core.prefs.READING_TIME
-import org.xtimms.tokusho.core.prefs.STYLE_MONOCHROME
-import org.xtimms.tokusho.core.prefs.STYLE_TONAL_SPOT
-import org.xtimms.tokusho.core.prefs.paletteStyles
-import org.xtimms.tokusho.sections.stats.Size
-import org.xtimms.tokusho.ui.harmonize.hct.Hct
-import org.xtimms.tokusho.ui.monet.LocalTonalPalettes
-import org.xtimms.tokusho.ui.monet.PaletteStyle
-import org.xtimms.tokusho.ui.monet.TonalPalettes
-import org.xtimms.tokusho.ui.monet.TonalPalettes.Companion.toTonalPalettes
-import org.xtimms.tokusho.ui.monet.a1
-import org.xtimms.tokusho.ui.monet.a2
-import org.xtimms.tokusho.ui.monet.a3
-import org.xtimms.tokusho.utils.material.combineColors
-import org.xtimms.tokusho.utils.system.toDisplayName
+import org.xtimms.etsudoku.LocalDarkTheme
+import org.xtimms.etsudoku.LocalDynamicColorSwitch
+import org.xtimms.etsudoku.LocalPaletteStyleIndex
+import org.xtimms.etsudoku.LocalSeedColor
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.PreferenceSwitchWithDivider
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference.Companion.OFF
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference.Companion.ON
+import org.xtimms.etsudoku.core.prefs.READING_TIME
+import org.xtimms.etsudoku.core.prefs.STYLE_MONOCHROME
+import org.xtimms.etsudoku.core.prefs.STYLE_TONAL_SPOT
+import org.xtimms.etsudoku.core.prefs.paletteStyles
+import org.xtimms.etsudoku.sections.stats.Size
+import org.xtimms.etsudoku.ui.harmonize.hct.Hct
+import org.xtimms.etsudoku.ui.monet.LocalTonalPalettes
+import org.xtimms.etsudoku.ui.monet.PaletteStyle
+import org.xtimms.etsudoku.ui.monet.TonalPalettes
+import org.xtimms.etsudoku.ui.monet.TonalPalettes.Companion.toTonalPalettes
+import org.xtimms.etsudoku.ui.monet.a1
+import org.xtimms.etsudoku.ui.monet.a2
+import org.xtimms.etsudoku.ui.monet.a3
+import org.xtimms.etsudoku.utils.material.combineColors
+import org.xtimms.etsudoku.utils.system.toDisplayName
import java.util.Locale
const val APPEARANCE_DESTINATION = "appearance"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/Card.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/Card.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/Card.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/Card.kt
index e0e210c..87f55a0 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/Card.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/Card.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.appearance
+package org.xtimms.etsudoku.sections.settings.appearance
import androidx.compose.foundation.Image
import androidx.compose.foundation.layout.Arrangement
@@ -18,8 +18,8 @@ import androidx.compose.ui.res.painterResource
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.PreviewLightDark
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
@Composable
fun MangaCard(
@@ -80,7 +80,7 @@ fun MangaCard(
@PreviewLightDark
@Composable
fun MangaCardPreview() {
- TokushoTheme {
+ EtsudokuTheme {
MangaCard(
thumbnailUrl = "https://spice-and-wolf.com/special/img/visual_january.jpg"
)
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/DarkThemeView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/DarkThemeView.kt
similarity index 80%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/DarkThemeView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/DarkThemeView.kt
index 3936de3..241472f 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/DarkThemeView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/DarkThemeView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.appearance
+package org.xtimms.etsudoku.sections.settings.appearance
import android.os.Build
import androidx.compose.foundation.layout.PaddingValues
@@ -12,16 +12,16 @@ import androidx.compose.material.icons.outlined.Contrast
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
-import org.xtimms.tokusho.LocalDarkTheme
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceSingleChoiceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.DarkThemePreference.Companion.FOLLOW_SYSTEM
-import org.xtimms.tokusho.core.prefs.DarkThemePreference.Companion.OFF
-import org.xtimms.tokusho.core.prefs.DarkThemePreference.Companion.ON
+import org.xtimms.etsudoku.LocalDarkTheme
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceSingleChoiceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference.Companion.FOLLOW_SYSTEM
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference.Companion.OFF
+import org.xtimms.etsudoku.core.prefs.DarkThemePreference.Companion.ON
const val DARK_THEME_DESTINATION = "dark_theme"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/LanguagesView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/LanguagesView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/LanguagesView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/LanguagesView.kt
index d6c0550..6aea2d3 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/appearance/LanguagesView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/appearance/LanguagesView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.appearance
+package org.xtimms.etsudoku.sections.settings.appearance
import android.content.Intent
import android.content.pm.PackageManager
@@ -38,16 +38,16 @@ import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.compose.ui.unit.sp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceSingleChoiceItem
-import org.xtimms.tokusho.core.components.PreferencesHintCard
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.sections.settings.about.weblate
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.system.LocaleLanguageCodeMap
-import org.xtimms.tokusho.utils.system.setLanguage
-import org.xtimms.tokusho.utils.system.toDisplayName
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceSingleChoiceItem
+import org.xtimms.etsudoku.core.components.PreferencesHintCard
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.sections.settings.about.weblate
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.system.LocaleLanguageCodeMap
+import org.xtimms.etsudoku.utils.system.setLanguage
+import org.xtimms.etsudoku.utils.system.toDisplayName
import java.util.Locale
const val LANGUAGES_DESTINATION = "languages"
@@ -186,7 +186,7 @@ private fun LanguagePagePreview() {
mutableStateOf(Locale.KOREAN)
}
val map = setOf(Locale.forLanguageTag("ru"))
- TokushoTheme {
+ EtsudokuTheme {
LanguageViewImpl(
localeSet = map,
isSystemLocaleSettingsAvailable = true,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgent.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgent.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgent.kt
index cbee200..1e43817 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/AppBackupAgent.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/AppBackupAgent.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.app.backup.BackupAgent
import android.app.backup.BackupDataInput
@@ -8,11 +8,11 @@ import android.content.Context
import android.os.ParcelFileDescriptor
import androidx.annotation.VisibleForTesting
import kotlinx.coroutines.runBlocking
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.data.repository.backup.BackupEntry
-import org.xtimms.tokusho.data.repository.backup.BackupRepository
-import org.xtimms.tokusho.data.repository.backup.BackupZipInput
-import org.xtimms.tokusho.data.repository.backup.BackupZipOutput
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.data.repository.backup.BackupEntry
+import org.xtimms.etsudoku.data.repository.backup.BackupRepository
+import org.xtimms.etsudoku.data.repository.backup.BackupZipInput
+import org.xtimms.etsudoku.data.repository.backup.BackupZipOutput
import java.io.File
import java.io.FileDescriptor
import java.io.FileInputStream
@@ -36,7 +36,7 @@ class AppBackupAgent : BackupAgent() {
override fun onFullBackup(data: FullBackupDataOutput) {
super.onFullBackup(data)
val file =
- createBackupFile(this, BackupRepository(TokushoDatabase(applicationContext)))
+ createBackupFile(this, BackupRepository(EtsudokuDatabase(applicationContext)))
try {
fullBackupFile(file, data)
} finally {
@@ -56,7 +56,7 @@ class AppBackupAgent : BackupAgent() {
restoreBackupFile(
data.fileDescriptor,
size,
- BackupRepository(TokushoDatabase(applicationContext)),
+ BackupRepository(EtsudokuDatabase(applicationContext)),
)
destination.delete()
} else {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupEntryModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupEntryModel.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupEntryModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupEntryModel.kt
index 7592cc3..a9b298f 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupEntryModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupEntryModel.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import androidx.annotation.StringRes
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.model.ListModel
-import org.xtimms.tokusho.data.repository.backup.BackupEntry
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.model.ListModel
+import org.xtimms.etsudoku.data.repository.backup.BackupEntry
data class BackupEntryModel(
val name: BackupEntry.Name,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupItem.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupItem.kt
index 09d6e28..81f28c5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
@@ -16,9 +16,9 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.core.components.PreferenceItemDescription
-import org.xtimms.tokusho.core.components.PreferenceItemTitle
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.core.components.PreferenceItemDescription
+import org.xtimms.etsudoku.core.components.PreferenceItemTitle
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
@OptIn(ExperimentalFoundationApi::class)
@Composable
@@ -59,7 +59,7 @@ fun BackupItem(
@Preview
@Composable
fun BackupItemPreview() {
- TokushoTheme {
+ EtsudokuTheme {
BackupItem(title = "Title")
}
}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupObserver.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupObserver.kt
similarity index 71%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupObserver.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupObserver.kt
index 3457cad..6551af4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupObserver.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupObserver.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.app.backup.BackupManager
import android.content.Context
import androidx.room.InvalidationTracker
import dagger.hilt.android.qualifiers.ApplicationContext
-import org.xtimms.tokusho.core.database.TABLE_FAVOURITES
-import org.xtimms.tokusho.core.database.TABLE_FAVOURITE_CATEGORIES
-import org.xtimms.tokusho.core.database.TABLE_HISTORY
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITES
+import org.xtimms.etsudoku.core.database.TABLE_FAVOURITE_CATEGORIES
+import org.xtimms.etsudoku.core.database.TABLE_HISTORY
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupRestoreView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupRestoreView.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupRestoreView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupRestoreView.kt
index f0c59b5..9798684 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupRestoreView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupRestoreView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.content.Context
import android.content.Intent
@@ -35,16 +35,16 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceInfo
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitchWithContainer
-import org.xtimms.tokusho.core.components.PreferencesHintCard
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.components.icons.Kotatsu
-import org.xtimms.tokusho.utils.system.toast
-import org.xtimms.tokusho.utils.system.tryLaunch
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceInfo
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitchWithContainer
+import org.xtimms.etsudoku.core.components.PreferencesHintCard
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.components.icons.Kotatsu
+import org.xtimms.etsudoku.utils.system.toast
+import org.xtimms.etsudoku.utils.system.tryLaunch
import java.io.File
import java.io.FileOutputStream
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupViewModel.kt
similarity index 78%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupViewModel.kt
index 91afbfb..fa90e1c 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/BackupViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/BackupViewModel.kt
@@ -1,14 +1,14 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.content.Context
import dagger.hilt.android.lifecycle.HiltViewModel
import dagger.hilt.android.qualifiers.ApplicationContext
import kotlinx.coroutines.flow.MutableStateFlow
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.backup.BackupRepository
-import org.xtimms.tokusho.data.repository.backup.BackupZipOutput
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.backup.BackupRepository
+import org.xtimms.etsudoku.data.repository.backup.BackupZipOutput
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
import java.io.File
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/PeriodicalBackupWorker.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/PeriodicalBackupWorker.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/PeriodicalBackupWorker.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/PeriodicalBackupWorker.kt
index 3d7b28a..13e86dc 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/PeriodicalBackupWorker.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/PeriodicalBackupWorker.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.content.Context
import android.os.Build
@@ -16,11 +16,11 @@ import androidx.work.workDataOf
import dagger.Reusable
import dagger.assisted.Assisted
import dagger.assisted.AssistedInject
-import org.xtimms.tokusho.data.repository.backup.BackupRepository
-import org.xtimms.tokusho.data.repository.backup.BackupZipOutput
-import org.xtimms.tokusho.utils.lang.awaitUniqueWorkInfoByName
-import org.xtimms.tokusho.utils.system.deleteAwait
-import org.xtimms.tokusho.work.PeriodicWorkScheduler
+import org.xtimms.etsudoku.data.repository.backup.BackupRepository
+import org.xtimms.etsudoku.data.repository.backup.BackupZipOutput
+import org.xtimms.etsudoku.utils.lang.awaitUniqueWorkInfoByName
+import org.xtimms.etsudoku.utils.system.deleteAwait
+import org.xtimms.etsudoku.work.PeriodicWorkScheduler
import java.util.Date
import java.util.concurrent.TimeUnit
import javax.inject.Inject
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreItemsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreItemsView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreItemsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreItemsView.kt
index 690e15f..e6abe91 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreItemsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreItemsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
@@ -24,11 +24,11 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferencesHintCard
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.sections.settings.about.ProgressIndicatorButton
-import org.xtimms.tokusho.utils.DeviceUtil
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferencesHintCard
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.sections.settings.about.ProgressIndicatorButton
+import org.xtimms.etsudoku.utils.DeviceUtil
const val RESTORE_ARGUMENT = "{file}"
const val RESTORE_DESTINATION = "restore/?file=${RESTORE_ARGUMENT}"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreViewModel.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreViewModel.kt
index 149c7e5..e9419c1 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/backup/RestoreViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/backup/RestoreViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.backup
+package org.xtimms.etsudoku.sections.settings.backup
import android.content.Context
import android.net.Uri
@@ -9,14 +9,14 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.runInterruptible
import org.koitharu.kotatsu.parsers.util.SuspendLazy
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.backup.BackupEntry
-import org.xtimms.tokusho.data.repository.backup.BackupRepository
-import org.xtimms.tokusho.data.repository.backup.BackupZipInput
-import org.xtimms.tokusho.data.repository.backup.CompositeResult
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
-import org.xtimms.tokusho.utils.system.toUriOrNull
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.backup.BackupEntry
+import org.xtimms.etsudoku.data.repository.backup.BackupRepository
+import org.xtimms.etsudoku.data.repository.backup.BackupZipInput
+import org.xtimms.etsudoku.data.repository.backup.CompositeResult
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
+import org.xtimms.etsudoku.utils.system.toUriOrNull
import java.io.File
import java.io.FileNotFoundException
import java.util.Date
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/network/NetworkView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/network/NetworkView.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/network/NetworkView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/network/NetworkView.kt
index 3a55385..e08d50b 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/network/NetworkView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/network/NetworkView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.network
+package org.xtimms.etsudoku.sections.settings.network
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -17,14 +17,14 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.components.icons.ArrowDecisionOutline
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.SSL_BYPASS
-import org.xtimms.tokusho.core.prefs.WSRV
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.components.icons.ArrowDecisionOutline
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.SSL_BYPASS
+import org.xtimms.etsudoku.core.prefs.WSRV
const val NETWORK_DESTINATION = "network"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/ShelfSettingsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/ShelfSettingsView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/ShelfSettingsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/ShelfSettingsView.kt
index 167aca4..42d8e1b 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/ShelfSettingsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/ShelfSettingsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.shelf
+package org.xtimms.etsudoku.sections.settings.shelf
import androidx.compose.foundation.interaction.MutableInteractionSource
import androidx.compose.foundation.layout.Column
@@ -34,15 +34,15 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSubtitle
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.GRID_COLUMNS
-import org.xtimms.tokusho.core.prefs.TABS_MANGA_COUNT
-import org.xtimms.tokusho.sections.shelf.ShelfViewModel
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSubtitle
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.GRID_COLUMNS
+import org.xtimms.etsudoku.core.prefs.TABS_MANGA_COUNT
+import org.xtimms.etsudoku.sections.shelf.ShelfViewModel
const val SHELF_SETTINGS_DESTINATION = "shelf_settings"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/AddCategoryDialog.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/AddCategoryDialog.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/AddCategoryDialog.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/AddCategoryDialog.kt
index 07722c8..51c5779 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/AddCategoryDialog.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/AddCategoryDialog.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.shelf.categories
+package org.xtimms.etsudoku.sections.settings.shelf.categories
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.padding
@@ -14,9 +14,9 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.text.input.ImeAction
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ConfirmButton
-import org.xtimms.tokusho.core.components.DismissButton
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ConfirmButton
+import org.xtimms.etsudoku.core.components.DismissButton
@Composable
fun AddCategoryDialog(onDismissRequest: () -> Unit) {
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoriesView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoriesView.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoriesView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoriesView.kt
index 61e3eac..db920c8 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoriesView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoriesView.kt
@@ -1,5 +1,8 @@
-package org.xtimms.tokusho.sections.settings.shelf.categories
+package org.xtimms.etsudoku.sections.settings.shelf.categories
+import androidx.compose.animation.core.Spring
+import androidx.compose.animation.core.VisibilityThreshold
+import androidx.compose.animation.core.spring
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
@@ -19,13 +22,14 @@ import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
+import androidx.compose.ui.unit.IntOffset
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ScaffoldWithClassicTopAppBar
-import org.xtimms.tokusho.sections.shelf.ShelfViewModel
-import org.xtimms.tokusho.utils.system.plus
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ScaffoldWithClassicTopAppBar
+import org.xtimms.etsudoku.sections.shelf.ShelfViewModel
+import org.xtimms.etsudoku.utils.system.plus
const val CATEGORIES_DESTINATION = "categories"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoryListItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoryListItem.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoryListItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoryListItem.kt
index d240771..9771342 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/CategoryListItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/CategoryListItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.shelf.categories
+package org.xtimms.etsudoku.sections.settings.shelf.categories
import androidx.compose.foundation.clickable
import androidx.compose.foundation.layout.Row
@@ -22,8 +22,8 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.sections.shelf.FavouriteTabModel
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.sections.shelf.FavouriteTabModel
@Composable
fun CategoryListItem(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/interactor/ReorderCategory.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/interactor/ReorderCategory.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/interactor/ReorderCategory.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/interactor/ReorderCategory.kt
index c905811..33b21f2 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/shelf/categories/interactor/ReorderCategory.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/shelf/categories/interactor/ReorderCategory.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.shelf.categories.interactor
+package org.xtimms.etsudoku.sections.settings.shelf.categories.interactor
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.flow.SharingStarted
@@ -7,10 +7,10 @@ import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
import kotlinx.coroutines.sync.Mutex
import kotlinx.coroutines.sync.withLock
-import org.xtimms.tokusho.core.model.FavouriteCategory
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
-import org.xtimms.tokusho.utils.lang.withNonCancellableContext
+import org.xtimms.etsudoku.core.model.FavouriteCategory
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.lang.withNonCancellableContext
import java.util.Collections
class ReorderCategory(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsView.kt
index 29d034e..683808e 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources
+package org.xtimms.etsudoku.sections.settings.sources
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -21,12 +21,12 @@ import androidx.compose.ui.platform.LocalContext
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.PreferenceItem
-import org.xtimms.tokusho.core.components.PreferenceSwitch
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.prefs.NSFW
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.PreferenceItem
+import org.xtimms.etsudoku.core.components.PreferenceSwitch
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.prefs.NSFW
const val SOURCES_DESTINATION = "sources"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsViewModel.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsViewModel.kt
index 4184997..1b5266a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/SourcesSettingsViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/SourcesSettingsViewModel.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.sections.settings.sources
+package org.xtimms.etsudoku.sections.settings.sources
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.asStateFlow
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItem.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItem.kt
index 8f5407b..132d101 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.fillMaxWidth
@@ -14,8 +14,8 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.AsyncImageImpl
-import org.xtimms.tokusho.core.parser.favicon.faviconUri
+import org.xtimms.etsudoku.core.AsyncImageImpl
+import org.xtimms.etsudoku.core.parser.favicon.faviconUri
@Composable
fun SourceCatalogItem(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItemModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItemModel.kt
similarity index 78%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItemModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItemModel.kt
index 8a68c6b..e99e97c 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogItemModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogItemModel.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.annotation.StringRes
import androidx.compose.ui.graphics.vector.ImageVector
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class SourceCatalogItemModel(
val source: MangaSource,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogPage.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogPage.kt
similarity index 73%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogPage.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogPage.kt
index 281bfac..1c961b5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourceCatalogPage.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourceCatalogPage.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import org.koitharu.kotatsu.parsers.model.ContentType
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class SourceCatalogPage(
val type: ContentType,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogListProducer.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogListProducer.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogListProducer.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogListProducer.kt
index 43ab282..0d6c837 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogListProducer.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogListProducer.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.outlined.SearchOff
@@ -14,19 +14,19 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.launch
import org.koitharu.kotatsu.parsers.model.ContentType
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.database.TABLE_SOURCES
-import org.xtimms.tokusho.core.database.TokushoDatabase
-import org.xtimms.tokusho.core.database.removeObserverAsync
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.utils.lang.lifecycleScope
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.database.TABLE_SOURCES
+import org.xtimms.etsudoku.core.database.EtsudokuDatabase
+import org.xtimms.etsudoku.core.database.removeObserverAsync
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.utils.lang.lifecycleScope
class SourcesCatalogListProducer @AssistedInject constructor(
@Assisted private val locale: String?,
@Assisted private val contentType: ContentType,
@Assisted lifecycle: ViewModelLifecycle,
private val repository: MangaSourcesRepository,
- private val database: TokushoDatabase,
+ private val database: EtsudokuDatabase,
) : InvalidationTracker.Observer(TABLE_SOURCES), RetainedLifecycle.OnClearedListener {
private val scope = lifecycle.lifecycleScope
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogPager.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogPager.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogPager.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogPager.kt
index 32d20f0..6d8eae5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogPager.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogPager.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -19,13 +19,13 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.util.fastAny
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.MangaGridItem
-import org.xtimms.tokusho.core.screens.EmptyScreen
-import org.xtimms.tokusho.sections.shelf.LazyShelfGrid
-import org.xtimms.tokusho.sections.shelf.ShelfGrid
-import org.xtimms.tokusho.sections.shelf.ShelfManga
-import org.xtimms.tokusho.utils.system.plus
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.MangaGridItem
+import org.xtimms.etsudoku.core.screens.EmptyScreen
+import org.xtimms.etsudoku.sections.shelf.LazyShelfGrid
+import org.xtimms.etsudoku.sections.shelf.ShelfGrid
+import org.xtimms.etsudoku.sections.shelf.ShelfManga
+import org.xtimms.etsudoku.utils.system.plus
@Composable
fun SourcesCatalogPager(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogTabs.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogTabs.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogTabs.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogTabs.kt
index 341fb9e..5fe7405 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogTabs.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogTabs.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
@@ -15,8 +15,8 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaState
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.TabText
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.TabText
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogView.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogView.kt
index a2dc516..dd6b84a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
@@ -13,8 +13,8 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ScaffoldWithClassicTopAppBar
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ScaffoldWithClassicTopAppBar
const val CATALOG_DESTINATION = "catalog"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogViewModel.kt
similarity index 87%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogViewModel.kt
index 21782fe..d470e5a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/sources/catalog/SourcesCatalogViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/sources/catalog/SourcesCatalogViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.sources.catalog
+package org.xtimms.etsudoku.sections.settings.sources.catalog
import androidx.annotation.MainThread
import androidx.lifecycle.viewModelScope
@@ -17,13 +17,13 @@ import kotlinx.coroutines.plus
import org.koitharu.kotatsu.parsers.model.ContentType
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.util.mapToSet
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.utils.ReversibleAction
-import org.xtimms.tokusho.utils.lang.MutableEventFlow
-import org.xtimms.tokusho.utils.lang.call
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.utils.ReversibleAction
+import org.xtimms.etsudoku.utils.lang.MutableEventFlow
+import org.xtimms.etsudoku.utils.lang.call
import java.util.EnumMap
import java.util.EnumSet
import java.util.Locale
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/CleanDialog.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/CleanDialog.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/storage/CleanDialog.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/CleanDialog.kt
index ed1bf97..32f292d 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/CleanDialog.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/CleanDialog.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.storage
+package org.xtimms.etsudoku.sections.settings.storage
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.Spacer
@@ -22,12 +22,12 @@ import androidx.compose.ui.tooling.preview.Preview
import androidx.compose.ui.unit.dp
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.ConfirmButton
-import org.xtimms.tokusho.core.components.DialogCheckBoxItem
-import org.xtimms.tokusho.core.components.DismissButton
-import org.xtimms.tokusho.core.components.TokushoDialog
-import org.xtimms.tokusho.utils.FileSize
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.ConfirmButton
+import org.xtimms.etsudoku.core.components.DialogCheckBoxItem
+import org.xtimms.etsudoku.core.components.DismissButton
+import org.xtimms.etsudoku.core.components.EtsudokuDialog
+import org.xtimms.etsudoku.utils.FileSize
@Composable
fun CleanDialog(
@@ -51,7 +51,7 @@ fun CleanDialog(
mutableStateOf(isNetworkCacheSelected)
}
- TokushoDialog(
+ EtsudokuDialog(
onDismissRequest = onDismissRequest,
confirmButton = {
ConfirmButton {
diff --git a/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageEvent.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageEvent.kt
new file mode 100644
index 0000000..a547644
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageEvent.kt
@@ -0,0 +1,5 @@
+package org.xtimms.etsudoku.sections.settings.storage
+
+import org.xtimms.etsudoku.core.base.event.UiEvent
+
+interface StorageEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageUiState.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageUiState.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageUiState.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageUiState.kt
index 5e7e40d..83971dd 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageUiState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageUiState.kt
@@ -1,6 +1,6 @@
-package org.xtimms.tokusho.sections.settings.storage
+package org.xtimms.etsudoku.sections.settings.storage
-import org.xtimms.tokusho.core.base.state.UiState
+import org.xtimms.etsudoku.core.base.state.UiState
data class StorageUiState(
val pagesCache: Long = -1L,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageView.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageView.kt
index 765a463..6bd4354 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.storage
+package org.xtimms.etsudoku.sections.settings.storage
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.WindowInsets
@@ -13,6 +13,7 @@ import androidx.compose.material.icons.outlined.Image
import androidx.compose.material.icons.outlined.NetworkWifi
import androidx.compose.material.icons.outlined.SdStorage
import androidx.compose.runtime.Composable
+import androidx.compose.runtime.LaunchedEffect
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
@@ -21,22 +22,22 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.res.stringResource
import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.core.components.PreferenceStorageHeader
-import org.xtimms.tokusho.core.components.PreferenceStorageItem
-import org.xtimms.tokusho.core.components.PreferencesHintCard
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
-import org.xtimms.tokusho.data.CACHE_SIZE_MAX
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.core.components.PreferenceStorageHeader
+import org.xtimms.etsudoku.core.components.PreferenceStorageItem
+import org.xtimms.etsudoku.core.components.PreferencesHintCard
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.data.CACHE_SIZE_MAX
const val STORAGE_DESTINATION = "storage"
@Composable
fun StorageView(
+ viewModel: StorageViewModel = hiltViewModel(),
navigateBack: () -> Unit,
) {
- val viewModel: StorageViewModel = hiltViewModel()
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
var showCleanDialog by remember { mutableStateOf(false) }
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageViewModel.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageViewModel.kt
index ec01b23..8a226a5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/settings/storage/StorageViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.settings.storage
+package org.xtimms.etsudoku.sections.settings.storage
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.Dispatchers
@@ -7,9 +7,9 @@ import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.update
import kotlinx.coroutines.runInterruptible
import okhttp3.Cache
-import org.xtimms.tokusho.core.base.viewmodel.BaseViewModel
-import org.xtimms.tokusho.core.cache.CacheDir
-import org.xtimms.tokusho.data.LocalStorageManager
+import org.xtimms.etsudoku.core.base.viewmodel.BaseViewModel
+import org.xtimms.etsudoku.core.cache.CacheDir
+import org.xtimms.etsudoku.data.LocalStorageManager
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteManga.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteManga.kt
similarity index 62%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteManga.kt
index 0e8c78a..ea9b0fe 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteManga.kt
@@ -1,13 +1,13 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.room.Embedded
import androidx.room.Junction
import androidx.room.Relation
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.MangaTagsEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.MangaTagsEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
class FavouriteManga(
@Embedded val favourite: FavouriteEntity,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteTabModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteTabModel.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteTabModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteTabModel.kt
index ecbe3ac..cd5e5d4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/FavouriteTabModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/FavouriteTabModel.kt
@@ -1,6 +1,6 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class FavouriteTabModel(
val id: Long,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/LazyShelfGrid.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/LazyShelfGrid.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/LazyShelfGrid.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/LazyShelfGrid.kt
index 32927a3..fef7aaa 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/LazyShelfGrid.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/LazyShelfGrid.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.compose.foundation.layout.Arrangement
import androidx.compose.foundation.layout.PaddingValues
@@ -8,7 +8,7 @@ import androidx.compose.foundation.lazy.grid.LazyVerticalGrid
import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.utils.system.plus
+import org.xtimms.etsudoku.utils.system.plus
@Composable
internal fun LazyShelfGrid(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfGrid.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfGrid.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfGrid.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfGrid.kt
index b7a3d32..742f344 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfGrid.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfGrid.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.fillMaxSize
@@ -7,7 +7,7 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.util.fastAny
import coil.ImageLoader
-import org.xtimms.tokusho.core.components.MangaGridItem
+import org.xtimms.etsudoku.core.components.MangaGridItem
@Composable
internal fun ShelfGrid(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfItem.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfItem.kt
similarity index 81%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfItem.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfItem.kt
index 6704d9d..266fd2a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfItem.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfItem.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
data class ShelfItem(
val libraryManga: ShelfManga,
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfManga.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfManga.kt
similarity index 74%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfManga.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfManga.kt
index b770668..02ef4b6 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfManga.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfManga.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import org.koitharu.kotatsu.parsers.model.Manga
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfPager.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfPager.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfPager.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfPager.kt
index eb4bef8..2a90a9e 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfPager.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfPager.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.compose.foundation.layout.Column
import androidx.compose.foundation.layout.PaddingValues
@@ -15,10 +15,10 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import coil.ImageLoader
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.screens.EmptyScreen
-import org.xtimms.tokusho.utils.system.plus
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.screens.EmptyScreen
+import org.xtimms.etsudoku.utils.system.plus
@Composable
fun ShelfPager(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfTabs.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfTabs.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfTabs.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfTabs.kt
index b6a8569..42ed73a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfTabs.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfTabs.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.layout.Column
@@ -12,9 +12,9 @@ import androidx.compose.runtime.Composable
import androidx.compose.ui.Modifier
import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
-import org.xtimms.tokusho.core.components.TabText
-import org.xtimms.tokusho.core.model.FavouriteCategory
-import org.xtimms.tokusho.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.components.TabText
+import org.xtimms.etsudoku.core.model.FavouriteCategory
+import org.xtimms.etsudoku.core.prefs.AppSettings
@OptIn(ExperimentalFoundationApi::class, ExperimentalMaterial3Api::class)
@Composable
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfView.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfView.kt
index d195c03..9816190 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.compose.animation.core.Animatable
import androidx.compose.animation.core.AnimationVector1D
@@ -19,8 +19,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
import kotlinx.coroutines.delay
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.core.collapsable
-import org.xtimms.tokusho.core.components.PullRefresh
+import org.xtimms.etsudoku.core.collapsable
+import org.xtimms.etsudoku.core.components.PullRefresh
import kotlin.time.Duration.Companion.seconds
const val SHELF_DESTINATION = "shelf"
@@ -30,7 +30,6 @@ fun ShelfView(
coil: ImageLoader,
currentPage: () -> Int,
showPageTabs: Boolean,
- topBarHeightPx: Float,
padding: PaddingValues,
navigateToDetails: (Long) -> Unit,
onRefresh: (FavouriteTabModel?) -> Boolean,
@@ -40,7 +39,6 @@ fun ShelfView(
coil = coil,
currentPage = currentPage,
showPageTabs = showPageTabs,
- topBarHeightPx = topBarHeightPx,
padding = padding,
navigateToDetails = navigateToDetails,
onRefresh = onRefresh,
@@ -53,24 +51,16 @@ fun ShelfViewContent(
viewModel: ShelfViewModel = hiltViewModel(),
currentPage: () -> Int,
showPageTabs: Boolean,
- topBarHeightPx: Float,
- topBarOffsetY: Animatable = Animatable(0f),
padding: PaddingValues,
navigateToDetails: (Long) -> Unit,
onRefresh: (FavouriteTabModel?) -> Boolean,
) {
- val scrollState = rememberScrollState()
val categories by viewModel.categories.collectAsStateWithLifecycle(emptyList())
val mangas by viewModel.mangas.collectAsStateWithLifecycle(emptyList())
Column(
modifier = Modifier
- .collapsable(
- state = scrollState,
- topBarHeightPx = topBarHeightPx,
- topBarOffsetY = topBarOffsetY
- )
.padding(padding)
) {
val pagerState = rememberPagerState(0) { categories.size }
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfViewModel.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfViewModel.kt
index 274fdfb..c3ff37f 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/shelf/ShelfViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/shelf/ShelfViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.shelf
+package org.xtimms.etsudoku.sections.shelf
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -9,9 +9,9 @@ import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.map
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.utils.lang.mapItems
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.utils.lang.mapItems
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/ChaptersChart.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/ChaptersChart.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/ChaptersChart.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/ChaptersChart.kt
index 29e0c14..b355f96 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/ChaptersChart.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/ChaptersChart.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats
+package org.xtimms.etsudoku.sections.stats
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.isSystemInDarkTheme
@@ -19,12 +19,12 @@ import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.ui.theme.colorMax
-import org.xtimms.tokusho.ui.theme.colorMin
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.material.combineColors
-import org.xtimms.tokusho.utils.material.harmonize
-import org.xtimms.tokusho.utils.material.toPalette
+import org.xtimms.etsudoku.ui.theme.colorMax
+import org.xtimms.etsudoku.ui.theme.colorMin
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.material.combineColors
+import org.xtimms.etsudoku.utils.material.harmonize
+import org.xtimms.etsudoku.utils.material.toPalette
import kotlin.math.abs
@Composable
@@ -154,7 +154,7 @@ fun ChaptersChart(
@Preview
@Composable
private fun PreviewChart() {
- TokushoTheme {
+ EtsudokuTheme {
ChaptersChart(
modifier = Modifier.size(100.dp),
chapters = listOf(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/MinMaxReadCard.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/MinMaxReadCard.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/MinMaxReadCard.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/MinMaxReadCard.kt
index bcf169b..52bbcf5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/MinMaxReadCard.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/MinMaxReadCard.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats
+package org.xtimms.etsudoku.sections.stats
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@@ -21,12 +21,12 @@ import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.dp
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.ui.theme.colorMax
-import org.xtimms.tokusho.ui.theme.colorMin
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.utils.material.combineColors
-import org.xtimms.tokusho.utils.material.harmonize
-import org.xtimms.tokusho.utils.material.toPalette
+import org.xtimms.etsudoku.ui.theme.colorMax
+import org.xtimms.etsudoku.ui.theme.colorMin
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.utils.material.combineColors
+import org.xtimms.etsudoku.utils.material.harmonize
+import org.xtimms.etsudoku.utils.material.toPalette
@Composable
fun MinMaxReadCard(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/StatsCard.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsCard.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/StatsCard.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsCard.kt
index 03527e0..cb853a0 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/StatsCard.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsCard.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats
+package org.xtimms.etsudoku.sections.stats
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.Box
@@ -35,7 +35,7 @@ import androidx.compose.ui.unit.Density
import androidx.compose.ui.unit.TextUnit
import androidx.compose.ui.unit.TextUnitType
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.ui.theme.TokushoTheme
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
@Composable
fun TimeCard(
@@ -239,7 +239,7 @@ fun growByMiddleChildRowMeasurePolicy(localDensity: Density) =
@Preview
@Composable
private fun TimeCardPreview() {
- TokushoTheme {
+ EtsudokuTheme {
TimeCard(
modifier = Modifier.height(IntrinsicSize.Min),
)
@@ -249,7 +249,7 @@ private fun TimeCardPreview() {
@Preview
@Composable
private fun StatsCardPreview() {
- TokushoTheme {
+ EtsudokuTheme {
StatsCard(
value = "value",
label = "label"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/StatsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsView.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/StatsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsView.kt
index fe24eae..f2be722 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/StatsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/StatsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats
+package org.xtimms.etsudoku.sections.stats
import androidx.compose.animation.core.RepeatMode
import androidx.compose.animation.core.animateFloat
@@ -50,12 +50,12 @@ import androidx.compose.ui.unit.dp
import androidx.compose.ui.zIndex
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.model.MangaSource
-import org.xtimms.tokusho.LocalBottomSheetScrollState
-import org.xtimms.tokusho.LocalWindowInsets
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.sections.stats.categories.CategoriesChart
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.material.combineColors
+import org.xtimms.etsudoku.LocalBottomSheetScrollState
+import org.xtimms.etsudoku.LocalWindowInsets
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.sections.stats.categories.CategoriesChart
+import org.xtimms.etsudoku.ui.theme.EtsudokuTheme
+import org.xtimms.etsudoku.utils.material.combineColors
data class Size(val width: Dp, val height: Dp)
@@ -222,7 +222,7 @@ fun StatsView(
@Preview
@Composable
private fun Preview() {
- TokushoTheme {
+ EtsudokuTheme {
StatsView(
navigateBack = { }
)
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/CategoriesChartCard.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/CategoriesChartCard.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/categories/CategoriesChartCard.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/CategoriesChartCard.kt
index 4cb8e7d..5aaaf9a 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/CategoriesChartCard.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/CategoriesChartCard.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats.categories
+package org.xtimms.etsudoku.sections.stats.categories
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.foundation.layout.Arrangement
@@ -18,9 +18,9 @@ import androidx.compose.ui.Alignment
import androidx.compose.ui.Modifier
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.utils.material.combineColors
-import org.xtimms.tokusho.utils.material.harmonizeWithColor
-import org.xtimms.tokusho.utils.material.toPalette
+import org.xtimms.etsudoku.utils.material.combineColors
+import org.xtimms.etsudoku.utils.material.harmonizeWithColor
+import org.xtimms.etsudoku.utils.material.toPalette
var baseColors = listOf(
Color(0xFFF86BAE),
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/DonutChart.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/DonutChart.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/categories/DonutChart.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/DonutChart.kt
index 72327e0..f84bbe5 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/DonutChart.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/DonutChart.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats.categories
+package org.xtimms.etsudoku.sections.stats.categories
import androidx.compose.foundation.Canvas
import androidx.compose.foundation.layout.PaddingValues
@@ -15,7 +15,7 @@ import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.unit.LayoutDirection
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.core.model.ShelfCategory
+import org.xtimms.etsudoku.core.model.ShelfCategory
@Composable
fun DonutChart(
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/TagAmount.kt b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/TagAmount.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/sections/stats/categories/TagAmount.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/TagAmount.kt
index fb0ef34..bc42e3d 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/stats/categories/TagAmount.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/stats/categories/TagAmount.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.stats.categories
+package org.xtimms.etsudoku.sections.stats.categories
import androidx.compose.foundation.layout.Row
import androidx.compose.foundation.layout.Spacer
@@ -16,7 +16,7 @@ import androidx.compose.ui.text.font.FontStyle
import androidx.compose.ui.text.font.FontWeight
import androidx.compose.ui.text.style.TextOverflow
import androidx.compose.ui.unit.dp
-import org.xtimms.tokusho.utils.material.HarmonizedColorPalette
+import org.xtimms.etsudoku.utils.material.HarmonizedColorPalette
import java.math.BigDecimal
@Composable
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionMangaModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionMangaModel.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionMangaModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionMangaModel.kt
index b6332f7..904103c 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionMangaModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionMangaModel.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.sections.suggestions
+package org.xtimms.etsudoku.sections.suggestions
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.model.ListModel
+import org.xtimms.etsudoku.core.model.ListModel
data class SuggestionMangaModel(
val manga: Manga
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsView.kt b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsView.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsView.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsView.kt
index c962ad2..70a9ca4 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsView.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsView.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.suggestions
+package org.xtimms.etsudoku.sections.suggestions
import androidx.compose.animation.core.Spring
import androidx.compose.animation.core.VisibilityThreshold
@@ -32,9 +32,9 @@ import androidx.hilt.navigation.compose.hiltViewModel
import androidx.lifecycle.compose.collectAsStateWithLifecycle
import coil.ImageLoader
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.components.MangaGridItem
-import org.xtimms.tokusho.core.components.ScaffoldWithTopAppBar
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.components.MangaGridItem
+import org.xtimms.etsudoku.core.components.ScaffoldWithTopAppBar
const val SUGGESTIONS_DESTINATION = "suggestions"
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsViewModel.kt b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsViewModel.kt
similarity index 75%
rename from app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsViewModel.kt
rename to app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsViewModel.kt
index af8b701..72765ad 100644
--- a/app/src/main/java/org/xtimms/tokusho/sections/suggestions/SuggestionsViewModel.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/sections/suggestions/SuggestionsViewModel.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.sections.suggestions
+package org.xtimms.etsudoku.sections.suggestions
import androidx.lifecycle.viewModelScope
import dagger.hilt.android.lifecycle.HiltViewModel
@@ -9,11 +9,11 @@ import kotlinx.coroutines.flow.filterNotNull
import kotlinx.coroutines.flow.stateIn
import kotlinx.coroutines.plus
import org.koitharu.kotatsu.parsers.model.Manga
-import org.xtimms.tokusho.core.base.viewmodel.KotatsuBaseViewModel
-import org.xtimms.tokusho.data.repository.SuggestionRepository
-import org.xtimms.tokusho.sections.history.HistoryItemModel
-import org.xtimms.tokusho.utils.lang.mapItems
-import org.xtimms.tokusho.work.suggestions.SuggestionsWorker
+import org.xtimms.etsudoku.core.base.viewmodel.KotatsuBaseViewModel
+import org.xtimms.etsudoku.data.repository.SuggestionRepository
+import org.xtimms.etsudoku.sections.history.HistoryItemModel
+import org.xtimms.etsudoku.utils.lang.mapItems
+import org.xtimms.etsudoku.work.suggestions.SuggestionsWorker
import javax.inject.Inject
@HiltViewModel
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/blend/Blend.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/blend/Blend.java
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/blend/Blend.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/blend/Blend.java
index 1055802..af73375 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/blend/Blend.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/blend/Blend.java
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.ui.harmonize.blend;
+package org.xtimms.etsudoku.ui.harmonize.blend;
-import org.xtimms.tokusho.ui.harmonize.hct.Cam16;
-import org.xtimms.tokusho.ui.harmonize.hct.Hct;
-import org.xtimms.tokusho.ui.harmonize.utils.ColorUtils;
-import org.xtimms.tokusho.ui.harmonize.utils.MathUtils;
+import org.xtimms.etsudoku.ui.harmonize.hct.Cam16;
+import org.xtimms.etsudoku.ui.harmonize.hct.Hct;
+import org.xtimms.etsudoku.ui.harmonize.utils.ColorUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.MathUtils;
/** Functions for blending in HCT and CAM16. */
public class Blend {
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Cam16.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Cam16.java
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Cam16.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Cam16.java
index b74cf98..3f35279 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Cam16.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Cam16.java
@@ -14,11 +14,11 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.hct;
+package org.xtimms.etsudoku.ui.harmonize.hct;
import static java.lang.Math.max;
-import org.xtimms.tokusho.ui.harmonize.utils.ColorUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.ColorUtils;
/**
* CAM16, a color appearance model. Colors are not just defined by their hex code, but rather, a hex
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/CamSolver.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/CamSolver.java
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/CamSolver.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/CamSolver.java
index d3e8035..a318951 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/CamSolver.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/CamSolver.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.hct;
+package org.xtimms.etsudoku.ui.harmonize.hct;
import static java.lang.Math.max;
-import org.xtimms.tokusho.ui.harmonize.utils.ColorUtils;
-import org.xtimms.tokusho.ui.harmonize.utils.MathUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.ColorUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.MathUtils;
import java.util.ArrayList;
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Hct.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Hct.java
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Hct.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Hct.java
index 7b0987c..8a5f603 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/Hct.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/Hct.java
@@ -14,7 +14,7 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.hct;
+package org.xtimms.etsudoku.ui.harmonize.hct;
/**
* A color system built using CAM16 hue and chroma, and L* from L*a*b*.
@@ -30,7 +30,7 @@ package org.xtimms.tokusho.ui.harmonize.hct;
* guarantees a contrast ratio >= 4.5.
*/
-import org.xtimms.tokusho.ui.harmonize.utils.ColorUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.ColorUtils;
/**
* HCT, hue, chroma, and tone. A color system that provides a perceptually accurate color
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/ViewingConditions.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/ViewingConditions.java
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/ViewingConditions.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/ViewingConditions.java
index 0f2bddb..3581720 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/hct/ViewingConditions.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/hct/ViewingConditions.java
@@ -14,10 +14,10 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.hct;
+package org.xtimms.etsudoku.ui.harmonize.hct;
-import org.xtimms.tokusho.ui.harmonize.utils.ColorUtils;
-import org.xtimms.tokusho.ui.harmonize.utils.MathUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.ColorUtils;
+import org.xtimms.etsudoku.ui.harmonize.utils.MathUtils;
/**
* In traditional color spaces, a color can be identified solely by the observer's measurement of
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/CorePalette.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/CorePalette.java
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/CorePalette.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/CorePalette.java
index e30f251..2779074 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/CorePalette.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/CorePalette.java
@@ -14,12 +14,12 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.palettes;
+package org.xtimms.etsudoku.ui.harmonize.palettes;
import static java.lang.Math.max;
import static java.lang.Math.min;
-import org.xtimms.tokusho.ui.harmonize.hct.Hct;
+import org.xtimms.etsudoku.ui.harmonize.hct.Hct;
/**
* An intermediate concept between the key color for a UI theme, and a full color scheme. 5 sets of
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/TonalPalette.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/TonalPalette.java
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/TonalPalette.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/TonalPalette.java
index 9cd39ab..a0c60c0 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/palettes/TonalPalette.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/palettes/TonalPalette.java
@@ -14,9 +14,9 @@
* limitations under the License.
*/
-package org.xtimms.tokusho.ui.harmonize.palettes;
+package org.xtimms.etsudoku.ui.harmonize.palettes;
-import org.xtimms.tokusho.ui.harmonize.hct.Hct;
+import org.xtimms.etsudoku.ui.harmonize.hct.Hct;
import java.util.HashMap;
import java.util.Map;
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/ColorUtils.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/ColorUtils.java
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/ColorUtils.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/ColorUtils.java
index c751dbb..e741083 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/ColorUtils.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/ColorUtils.java
@@ -16,7 +16,7 @@
// This file is automatically generated. Do not modify it.
-package org.xtimms.tokusho.ui.harmonize.utils;
+package org.xtimms.etsudoku.ui.harmonize.utils;
/**
* Color science utilities.
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/MathUtils.java b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/MathUtils.java
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/MathUtils.java
rename to app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/MathUtils.java
index 22f156f..31e2c93 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/harmonize/utils/MathUtils.java
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/harmonize/utils/MathUtils.java
@@ -16,7 +16,7 @@
// This file is automatically generated. Do not modify it.
-package org.xtimms.tokusho.ui.harmonize.utils;
+package org.xtimms.etsudoku.ui.harmonize.utils;
/** Utility methods for mathematical operations. */
public class MathUtils {
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/monet/ColorSpec.kt b/app/src/main/java/org/xtimms/etsudoku/ui/monet/ColorSpec.kt
similarity index 75%
rename from app/src/main/java/org/xtimms/tokusho/ui/monet/ColorSpec.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/monet/ColorSpec.kt
index 4e10e24..258d1fb 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/monet/ColorSpec.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/monet/ColorSpec.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.ui.monet
+package org.xtimms.etsudoku.ui.monet
data class ColorSpec(
val chroma: (Double) -> Double = { it },
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/monet/Monet.kt b/app/src/main/java/org/xtimms/etsudoku/ui/monet/Monet.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/ui/monet/Monet.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/monet/Monet.kt
index ac148c6..232e096 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/monet/Monet.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/monet/Monet.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.ui.monet
+package org.xtimms.etsudoku.ui.monet
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.ColorScheme
@@ -7,7 +7,7 @@ import androidx.compose.material3.lightColorScheme
import androidx.compose.runtime.Composable
import androidx.compose.runtime.staticCompositionLocalOf
import androidx.compose.ui.graphics.Color
-import org.xtimms.tokusho.ui.monet.TonalPalettes.Companion.toTonalPalettes
+import org.xtimms.etsudoku.ui.monet.TonalPalettes.Companion.toTonalPalettes
val LocalTonalPalettes = staticCompositionLocalOf {
Color(0xFF1978D2).toTonalPalettes()
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/monet/PaletteStyle.kt b/app/src/main/java/org/xtimms/etsudoku/ui/monet/PaletteStyle.kt
similarity index 99%
rename from app/src/main/java/org/xtimms/tokusho/ui/monet/PaletteStyle.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/monet/PaletteStyle.kt
index 89ce1e0..f1e8783 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/monet/PaletteStyle.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/monet/PaletteStyle.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.ui.monet
+package org.xtimms.etsudoku.ui.monet
class PaletteStyle(
val accent1Spec: ColorSpec,
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/monet/TonalPalettes.kt b/app/src/main/java/org/xtimms/etsudoku/ui/monet/TonalPalettes.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/ui/monet/TonalPalettes.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/monet/TonalPalettes.kt
index 71c7eef..0e6b31c 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/monet/TonalPalettes.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/monet/TonalPalettes.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.ui.monet
+package org.xtimms.etsudoku.ui.monet
import androidx.compose.material3.ColorScheme
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
-import org.xtimms.tokusho.ui.harmonize.hct.Hct
+import org.xtimms.etsudoku.ui.harmonize.hct.Hct
typealias TonalPalette = Map
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/theme/Color.kt b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Color.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/ui/theme/Color.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/theme/Color.kt
index a3967d4..5a72903 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/theme/Color.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Color.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.ui.theme
+package org.xtimms.etsudoku.ui.theme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
-import org.xtimms.tokusho.ui.monet.a1
-import org.xtimms.tokusho.ui.monet.a2
-import org.xtimms.tokusho.ui.monet.a3
+import org.xtimms.etsudoku.ui.monet.a1
+import org.xtimms.etsudoku.ui.monet.a2
+import org.xtimms.etsudoku.ui.monet.a3
val colorMin = Color(0xFF185ED6)
val colorMax = Color(0xFFDD1414)
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/theme/Theme.kt b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Theme.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/ui/theme/Theme.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/theme/Theme.kt
index 1551ae6..b3febcf 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/theme/Theme.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Theme.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.ui.theme
+package org.xtimms.etsudoku.ui.theme
import android.app.Activity
import android.content.Context
@@ -18,7 +18,7 @@ import androidx.compose.ui.text.style.TextDirection
import androidx.core.view.WindowCompat
import com.google.accompanist.systemuicontroller.rememberSystemUiController
import com.google.android.material.color.MaterialColors
-import org.xtimms.tokusho.ui.monet.dynamicColorScheme
+import org.xtimms.etsudoku.ui.monet.dynamicColorScheme
fun Color.disabledIconOpacity(): Color {
return this.copy(alpha = 0.38f)
@@ -44,7 +44,7 @@ private tailrec fun Context.findWindow(): Window? =
}
@Composable
-fun TokushoTheme(
+fun EtsudokuTheme(
darkTheme: Boolean = isSystemInDarkTheme(),
isHighContrastModeEnabled: Boolean = false,
isDynamicColorEnabled: Boolean = false,
diff --git a/app/src/main/java/org/xtimms/tokusho/ui/theme/Type.kt b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Type.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/ui/theme/Type.kt
rename to app/src/main/java/org/xtimms/etsudoku/ui/theme/Type.kt
index 9d9edea..229dfa0 100644
--- a/app/src/main/java/org/xtimms/tokusho/ui/theme/Type.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/ui/theme/Type.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.ui.theme
+package org.xtimms.etsudoku.ui.theme
import android.content.Context
import androidx.compose.foundation.layout.Column
@@ -114,7 +114,7 @@ fun FontCard(family: String, size: String, style: TextStyle) {
@Preview
@Composable
fun PreviewTypography() {
- TokushoTheme {
+ EtsudokuTheme {
Surface {
Row {
Column {
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/AlphanumComparator.kt b/app/src/main/java/org/xtimms/etsudoku/utils/AlphanumComparator.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/AlphanumComparator.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/AlphanumComparator.kt
index 40c794c..7ffde60 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/AlphanumComparator.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/AlphanumComparator.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
class AlphanumComparator : Comparator {
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/CancellableSource.kt b/app/src/main/java/org/xtimms/etsudoku/utils/CancellableSource.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/utils/CancellableSource.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/CancellableSource.kt
index ad326c4..9644e33 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/CancellableSource.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/CancellableSource.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import kotlinx.coroutines.Job
import kotlinx.coroutines.ensureActive
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/CoilImageGetter.kt b/app/src/main/java/org/xtimms/etsudoku/utils/CoilImageGetter.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/CoilImageGetter.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/CoilImageGetter.kt
index f51709b..454cb3d 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/CoilImageGetter.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/CoilImageGetter.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.content.Context
import android.graphics.drawable.Drawable
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex.kt b/app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex.kt
index b7c2223..2cadd5b 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import androidx.collection.ArrayMap
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex2.kt b/app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex2.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex2.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex2.kt
index c20edfe..5f52111 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/CompositeMutex2.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/CompositeMutex2.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import androidx.collection.ArrayMap
import kotlinx.coroutines.sync.Mutex
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/CrashLogUtil.kt b/app/src/main/java/org/xtimms/etsudoku/utils/CrashLogUtil.kt
similarity index 72%
rename from app/src/main/java/org/xtimms/tokusho/utils/CrashLogUtil.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/CrashLogUtil.kt
index 91c8dbf..aa1959b 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/CrashLogUtil.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/CrashLogUtil.kt
@@ -1,15 +1,15 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.content.Context
import android.os.Build
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.utils.lang.withNonCancellableContext
-import org.xtimms.tokusho.utils.system.createFileInCacheDir
-import org.xtimms.tokusho.utils.system.getUriCompat
-import org.xtimms.tokusho.utils.system.toShareIntent
-import org.xtimms.tokusho.utils.system.toast
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.utils.lang.withNonCancellableContext
+import org.xtimms.etsudoku.utils.system.createFileInCacheDir
+import org.xtimms.etsudoku.utils.system.getUriCompat
+import org.xtimms.etsudoku.utils.system.toShareIntent
+import org.xtimms.etsudoku.utils.system.toast
class CrashLogUtil(
private val context: Context,
@@ -17,7 +17,7 @@ class CrashLogUtil(
suspend fun dumpLogs() = withNonCancellableContext {
try {
- val file = context.createFileInCacheDir("tokusho_crash_logs.txt")
+ val file = context.createFileInCacheDir("etsudoku_crash_logs.txt")
file.appendText(getDebugInfo() + "\n\n")
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/DeviceUtil.kt b/app/src/main/java/org/xtimms/etsudoku/utils/DeviceUtil.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/DeviceUtil.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/DeviceUtil.kt
index 9cb604a..4704361 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/DeviceUtil.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/DeviceUtil.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.annotation.SuppressLint
import android.app.ActivityManager
diff --git a/app/src/main/java/org/xtimms/etsudoku/utils/DomainValidator.kt b/app/src/main/java/org/xtimms/etsudoku/utils/DomainValidator.kt
new file mode 100644
index 0000000..be2506f
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/DomainValidator.kt
@@ -0,0 +1,81 @@
+package org.xtimms.etsudoku.utils
+
+import android.content.Context
+import android.text.Editable
+import android.text.TextWatcher
+import android.widget.EditText
+import androidx.annotation.CallSuper
+import okhttp3.HttpUrl
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.utils.system.getDisplayMessage
+import java.lang.ref.WeakReference
+
+class DomainValidator : EditTextValidator() {
+
+ override fun validate(text: String): ValidationResult {
+ val trimmed = text.trim()
+ if (trimmed.isEmpty()) {
+ return ValidationResult.Success
+ }
+ return if (!checkCharacters(trimmed)) {
+ ValidationResult.Failed(context.getString(R.string.invalid_domain_message))
+ } else {
+ ValidationResult.Success
+ }
+ }
+
+ private fun checkCharacters(value: String): Boolean = runCatching {
+ val parts = value.split(':')
+ require(parts.size <= 2)
+ val urlBuilder = HttpUrl.Builder()
+ urlBuilder.host(parts.first())
+ if (parts.size == 2) {
+ urlBuilder.port(parts[1].toInt())
+ }
+ }.isSuccess
+}
+
+abstract class EditTextValidator : TextWatcher {
+
+ private var editTextRef: WeakReference? = null
+
+ protected val context: Context
+ get() = checkNotNull(editTextRef?.get()?.context) {
+ "EditTextValidator is not attached to EditText"
+ }
+
+ override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) = Unit
+
+ override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) = Unit
+
+ @CallSuper
+ override fun afterTextChanged(s: Editable?) {
+ val editText = editTextRef?.get() ?: return
+ val newText = s?.toString().orEmpty()
+ val result = runCatching {
+ validate(newText)
+ }.getOrElse { e ->
+ ValidationResult.Failed(e.getDisplayMessage(editText.resources))
+ }
+ editText.error = when (result) {
+ is ValidationResult.Failed -> result.message
+ ValidationResult.Success -> null
+ }
+ }
+
+ fun attachToEditText(editText: EditText) {
+ editTextRef = WeakReference(editText)
+ editText.removeTextChangedListener(this)
+ editText.addTextChangedListener(this)
+ afterTextChanged(editText.text)
+ }
+
+ abstract fun validate(text: String): ValidationResult
+
+ sealed class ValidationResult {
+
+ object Success : ValidationResult()
+
+ class Failed(val message: CharSequence) : ValidationResult()
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/Event.kt b/app/src/main/java/org/xtimms/etsudoku/utils/Event.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/Event.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/Event.kt
index bf100f8..9c976a2 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/Event.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/Event.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import kotlinx.coroutines.flow.FlowCollector
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ExtraCloseableSource.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ExtraCloseableSource.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/utils/ExtraCloseableSource.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ExtraCloseableSource.kt
index 345d526..6e2993c 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ExtraCloseableSource.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ExtraCloseableSource.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import okhttp3.internal.closeQuietly
import okio.Closeable
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/FileSequence.kt b/app/src/main/java/org/xtimms/etsudoku/utils/FileSequence.kt
similarity index 68%
rename from app/src/main/java/org/xtimms/tokusho/utils/FileSequence.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/FileSequence.kt
index b4ed81d..522687a 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/FileSequence.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/FileSequence.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
-import org.xtimms.tokusho.utils.iterator.CloseableIterator
-import org.xtimms.tokusho.utils.iterator.MappingIterator
+import org.xtimms.etsudoku.utils.iterator.CloseableIterator
+import org.xtimms.etsudoku.utils.iterator.MappingIterator
import java.io.File
import java.nio.file.Files
import java.nio.file.Path
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/FileSize.kt b/app/src/main/java/org/xtimms/etsudoku/utils/FileSize.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/FileSize.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/FileSize.kt
index 238e9b9..a7e681f 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/FileSize.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/FileSize.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.content.Context
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
import java.text.DecimalFormat
import kotlin.math.log10
import kotlin.math.pow
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ImageFileFilter.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ImageFileFilter.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/utils/ImageFileFilter.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ImageFileFilter.kt
index e96eddd..2b406ef 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ImageFileFilter.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ImageFileFilter.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import java.io.File
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/MediatorStateFlow.kt b/app/src/main/java/org/xtimms/etsudoku/utils/MediatorStateFlow.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/utils/MediatorStateFlow.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/MediatorStateFlow.kt
index c69b750..4ecd415 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/MediatorStateFlow.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/MediatorStateFlow.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.MutableStateFlow
diff --git a/app/src/main/java/org/xtimms/etsudoku/utils/MetricAffectingSpan.kt b/app/src/main/java/org/xtimms/etsudoku/utils/MetricAffectingSpan.kt
new file mode 100644
index 0000000..cdf3423
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/MetricAffectingSpan.kt
@@ -0,0 +1,51 @@
+package org.xtimms.etsudoku.utils
+
+import android.graphics.Typeface
+import android.text.style.RelativeSizeSpan
+import android.text.style.StyleSpan
+import android.text.style.SubscriptSpan
+import android.text.style.SuperscriptSpan
+import android.text.style.TypefaceSpan
+import androidx.compose.ui.text.SpanStyle
+import androidx.compose.ui.text.font.FontFamily
+import androidx.compose.ui.text.font.FontStyle
+import androidx.compose.ui.text.font.FontWeight
+import androidx.compose.ui.text.style.BaselineShift
+import androidx.compose.ui.unit.TextUnit
+import androidx.compose.ui.unit.sp
+import java.io.File
+
+private const val PATH_SYSTEM_FONTS_FILE = "/system/etc/fonts.xml"
+private const val PATH_SYSTEM_FONTS_DIR = "/system/fonts/"
+
+internal fun RelativeSizeSpan.spanStyle(fontSize: TextUnit): SpanStyle =
+ SpanStyle(fontSize = (fontSize.value * sizeChange).sp)
+
+internal fun StyleSpan.spanStyle(): SpanStyle? = when (style) {
+ Typeface.BOLD -> SpanStyle(fontWeight = FontWeight.Bold)
+ Typeface.ITALIC -> SpanStyle(fontStyle = FontStyle.Italic)
+ Typeface.BOLD_ITALIC -> SpanStyle(
+ fontWeight = FontWeight.Bold,
+ fontStyle = FontStyle.Italic,
+ )
+ else -> null
+}
+
+internal fun SubscriptSpan.spanStyle(): SpanStyle =
+ SpanStyle(baselineShift = BaselineShift.Subscript)
+
+internal fun SuperscriptSpan.spanStyle(): SpanStyle =
+ SpanStyle(baselineShift = BaselineShift.Superscript)
+
+internal fun TypefaceSpan.spanStyle(): SpanStyle? {
+ val xmlContent = File(PATH_SYSTEM_FONTS_FILE).readText()
+ return if (xmlContent.contains("""""")
+ val fontName = familyChunkXml.substringAfter("""""")
+ .substringBefore("")
+ SpanStyle(fontFamily = FontFamily(Typeface.createFromFile("$PATH_SYSTEM_FONTS_DIR$fontName")))
+ } else {
+ null
+ }
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ProgressResponseBody.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ProgressResponseBody.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/utils/ProgressResponseBody.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ProgressResponseBody.kt
index c3255cc..80fdce7 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ProgressResponseBody.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ProgressResponseBody.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import kotlinx.coroutines.flow.MutableStateFlow
import okhttp3.MediaType
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/RetainedLifecycleCoroutineScope.kt b/app/src/main/java/org/xtimms/etsudoku/utils/RetainedLifecycleCoroutineScope.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/utils/RetainedLifecycleCoroutineScope.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/RetainedLifecycleCoroutineScope.kt
index 01be172..a88ee61 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/RetainedLifecycleCoroutineScope.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/RetainedLifecycleCoroutineScope.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import dagger.hilt.android.lifecycle.RetainedLifecycle
import kotlinx.coroutines.CoroutineScope
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ReversibleAction.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ReversibleAction.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/utils/ReversibleAction.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ReversibleAction.kt
index bd9a67f..0d3aa1d 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ReversibleAction.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ReversibleAction.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import androidx.annotation.StringRes
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ReversibleHandle.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ReversibleHandle.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/utils/ReversibleHandle.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ReversibleHandle.kt
index 0f1d11a..10c4685 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ReversibleHandle.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ReversibleHandle.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import kotlinx.coroutines.CoroutineStart
import kotlinx.coroutines.Dispatchers
@@ -7,7 +7,7 @@ import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
fun interface ReversibleHandle {
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/ShareHelper.kt b/app/src/main/java/org/xtimms/etsudoku/utils/ShareHelper.kt
similarity index 86%
rename from app/src/main/java/org/xtimms/tokusho/utils/ShareHelper.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/ShareHelper.kt
index 4de873b..0fead58 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/ShareHelper.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/ShareHelper.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.content.Context
import android.widget.Toast
import androidx.core.app.ShareCompat
import androidx.core.content.FileProvider
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.logs.FileLogger
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.logs.FileLogger
private const val TYPE_TEXT = "text/plain"
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/StringArrayNavType.kt b/app/src/main/java/org/xtimms/etsudoku/utils/StringArrayNavType.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/utils/StringArrayNavType.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/StringArrayNavType.kt
index ddc91ad..8ab277e 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/StringArrayNavType.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/StringArrayNavType.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.os.Bundle
import androidx.navigation.NavType
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/WebViewUtil.kt b/app/src/main/java/org/xtimms/etsudoku/utils/WebViewUtil.kt
similarity index 91%
rename from app/src/main/java/org/xtimms/tokusho/utils/WebViewUtil.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/WebViewUtil.kt
index 0610f51..ed15e8d 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/WebViewUtil.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/WebViewUtil.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils
+package org.xtimms.etsudoku.utils
import android.content.Context
import android.webkit.WebView
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/composable/Bitmap.kt b/app/src/main/java/org/xtimms/etsudoku/utils/composable/Bitmap.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/utils/composable/Bitmap.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/composable/Bitmap.kt
index 0fbf111..c1f9f28 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/composable/Bitmap.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/composable/Bitmap.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.composable
+package org.xtimms.etsudoku.utils.composable
import android.content.res.Resources
import androidx.annotation.DrawableRes
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/composable/LazyListState.kt b/app/src/main/java/org/xtimms/etsudoku/utils/composable/LazyListState.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/composable/LazyListState.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/composable/LazyListState.kt
index 811aa20..ca08f9c 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/composable/LazyListState.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/composable/LazyListState.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.composable
+package org.xtimms.etsudoku.utils.composable
import androidx.compose.foundation.lazy.LazyListState
import androidx.compose.foundation.lazy.grid.LazyGridState
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/composable/Modifier.kt b/app/src/main/java/org/xtimms/etsudoku/utils/composable/Modifier.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/composable/Modifier.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/composable/Modifier.kt
index a6de146..4116656 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/composable/Modifier.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/composable/Modifier.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.composable
+package org.xtimms.etsudoku.utils.composable
import androidx.compose.foundation.ExperimentalFoundationApi
import androidx.compose.foundation.combinedClickable
@@ -10,7 +10,7 @@ import androidx.compose.ui.Modifier
import androidx.compose.ui.composed
import androidx.compose.ui.draw.alpha
import androidx.compose.ui.draw.drawBehind
-import org.xtimms.tokusho.utils.material.SecondaryItemAlpha
+import org.xtimms.etsudoku.utils.material.SecondaryItemAlpha
fun Modifier.selectedBackground(isSelected: Boolean): Modifier = if (isSelected) {
composed {
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/iterator/CloseableIterator.kt b/app/src/main/java/org/xtimms/etsudoku/utils/iterator/CloseableIterator.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/utils/iterator/CloseableIterator.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/iterator/CloseableIterator.kt
index 8e3dec1..aa61ddb 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/iterator/CloseableIterator.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/iterator/CloseableIterator.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.iterator
+package org.xtimms.etsudoku.utils.iterator
import okhttp3.internal.closeQuietly
import okio.Closeable
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/iterator/MappingIterator.kt b/app/src/main/java/org/xtimms/etsudoku/utils/iterator/MappingIterator.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/utils/iterator/MappingIterator.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/iterator/MappingIterator.kt
index 98659db..98489e9 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/iterator/MappingIterator.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/iterator/MappingIterator.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.iterator
+package org.xtimms.etsudoku.utils.iterator
class MappingIterator(
private val upstream: Iterator,
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Bundle.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Bundle.kt
similarity index 97%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Bundle.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Bundle.kt
index 2a6031a..dd5f9ef 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Bundle.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Bundle.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import android.content.Intent
import android.os.Build
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Coil.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Coil.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Coil.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Coil.kt
index 59bda79..b0738e4 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Coil.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Coil.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.core.graphics.drawable.toBitmap
import coil.request.ErrorResult
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Collections.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Collections.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Collections.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Collections.kt
index 905b431..e0e00af 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Collections.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Collections.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.collection.ArrayMap
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Coroutines.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Coroutines.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Coroutines.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Coroutines.kt
index 0be528e..0194a84 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Coroutines.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Coroutines.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.ProcessLifecycleOwner
@@ -10,7 +10,7 @@ import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.NonCancellable
import kotlinx.coroutines.withContext
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.utils.RetainedLifecycleCoroutineScope
+import org.xtimms.etsudoku.utils.RetainedLifecycleCoroutineScope
suspend fun withNonCancellableContext(block: suspend CoroutineScope.() -> T) =
withContext(NonCancellable, block)
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Date.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Date.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Date.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Date.kt
index 70ab736..8a4de24 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Date.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Date.kt
@@ -1,7 +1,7 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import android.content.res.Resources
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
import java.text.DateFormat
import java.time.Instant
import java.time.LocalDate
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/EventFlow.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/EventFlow.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/EventFlow.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/EventFlow.kt
index 0b2cb30..c3fa8c9 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/EventFlow.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/EventFlow.kt
@@ -1,9 +1,9 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.annotation.AnyThread
import kotlinx.coroutines.flow.MutableStateFlow
import kotlinx.coroutines.flow.StateFlow
-import org.xtimms.tokusho.utils.Event
+import org.xtimms.etsudoku.utils.Event
@Suppress("FunctionName")
fun MutableEventFlow() = MutableStateFlow?>(null)
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Flow.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Flow.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Flow.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Flow.kt
index 254aad0..63b03f4 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Flow.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Flow.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.flow
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/FlowObserver.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/FlowObserver.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/FlowObserver.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/FlowObserver.kt
index 02e285f..f069bfe 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/FlowObserver.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/FlowObserver.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.lifecycle.Lifecycle
import androidx.lifecycle.LifecycleOwner
@@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.FlowCollector
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.utils.Event
+import org.xtimms.etsudoku.utils.Event
fun Flow.observe(owner: LifecycleOwner, collector: FlowCollector) {
val start = if (this is StateFlow) CoroutineStart.UNDISPATCHED else CoroutineStart.DEFAULT
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/IO.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/IO.kt
similarity index 82%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/IO.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/IO.kt
index 122e25a..8bf0913 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/IO.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/IO.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.Job
@@ -8,8 +8,8 @@ import kotlinx.coroutines.withContext
import okhttp3.ResponseBody
import okio.BufferedSink
import okio.Source
-import org.xtimms.tokusho.utils.CancellableSource
-import org.xtimms.tokusho.utils.ProgressResponseBody
+import org.xtimms.etsudoku.utils.CancellableSource
+import org.xtimms.etsudoku.utils.ProgressResponseBody
fun ResponseBody.withProgress(progressState: MutableStateFlow): ResponseBody {
return ProgressResponseBody(this, progressState)
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/Primitive.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Primitive.kt
similarity index 70%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/Primitive.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/Primitive.kt
index 1a60d97..ff1216f 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/Primitive.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/Primitive.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import androidx.compose.runtime.Composable
import androidx.compose.runtime.mutableIntStateOf
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
-import org.xtimms.tokusho.core.prefs.AppSettings.getBoolean
-import org.xtimms.tokusho.core.prefs.AppSettings.getInt
-import org.xtimms.tokusho.core.prefs.AppSettings.getString
+import org.xtimms.etsudoku.core.prefs.AppSettings.getBoolean
+import org.xtimms.etsudoku.core.prefs.AppSettings.getInt
+import org.xtimms.etsudoku.core.prefs.AppSettings.getString
inline val String.booleanState
@Composable get() =
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/String.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/String.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/String.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/String.kt
index e1f2001..c9817bc 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/String.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/String.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import android.net.Uri
import kotlinx.serialization.encodeToString
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/lang/WorkManager.kt b/app/src/main/java/org/xtimms/etsudoku/utils/lang/WorkManager.kt
similarity index 88%
rename from app/src/main/java/org/xtimms/tokusho/utils/lang/WorkManager.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/lang/WorkManager.kt
index 68f091a..08f5682 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/lang/WorkManager.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/lang/WorkManager.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.lang
+package org.xtimms.etsudoku.utils.lang
import android.annotation.SuppressLint
import androidx.work.WorkInfo
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/material/Color.kt b/app/src/main/java/org/xtimms/etsudoku/utils/material/Color.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/material/Color.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/material/Color.kt
index b092990..9b6f8ea 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/material/Color.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/material/Color.kt
@@ -1,12 +1,12 @@
-package org.xtimms.tokusho.utils.material
+package org.xtimms.etsudoku.utils.material
import androidx.compose.foundation.isSystemInDarkTheme
import androidx.compose.material3.MaterialTheme
import androidx.compose.runtime.Composable
import androidx.compose.ui.graphics.Color
import androidx.compose.ui.graphics.toArgb
-import org.xtimms.tokusho.ui.harmonize.blend.Blend
-import org.xtimms.tokusho.ui.harmonize.palettes.CorePalette
+import org.xtimms.etsudoku.ui.harmonize.blend.Blend
+import org.xtimms.etsudoku.ui.harmonize.palettes.CorePalette
import kotlin.math.ceil
import kotlin.math.floor
diff --git a/app/src/main/java/org/xtimms/etsudoku/utils/material/Constants.kt b/app/src/main/java/org/xtimms/etsudoku/utils/material/Constants.kt
new file mode 100644
index 0000000..b6fea3e
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/material/Constants.kt
@@ -0,0 +1,3 @@
+package org.xtimms.etsudoku.utils.material
+
+const val SecondaryItemAlpha = .78f
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/progress/ProgressDeferred.kt b/app/src/main/java/org/xtimms/etsudoku/utils/progress/ProgressDeferred.kt
similarity index 89%
rename from app/src/main/java/org/xtimms/tokusho/utils/progress/ProgressDeferred.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/progress/ProgressDeferred.kt
index c9e3f40..3986455 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/progress/ProgressDeferred.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/progress/ProgressDeferred.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.progress
+package org.xtimms.etsudoku.utils.progress
import kotlinx.coroutines.Deferred
import kotlinx.coroutines.flow.Flow
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Android.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Android.kt
similarity index 98%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Android.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Android.kt
index 1e0a434..522cb0a 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Android.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Android.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.Manifest
import android.app.ActivityManager
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Context.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Context.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Context.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Context.kt
index 6e0bf1e..a982547 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Context.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Context.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.app.ActivityManager
import android.content.Context
diff --git a/app/src/main/java/org/xtimms/etsudoku/utils/system/Cursor.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Cursor.kt
new file mode 100644
index 0000000..a06d6e9
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Cursor.kt
@@ -0,0 +1,39 @@
+package org.xtimms.etsudoku.utils.system
+
+import android.content.ContentValues
+import android.database.Cursor
+import org.json.JSONObject
+
+fun Cursor.toJson(): JSONObject {
+ val jo = JSONObject()
+ for (i in 0 until columnCount) {
+ val name = getColumnName(i)
+ when (getType(i)) {
+ Cursor.FIELD_TYPE_STRING -> jo.put(name, getString(i))
+ Cursor.FIELD_TYPE_FLOAT -> jo.put(name, getDouble(i))
+ Cursor.FIELD_TYPE_INTEGER -> jo.put(name, getLong(i))
+ Cursor.FIELD_TYPE_NULL -> jo.put(name, null)
+ Cursor.FIELD_TYPE_BLOB -> jo.put(name, getBlob(i))
+ }
+ }
+ return jo
+}
+
+fun JSONObject.toContentValues(): ContentValues {
+ val cv = ContentValues(length())
+ for (key in keys()) {
+ val name = key.escapeName()
+ when (val value = get(key)) {
+ JSONObject.NULL, "null", null -> cv.putNull(name)
+ is String -> cv.put(name, value)
+ is Float -> cv.put(name, value)
+ is Double -> cv.put(name, value)
+ is Int -> cv.put(name, value)
+ is Long -> cv.put(name, value)
+ else -> throw IllegalArgumentException("Value $value cannot be putted in ContentValues")
+ }
+ }
+ return cv
+}
+
+private fun String.escapeName() = "`$this`"
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/File.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/File.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/File.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/File.kt
index 478b97c..5538ace 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/File.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/File.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.content.Context
import android.net.Uri
@@ -7,8 +7,8 @@ import androidx.core.content.FileProvider
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.runInterruptible
import kotlinx.coroutines.withContext
-import org.xtimms.tokusho.BuildConfig
-import org.xtimms.tokusho.utils.FileSequence
+import org.xtimms.etsudoku.BuildConfig
+import org.xtimms.etsudoku.utils.FileSequence
import java.io.File
import java.io.FileFilter
import java.nio.file.attribute.BasicFileAttributes
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Http.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Http.kt
similarity index 58%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Http.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Http.kt
index 0d4bed6..9966a27 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Http.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Http.kt
@@ -1,12 +1,32 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import okhttp3.Cookie
import okhttp3.HttpUrl
+import okhttp3.MediaType.Companion.toMediaType
+import okhttp3.RequestBody.Companion.toRequestBody
import okhttp3.Response
import okhttp3.internal.closeQuietly
+import okio.IOException
+import org.json.JSONObject
import org.jsoup.HttpStatusException
import java.net.HttpURLConnection
+private val TYPE_JSON = "application/json".toMediaType()
+
+fun JSONObject.toRequestBody() = toString().toRequestBody(TYPE_JSON)
+
+fun Response.parseJsonOrNull(): JSONObject? {
+ return try {
+ when {
+ !isSuccessful -> throw IOException(body?.string())
+ code == HttpURLConnection.HTTP_NO_CONTENT -> null
+ else -> JSONObject(body?.string() ?: return null)
+ }
+ } finally {
+ closeQuietly()
+ }
+}
+
fun Cookie.newBuilder(): Cookie.Builder = Cookie.Builder().also { c ->
c.name(name)
c.value(value)
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Intent.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Intent.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Intent.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Intent.kt
index 2e84730..df2887e 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Intent.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Intent.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.content.ClipData
import android.content.Context
import android.content.Intent
import android.net.Uri
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
fun Uri.toShareIntent(context: Context, type: String = "image/*", message: String? = null): Intent {
val uri = this
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Locale.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Locale.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Locale.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Locale.kt
index 348548e..0fe19d5 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Locale.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Locale.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import androidx.appcompat.app.AppCompatDelegate
import androidx.compose.runtime.Composable
import androidx.compose.ui.res.stringResource
import androidx.core.os.LocaleListCompat
-import org.xtimms.tokusho.R
+import org.xtimms.etsudoku.R
import java.util.Locale
fun LocaleListCompat.toList(): List = List(size()) { i -> getOrThrow(i) }
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Network.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Network.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Network.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Network.kt
index 080283d..5fea0c5 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Network.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Network.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.content.Context
import android.net.ConnectivityManager
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/PaddingValues.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/PaddingValues.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/PaddingValues.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/PaddingValues.kt
index b66089d..82cc972 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/PaddingValues.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/PaddingValues.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import androidx.compose.foundation.layout.PaddingValues
import androidx.compose.foundation.layout.calculateEndPadding
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Preferences.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Preferences.kt
similarity index 92%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Preferences.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Preferences.kt
index 40e228b..865d4df 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Preferences.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Preferences.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.content.SharedPreferences
diff --git a/app/src/main/java/org/xtimms/etsudoku/utils/system/Throwable.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Throwable.kt
new file mode 100644
index 0000000..5a93a36
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Throwable.kt
@@ -0,0 +1,53 @@
+package org.xtimms.etsudoku.utils.system
+
+import android.content.ActivityNotFoundException
+import android.content.res.Resources
+import coil.network.HttpException
+import okio.FileNotFoundException
+import org.jsoup.HttpStatusException
+import org.koitharu.kotatsu.parsers.exception.AuthRequiredException
+import org.koitharu.kotatsu.parsers.exception.ContentUnavailableException
+import org.koitharu.kotatsu.parsers.exception.NotFoundException
+import org.koitharu.kotatsu.parsers.exception.ParseException
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.exceptions.CloudflareProtectedException
+import org.xtimms.etsudoku.core.exceptions.SyncApiException
+import org.xtimms.etsudoku.core.exceptions.TooManyRequestExceptions
+import org.xtimms.etsudoku.utils.lang.ifNullOrEmpty
+import java.net.SocketTimeoutException
+import java.net.UnknownHostException
+
+fun Throwable.getDisplayMessage(resources: Resources): String = when (this) {
+ is AuthRequiredException -> resources.getString(R.string.auth_required)
+ is CloudflareProtectedException -> resources.getString(R.string.captcha_required)
+ is ActivityNotFoundException,
+ is UnsupportedOperationException,
+ -> resources.getString(R.string.operation_not_supported)
+
+ is TooManyRequestExceptions -> resources.getString(R.string.too_many_requests_message)
+ is FileNotFoundException -> resources.getString(R.string.file_not_found)
+ is AccessDeniedException -> resources.getString(R.string.no_access_to_file)
+ is SyncApiException,
+ is ContentUnavailableException,
+ -> message
+
+ is ParseException -> shortMessage
+ is UnknownHostException,
+ is SocketTimeoutException,
+ -> resources.getString(R.string.network_error)
+
+ is NotFoundException -> resources.getString(R.string.not_found_404)
+
+ is HttpException -> getHttpDisplayMessage(response.code, resources)
+ is HttpStatusException -> getHttpDisplayMessage(statusCode, resources)
+
+ else -> localizedMessage
+}.ifNullOrEmpty {
+ resources.getString(R.string.error_occured)
+}
+
+private fun getHttpDisplayMessage(statusCode: Int, resources: Resources): String? = when (statusCode) {
+ 404 -> resources.getString(R.string.not_found_404)
+ in 500..599 -> resources.getString(R.string.server_error, statusCode)
+ else -> null
+}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Toast.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Toast.kt
similarity index 83%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Toast.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Toast.kt
index cbf6eac..3e80b10 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Toast.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Toast.kt
@@ -1,11 +1,11 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.content.Context
import android.widget.Toast
import androidx.annotation.StringRes
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
fun Context.toast(message: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/system/Uri.kt b/app/src/main/java/org/xtimms/etsudoku/utils/system/Uri.kt
similarity index 95%
rename from app/src/main/java/org/xtimms/tokusho/utils/system/Uri.kt
rename to app/src/main/java/org/xtimms/etsudoku/utils/system/Uri.kt
index 5d9040d..f2f51af 100644
--- a/app/src/main/java/org/xtimms/tokusho/utils/system/Uri.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/utils/system/Uri.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.utils.system
+package org.xtimms.etsudoku.utils.system
import android.net.Uri
import androidx.core.net.toFile
diff --git a/app/src/main/java/org/xtimms/tokusho/work/PeriodicWorkScheduler.kt b/app/src/main/java/org/xtimms/etsudoku/work/PeriodicWorkScheduler.kt
similarity index 79%
rename from app/src/main/java/org/xtimms/tokusho/work/PeriodicWorkScheduler.kt
rename to app/src/main/java/org/xtimms/etsudoku/work/PeriodicWorkScheduler.kt
index fc7711b..73f5083 100644
--- a/app/src/main/java/org/xtimms/tokusho/work/PeriodicWorkScheduler.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/work/PeriodicWorkScheduler.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.work
+package org.xtimms.etsudoku.work
interface PeriodicWorkScheduler {
diff --git a/app/src/main/java/org/xtimms/tokusho/work/WorkScheduleManager.kt b/app/src/main/java/org/xtimms/etsudoku/work/WorkScheduleManager.kt
similarity index 84%
rename from app/src/main/java/org/xtimms/tokusho/work/WorkScheduleManager.kt
rename to app/src/main/java/org/xtimms/etsudoku/work/WorkScheduleManager.kt
index e0979b4..ace6de1 100644
--- a/app/src/main/java/org/xtimms/tokusho/work/WorkScheduleManager.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/work/WorkScheduleManager.kt
@@ -1,10 +1,10 @@
-package org.xtimms.tokusho.work
+package org.xtimms.etsudoku.work
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
-import org.xtimms.tokusho.utils.lang.processLifecycleScope
-import org.xtimms.tokusho.work.suggestions.SuggestionsWorker
-import org.xtimms.tokusho.work.tracker.TrackWorker
+import org.xtimms.etsudoku.utils.lang.processLifecycleScope
+import org.xtimms.etsudoku.work.suggestions.SuggestionsWorker
+import org.xtimms.etsudoku.work.tracker.TrackWorker
import javax.inject.Inject
import javax.inject.Singleton
diff --git a/app/src/main/java/org/xtimms/tokusho/work/suggestions/SuggestionsWorker.kt b/app/src/main/java/org/xtimms/etsudoku/work/suggestions/SuggestionsWorker.kt
similarity index 93%
rename from app/src/main/java/org/xtimms/tokusho/work/suggestions/SuggestionsWorker.kt
rename to app/src/main/java/org/xtimms/etsudoku/work/suggestions/SuggestionsWorker.kt
index ab86cca..21a7935 100644
--- a/app/src/main/java/org/xtimms/tokusho/work/suggestions/SuggestionsWorker.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/work/suggestions/SuggestionsWorker.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.work.suggestions
+package org.xtimms.etsudoku.work.suggestions
import android.annotation.SuppressLint
import android.content.Context
@@ -47,24 +47,24 @@ import org.koitharu.kotatsu.parsers.model.MangaTag
import org.koitharu.kotatsu.parsers.model.SortOrder
import org.koitharu.kotatsu.parsers.util.almostEquals
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.model.MangaSuggestion
-import org.xtimms.tokusho.core.model.TagsBlacklist
-import org.xtimms.tokusho.core.model.distinctById
-import org.xtimms.tokusho.core.parser.MangaRepository
-import org.xtimms.tokusho.data.repository.FavouritesRepository
-import org.xtimms.tokusho.data.repository.HistoryRepository
-import org.xtimms.tokusho.data.repository.MangaSourcesRepository
-import org.xtimms.tokusho.data.repository.SuggestionRepository
-import org.xtimms.tokusho.utils.lang.asArrayList
-import org.xtimms.tokusho.utils.lang.awaitUniqueWorkInfoByName
-import org.xtimms.tokusho.utils.lang.flatten
-import org.xtimms.tokusho.utils.lang.sanitize
-import org.xtimms.tokusho.utils.lang.takeMostFrequent
-import org.xtimms.tokusho.utils.lang.toBitmapOrNull
-import org.xtimms.tokusho.utils.system.checkNotificationPermission
-import org.xtimms.tokusho.utils.system.trySetForeground
-import org.xtimms.tokusho.work.PeriodicWorkScheduler
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.model.MangaSuggestion
+import org.xtimms.etsudoku.core.model.TagsBlacklist
+import org.xtimms.etsudoku.core.model.distinctById
+import org.xtimms.etsudoku.core.parser.MangaRepository
+import org.xtimms.etsudoku.data.repository.FavouritesRepository
+import org.xtimms.etsudoku.data.repository.HistoryRepository
+import org.xtimms.etsudoku.data.repository.MangaSourcesRepository
+import org.xtimms.etsudoku.data.repository.SuggestionRepository
+import org.xtimms.etsudoku.utils.lang.asArrayList
+import org.xtimms.etsudoku.utils.lang.awaitUniqueWorkInfoByName
+import org.xtimms.etsudoku.utils.lang.flatten
+import org.xtimms.etsudoku.utils.lang.sanitize
+import org.xtimms.etsudoku.utils.lang.takeMostFrequent
+import org.xtimms.etsudoku.utils.lang.toBitmapOrNull
+import org.xtimms.etsudoku.utils.system.checkNotificationPermission
+import org.xtimms.etsudoku.utils.system.trySetForeground
+import org.xtimms.etsudoku.work.PeriodicWorkScheduler
import java.util.concurrent.TimeUnit
import javax.inject.Inject
import kotlin.math.pow
diff --git a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackWorker.kt b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackWorker.kt
similarity index 94%
rename from app/src/main/java/org/xtimms/tokusho/work/tracker/TrackWorker.kt
rename to app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackWorker.kt
index 5b76060..b626976 100644
--- a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackWorker.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackWorker.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.work.tracker
+package org.xtimms.etsudoku.work.tracker
import android.content.Context
import android.content.pm.ServiceInfo
@@ -46,19 +46,19 @@ import org.koitharu.kotatsu.parsers.model.Manga
import org.koitharu.kotatsu.parsers.model.MangaChapter
import org.koitharu.kotatsu.parsers.util.mapToSet
import org.koitharu.kotatsu.parsers.util.runCatchingCancellable
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.exceptions.CloudflareProtectedException
-import org.xtimms.tokusho.core.logs.FileLogger
-import org.xtimms.tokusho.core.logs.TrackerLogger
-import org.xtimms.tokusho.core.prefs.AppSettings
-import org.xtimms.tokusho.core.tracker.Tracker
-import org.xtimms.tokusho.core.tracker.model.MangaUpdates
-import org.xtimms.tokusho.utils.lang.awaitUniqueWorkInfoByName
-import org.xtimms.tokusho.utils.lang.onEachIndexed
-import org.xtimms.tokusho.utils.lang.toBitmapOrNull
-import org.xtimms.tokusho.utils.system.checkNotificationPermission
-import org.xtimms.tokusho.utils.system.trySetForeground
-import org.xtimms.tokusho.work.PeriodicWorkScheduler
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.exceptions.CloudflareProtectedException
+import org.xtimms.etsudoku.core.logs.FileLogger
+import org.xtimms.etsudoku.core.logs.TrackerLogger
+import org.xtimms.etsudoku.core.prefs.AppSettings
+import org.xtimms.etsudoku.core.tracker.Tracker
+import org.xtimms.etsudoku.core.tracker.model.MangaUpdates
+import org.xtimms.etsudoku.utils.lang.awaitUniqueWorkInfoByName
+import org.xtimms.etsudoku.utils.lang.onEachIndexed
+import org.xtimms.etsudoku.utils.lang.toBitmapOrNull
+import org.xtimms.etsudoku.utils.system.checkNotificationPermission
+import org.xtimms.etsudoku.utils.system.trySetForeground
+import org.xtimms.etsudoku.work.PeriodicWorkScheduler
import java.util.concurrent.TimeUnit
import javax.inject.Inject
@@ -211,7 +211,7 @@ class TrackWorker @AssistedInject constructor(
.build(),
).toBitmapOrNull(),
)
- setSmallIcon(R.drawable.ic_stat_tokusho)
+ setSmallIcon(R.drawable.ic_stat_etsudoku)
val style = NotificationCompat.InboxStyle(this)
for (chapter in newChapters) {
style.addLine(chapter.name)
diff --git a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackerNotificationChannels.kt b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackerNotificationChannels.kt
similarity index 96%
rename from app/src/main/java/org/xtimms/tokusho/work/tracker/TrackerNotificationChannels.kt
rename to app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackerNotificationChannels.kt
index 99f1c30..218b2d8 100644
--- a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackerNotificationChannels.kt
+++ b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackerNotificationChannels.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho.work.tracker
+package org.xtimms.etsudoku.work.tracker
import android.app.NotificationManager
import android.content.Context
@@ -6,8 +6,8 @@ import androidx.core.app.NotificationChannelCompat
import androidx.core.app.NotificationChannelGroupCompat
import androidx.core.app.NotificationManagerCompat
import dagger.hilt.android.qualifiers.ApplicationContext
-import org.xtimms.tokusho.R
-import org.xtimms.tokusho.core.model.FavouriteCategory
+import org.xtimms.etsudoku.R
+import org.xtimms.etsudoku.core.model.FavouriteCategory
import javax.inject.Inject
class TrackerNotificationChannels @Inject constructor(
diff --git a/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackingItem.kt b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackingItem.kt
new file mode 100644
index 0000000..6b9c4fe
--- /dev/null
+++ b/app/src/main/java/org/xtimms/etsudoku/work/tracker/TrackingItem.kt
@@ -0,0 +1,8 @@
+package org.xtimms.etsudoku.work.tracker
+
+import org.xtimms.etsudoku.core.tracker.model.MangaTracking
+
+data class TrackingItem(
+ val tracking: MangaTracking,
+ val channelId: String?,
+)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/core/components/ReadButton.kt b/app/src/main/java/org/xtimms/tokusho/core/components/ReadButton.kt
deleted file mode 100644
index 4864b26..0000000
--- a/app/src/main/java/org/xtimms/tokusho/core/components/ReadButton.kt
+++ /dev/null
@@ -1,193 +0,0 @@
-package org.xtimms.tokusho.core.components
-
-import android.content.res.Configuration.UI_MODE_NIGHT_YES
-import androidx.compose.animation.core.Animatable
-import androidx.compose.animation.core.FloatTweenSpec
-import androidx.compose.animation.core.LinearEasing
-import androidx.compose.animation.core.TweenSpec
-import androidx.compose.animation.core.animateFloatAsState
-import androidx.compose.foundation.layout.Arrangement
-import androidx.compose.foundation.layout.Box
-import androidx.compose.foundation.layout.Column
-import androidx.compose.foundation.layout.Row
-import androidx.compose.foundation.layout.RowScope
-import androidx.compose.foundation.layout.Spacer
-import androidx.compose.foundation.layout.fillMaxHeight
-import androidx.compose.foundation.layout.fillMaxSize
-import androidx.compose.foundation.layout.fillMaxWidth
-import androidx.compose.foundation.layout.height
-import androidx.compose.foundation.shape.CircleShape
-import androidx.compose.material3.Card
-import androidx.compose.material3.CardDefaults
-import androidx.compose.material3.MaterialTheme
-import androidx.compose.material3.Text
-import androidx.compose.runtime.Composable
-import androidx.compose.runtime.LaunchedEffect
-import androidx.compose.runtime.remember
-import androidx.compose.runtime.rememberCoroutineScope
-import androidx.compose.ui.Alignment
-import androidx.compose.ui.Modifier
-import androidx.compose.ui.draw.drawWithContent
-import androidx.compose.ui.geometry.Offset
-import androidx.compose.ui.geometry.Size
-import androidx.compose.ui.graphics.BlendMode
-import androidx.compose.ui.graphics.Brush
-import androidx.compose.ui.graphics.Color
-import androidx.compose.ui.graphics.drawscope.ContentDrawScope
-import androidx.compose.ui.graphics.nativeCanvas
-import androidx.compose.ui.tooling.preview.Preview
-import androidx.compose.ui.unit.dp
-import kotlinx.coroutines.launch
-import org.xtimms.tokusho.ui.theme.TokushoTheme
-import org.xtimms.tokusho.utils.material.combineColors
-import org.xtimms.tokusho.utils.material.harmonize
-import org.xtimms.tokusho.utils.material.toPalette
-
-@Composable
-fun RowScope.ReadButton() {
-
- val shift = remember { Animatable(0f) }
- val coroutineScope = rememberCoroutineScope()
-
- LaunchedEffect(Unit) {
- fun anim() {
- coroutineScope.launch {
- shift.animateTo(
- 1f,
- animationSpec = FloatTweenSpec(4000, 0, LinearEasing)
- )
- shift.snapTo(0f)
- anim()
- }
- }
-
- anim()
- }
- val percentWithNewSpentAnimated = animateFloatAsState(
- label = "percentWithNewSpentAnimated",
- targetValue = 0.3f,
- animationSpec = TweenSpec(300),
- ).value
-
- Card(
- modifier = Modifier
- .weight(1F)
- .height(54.dp),
- shape = CircleShape,
- colors = CardDefaults.cardColors(
- containerColor = MaterialTheme.colorScheme.primaryContainer,
- contentColor = MaterialTheme.colorScheme.onPrimaryContainer,
- ),
- onClick = {
- // appViewModel.openSheet(PathState(WALLET_SHEET))
- }
- ) {
- Box(
- modifier = Modifier.fillMaxHeight(),
- contentAlignment = Alignment.CenterEnd,
- ) {
- BackgroundProgress(MaterialTheme.colorScheme.primary)
- Row(
- modifier = Modifier
- .fillMaxSize()
- .drawWithLayer {
- drawContent()
- val leftOffset = size.width - 20.dp.toPx()
- drawRect(
- topLeft = Offset(leftOffset, 0f),
- size = Size(
- 20.dp.toPx(),
- size.height,
- ),
- blendMode = BlendMode.SrcIn,
- brush = Brush.horizontalGradient(
- colors = listOf(
- Color.Black,
- Color.Black.copy(alpha = 0f),
- ),
- startX = leftOffset,
- endX = leftOffset + 14.dp.toPx()
- )
- )
- },
- verticalAlignment = Alignment.CenterVertically,
- horizontalArrangement = Arrangement.Start,
- ) {
- Spacer(modifier = Modifier.weight(1f))
- Column(
- horizontalAlignment = Alignment.CenterHorizontally
- ) {
- Text(text = "Continue reading", color = MaterialTheme.colorScheme.onPrimaryContainer)
- Text(text = "Chap. 123 - Test", style = MaterialTheme.typography.labelMedium) // TODO
- }
- Spacer(modifier = Modifier.weight(1f))
- }
- }
- }
-}
-
-fun ContentDrawScope.drawWithLayer(block: ContentDrawScope.() -> Unit) {
- with(drawContext.canvas.nativeCanvas) {
- val checkPoint = saveLayer(null, null)
- block()
- restoreToCount(checkPoint)
- }
-}
-
-fun Modifier.drawWithLayer(block: ContentDrawScope.() -> Unit) = this.then(
- Modifier.drawWithContent {
- drawWithLayer {
- block()
- }
- }
-)
-
-@Preview(name = "The budget is almost completely spent")
-@Composable
-private fun Preview() {
- TokushoTheme {
- Row {
- ReadButton()
- }
- }
-}
-
-@Preview(name = "Budget half spent")
-@Composable
-private fun PreviewHalf() {
- TokushoTheme {
- Row {
- ReadButton()
- }
- }
-}
-
-@Preview(name = "Almost no budget")
-@Composable
-private fun PreviewFull() {
- TokushoTheme {
- Row {
- ReadButton()
- }
- }
-}
-
-@Preview(name = "Overspending budget")
-@Composable
-private fun PreviewOverspending() {
- TokushoTheme {
- Row {
- ReadButton()
- }
- }
-}
-
-@Preview(name = "Night mode", uiMode = UI_MODE_NIGHT_YES)
-@Composable
-private fun PreviewNightMode() {
- TokushoTheme {
- Row {
- ReadButton()
- }
- }
-}
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsEvent.kt b/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsEvent.kt
deleted file mode 100644
index b3b460f..0000000
--- a/app/src/main/java/org/xtimms/tokusho/sections/details/DetailsEvent.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.xtimms.tokusho.sections.details
-
-import org.xtimms.tokusho.core.base.event.UiEvent
-
-interface DetailsEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreEvent.kt b/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreEvent.kt
deleted file mode 100644
index 28e5265..0000000
--- a/app/src/main/java/org/xtimms/tokusho/sections/explore/ExploreEvent.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.xtimms.tokusho.sections.explore
-
-import org.xtimms.tokusho.core.base.event.UiEvent
-
-interface ExploreEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListEvent.kt b/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListEvent.kt
deleted file mode 100644
index a3ee9ed..0000000
--- a/app/src/main/java/org/xtimms/tokusho/sections/list/MangaListEvent.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.xtimms.tokusho.sections.list
-
-import org.xtimms.tokusho.core.base.event.PagedUiEvent
-
-interface MangaListEvent : PagedUiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderContent.kt b/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderContent.kt
deleted file mode 100644
index 0c2a5a3..0000000
--- a/app/src/main/java/org/xtimms/tokusho/sections/reader/ReaderContent.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.xtimms.tokusho.sections.reader
-
-import org.xtimms.tokusho.sections.reader.pager.ReaderPage
-
-data class ReaderContent(
- val pages: List,
- val state: ReaderState?
-)
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageEvent.kt b/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageEvent.kt
deleted file mode 100644
index f3d0235..0000000
--- a/app/src/main/java/org/xtimms/tokusho/sections/settings/storage/StorageEvent.kt
+++ /dev/null
@@ -1,5 +0,0 @@
-package org.xtimms.tokusho.sections.settings.storage
-
-import org.xtimms.tokusho.core.base.event.UiEvent
-
-interface StorageEvent : UiEvent
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/utils/material/Constants.kt b/app/src/main/java/org/xtimms/tokusho/utils/material/Constants.kt
deleted file mode 100644
index 07dfe42..0000000
--- a/app/src/main/java/org/xtimms/tokusho/utils/material/Constants.kt
+++ /dev/null
@@ -1,3 +0,0 @@
-package org.xtimms.tokusho.utils.material
-
-const val SecondaryItemAlpha = .78f
\ No newline at end of file
diff --git a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackingItem.kt b/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackingItem.kt
deleted file mode 100644
index a72f353..0000000
--- a/app/src/main/java/org/xtimms/tokusho/work/tracker/TrackingItem.kt
+++ /dev/null
@@ -1,8 +0,0 @@
-package org.xtimms.tokusho.work.tracker
-
-import org.xtimms.tokusho.core.tracker.model.MangaTracking
-
-data class TrackingItem(
- val tracking: MangaTracking,
- val channelId: String?,
-)
\ No newline at end of file
diff --git a/app/src/main/res/drawable-hdpi/ic_stat_etsudoku.png b/app/src/main/res/drawable-hdpi/ic_stat_etsudoku.png
new file mode 100644
index 0000000..a7e0237
Binary files /dev/null and b/app/src/main/res/drawable-hdpi/ic_stat_etsudoku.png differ
diff --git a/app/src/main/res/drawable-hdpi/ic_stat_tokusho.png b/app/src/main/res/drawable-hdpi/ic_stat_tokusho.png
deleted file mode 100644
index 935f746..0000000
Binary files a/app/src/main/res/drawable-hdpi/ic_stat_tokusho.png and /dev/null differ
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_etsudoku.png b/app/src/main/res/drawable-mdpi/ic_stat_etsudoku.png
new file mode 100644
index 0000000..d893eb0
Binary files /dev/null and b/app/src/main/res/drawable-mdpi/ic_stat_etsudoku.png differ
diff --git a/app/src/main/res/drawable-mdpi/ic_stat_tokusho.png b/app/src/main/res/drawable-mdpi/ic_stat_tokusho.png
deleted file mode 100644
index c085836..0000000
Binary files a/app/src/main/res/drawable-mdpi/ic_stat_tokusho.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_etsudoku.png b/app/src/main/res/drawable-xhdpi/ic_stat_etsudoku.png
new file mode 100644
index 0000000..2ae44bb
Binary files /dev/null and b/app/src/main/res/drawable-xhdpi/ic_stat_etsudoku.png differ
diff --git a/app/src/main/res/drawable-xhdpi/ic_stat_tokusho.png b/app/src/main/res/drawable-xhdpi/ic_stat_tokusho.png
deleted file mode 100644
index 0b83b9a..0000000
Binary files a/app/src/main/res/drawable-xhdpi/ic_stat_tokusho.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_etsudoku.png b/app/src/main/res/drawable-xxhdpi/ic_stat_etsudoku.png
new file mode 100644
index 0000000..67bd586
Binary files /dev/null and b/app/src/main/res/drawable-xxhdpi/ic_stat_etsudoku.png differ
diff --git a/app/src/main/res/drawable-xxhdpi/ic_stat_tokusho.png b/app/src/main/res/drawable-xxhdpi/ic_stat_tokusho.png
deleted file mode 100644
index dcc3f23..0000000
Binary files a/app/src/main/res/drawable-xxhdpi/ic_stat_tokusho.png and /dev/null differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_stat_etsudoku.png b/app/src/main/res/drawable-xxxhdpi/ic_stat_etsudoku.png
new file mode 100644
index 0000000..043db22
Binary files /dev/null and b/app/src/main/res/drawable-xxxhdpi/ic_stat_etsudoku.png differ
diff --git a/app/src/main/res/drawable-xxxhdpi/ic_stat_tokusho.png b/app/src/main/res/drawable-xxxhdpi/ic_stat_tokusho.png
deleted file mode 100644
index 7e10f32..0000000
Binary files a/app/src/main/res/drawable-xxxhdpi/ic_stat_tokusho.png and /dev/null differ
diff --git a/app/src/main/res/drawable/outline_cloud_sync_24.xml b/app/src/main/res/drawable/outline_cloud_sync_24.xml
new file mode 100644
index 0000000..1ba45a8
--- /dev/null
+++ b/app/src/main/res/drawable/outline_cloud_sync_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/outline_expand_more_24.xml b/app/src/main/res/drawable/outline_expand_more_24.xml
new file mode 100644
index 0000000..48368f3
--- /dev/null
+++ b/app/src/main/res/drawable/outline_expand_more_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/drawable/outline_settings_24.xml b/app/src/main/res/drawable/outline_settings_24.xml
new file mode 100644
index 0000000..c624d19
--- /dev/null
+++ b/app/src/main/res/drawable/outline_settings_24.xml
@@ -0,0 +1,5 @@
+
+
+
diff --git a/app/src/main/res/layout/activity_sync_auth.xml b/app/src/main/res/layout/activity_sync_auth.xml
new file mode 100644
index 0000000..f102cdd
--- /dev/null
+++ b/app/src/main/res/layout/activity_sync_auth.xml
@@ -0,0 +1,184 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/layout/preference_dialog_autocomplete_text_view.xml b/app/src/main/res/layout/preference_dialog_autocomplete_text_view.xml
new file mode 100644
index 0000000..59e326e
--- /dev/null
+++ b/app/src/main/res/layout/preference_dialog_autocomplete_text_view.xml
@@ -0,0 +1,59 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.png b/app/src/main/res/mipmap-hdpi/ic_launcher.png
index 742eafd..6e2a2b8 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher.png and b/app/src/main/res/mipmap-hdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_background.png b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png
index 1966948..0e24e2c 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_background.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_background.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png
index dd935c8..5da522d 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png
index dd935c8..80e38e2 100644
Binary files a/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png and b/app/src/main/res/mipmap-hdpi/ic_launcher_monochrome.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.png b/app/src/main/res/mipmap-mdpi/ic_launcher.png
index 175567d..736f1f8 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher.png and b/app/src/main/res/mipmap-mdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_background.png b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png
index 75025cf..e3be312 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_background.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_background.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png
index 6d8ded0..40982c6 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png
index 6d8ded0..c8aa409 100644
Binary files a/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png and b/app/src/main/res/mipmap-mdpi/ic_launcher_monochrome.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.png b/app/src/main/res/mipmap-xhdpi/ic_launcher.png
index d7bcc3c..669ec92 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png
index 9784f16..c28aacf 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_background.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png
index ba25b7f..6ba4097 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png
index ba25b7f..0915b5d 100644
Binary files a/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png and b/app/src/main/res/mipmap-xhdpi/ic_launcher_monochrome.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
index d984eea..45b13bd 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png
index 04ef206..964f314 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_background.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png
index 60e8f0f..3741e3c 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png
index 60e8f0f..94a7e55 100644
Binary files a/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_monochrome.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
index f9c4173..f53886c 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png
index 66a5487..5967d81 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_background.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png
index d82150d..2ad258e 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_foreground.png differ
diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png
index d82150d..7e1bbce 100644
Binary files a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_monochrome.png differ
diff --git a/app/src/main/res/values-ru/strings.xml b/app/src/main/res/values-ru/strings.xml
index 01f5bc0..7ecc335 100644
--- a/app/src/main/res/values-ru/strings.xml
+++ b/app/src/main/res/values-ru/strings.xml
@@ -57,7 +57,7 @@
Создать файл резервной копии
Резервная копия сохранена
Поддержка бэкапов Kotatsu
- Tokusho также может обрабатывать резервные копии Kotatsu
+ Etsudoku также может обрабатывать резервные копии Kotatsu
Лицензии с открытым исходным кодом
Нет источников манги
Включите источники манги, чтобы читать мангу онлайн
diff --git a/app/src/main/res/values-v31/themes.xml b/app/src/main/res/values-v31/themes.xml
index fd1786e..65aabeb 100644
--- a/app/src/main/res/values-v31/themes.xml
+++ b/app/src/main/res/values-v31/themes.xml
@@ -1,10 +1,10 @@
-
+
-
\ No newline at end of file
diff --git a/app/src/main/res/values/constants.xml b/app/src/main/res/values/constants.xml
new file mode 100644
index 0000000..fea7ef6
--- /dev/null
+++ b/app/src/main/res/values/constants.xml
@@ -0,0 +1,11 @@
+
+
+ app.etsudoku.sync
+ org.xtimms.etsudoku.history
+ org.xtimms.etsudoku.favourites
+ sync.kotatsu.app
+
+ - @string/sync_host_default
+ - 86.57.183.214:8081
+
+
\ No newline at end of file
diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml
new file mode 100644
index 0000000..351a487
--- /dev/null
+++ b/app/src/main/res/values/dimens.xml
@@ -0,0 +1,4 @@
+
+
+ 16dp
+
\ No newline at end of file
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 3a1a478..86f899d 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -1,5 +1,5 @@
- Tokusho
+ Etsudoku
Settings
Feed
Search
@@ -167,7 +167,7 @@
Create backup file
Backup saved
Supports Kotatsu backups
- Tokusho can handle Kotatsu backups as well
+ Etsudoku can handle Kotatsu backups as well
Open source licenses
No manga sources
Enable manga sources to read manga online
@@ -213,7 +213,7 @@
This month
Long ago
Are you sure you want to remove %s from your reading history?
- Continue
+ Continue reading
Updating suggestions
Images optimization proxy
Use the wsrv.nl service to reduce traffic usage and speed up image loading if possible
@@ -226,4 +226,31 @@
Also clear information about new chapters
Clear all update history permanently?
No recent updates
+ Sync your data
+ Enter your email to continue
+ You can sign in into an existing account or create a new one
+ Next
+ Enter password
+ Back
+ Done
+ Canceled
+ Error
+ Close
+ Account already exists
+ Sign in to view this content
+ %s requires a captcha to be resolved to work properly
+ Too many requests. Try again later
+ File not found
+ You have no access to this file or directory
+ Network error
+ Content not found or removed
+ Server side error (%1$d). Please try again later
+ Server address
+ You can use a self-hosted synchronization server or a default one. Don\\\'t change this if you\\\'re not sure what you\\\'re doing.
+ Invalid domain
+ Loading…
+ Chapter %1$d of %2$d
+ No chapters
+ The reading time could not be calculated
+ There are no further chapters
\ No newline at end of file
diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml
index ef81eb2..14aa48a 100644
--- a/app/src/main/res/values/themes.xml
+++ b/app/src/main/res/values/themes.xml
@@ -1,10 +1,10 @@
-
+
-
\ No newline at end of file
diff --git a/app/src/test/java/org/xtimms/tokusho/ExampleUnitTest.kt b/app/src/test/java/org/xtimms/etsudoku/ExampleUnitTest.kt
similarity index 91%
rename from app/src/test/java/org/xtimms/tokusho/ExampleUnitTest.kt
rename to app/src/test/java/org/xtimms/etsudoku/ExampleUnitTest.kt
index 79eb52b..4182dc2 100644
--- a/app/src/test/java/org/xtimms/tokusho/ExampleUnitTest.kt
+++ b/app/src/test/java/org/xtimms/etsudoku/ExampleUnitTest.kt
@@ -1,4 +1,4 @@
-package org.xtimms.tokusho
+package org.xtimms.etsudoku
import org.junit.Test
diff --git a/app/src/test/java/org/xtimms/tokusho/data/repository/backup/JsonSerializerTest.kt b/app/src/test/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializerTest.kt
similarity index 88%
rename from app/src/test/java/org/xtimms/tokusho/data/repository/backup/JsonSerializerTest.kt
rename to app/src/test/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializerTest.kt
index 3101589..d5e08ce 100644
--- a/app/src/test/java/org/xtimms/tokusho/data/repository/backup/JsonSerializerTest.kt
+++ b/app/src/test/java/org/xtimms/etsudoku/data/repository/backup/JsonSerializerTest.kt
@@ -1,15 +1,15 @@
-package org.xtimms.tokusho.data.repository.backup
+package org.xtimms.etsudoku.data.repository.backup
import org.junit.Assert.assertEquals
import org.junit.Test
import org.koitharu.kotatsu.parsers.model.MangaSource
import org.koitharu.kotatsu.parsers.model.MangaState
import org.koitharu.kotatsu.parsers.model.SortOrder
-import org.xtimms.tokusho.core.database.entity.FavouriteCategoryEntity
-import org.xtimms.tokusho.core.database.entity.FavouriteEntity
-import org.xtimms.tokusho.core.database.entity.HistoryEntity
-import org.xtimms.tokusho.core.database.entity.MangaEntity
-import org.xtimms.tokusho.core.database.entity.TagEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteCategoryEntity
+import org.xtimms.etsudoku.core.database.entity.FavouriteEntity
+import org.xtimms.etsudoku.core.database.entity.HistoryEntity
+import org.xtimms.etsudoku.core.database.entity.MangaEntity
+import org.xtimms.etsudoku.core.database.entity.TagEntity
import java.util.concurrent.TimeUnit
class JsonSerializerTest {
diff --git a/settings.gradle.kts b/settings.gradle.kts
index a294dc1..0cb9f24 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -14,6 +14,6 @@ dependencyResolutionManagement {
}
}
-rootProject.name = "Tokusho"
+rootProject.name = "Etsudoku"
include(":app")
\ No newline at end of file