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 @@ + + + + + + + + + + + + + + + +