diff --git a/app/build.gradle.kts b/app/build.gradle.kts index a8ce809b..3b7d5ee5 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -149,14 +149,6 @@ dependencies { // Coil for loading images implementation("io.coil-kt:coil-compose:2.7.0") - // Retrofit - implementation("com.squareup.retrofit2:retrofit:2.11.0") - implementation("com.squareup.retrofit2:converter-moshi:2.11.0") - implementation("com.squareup.moshi:moshi:1.15.2") - implementation("com.squareup.moshi:moshi-kotlin:1.15.2") - implementation("com.squareup.okhttp3:okhttp:4.12.0") - implementation("com.squareup.okhttp3:logging-interceptor:4.12.0") - // Open source libraries implementation("com.mikepenz:aboutlibraries-core:11.4.0") implementation("com.mikepenz:aboutlibraries-compose-m3:11.4.0") diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 9bb41735..a47bcc8d 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,10 +7,6 @@ android:name="android.permission.MANAGE_EXTERNAL_STORAGE" tools:ignore="ScopedStorage" /> - - - - + tools:ignore="DataExtractionRules" + tools:targetApi="tiramisu"> + android:theme="@style/Splash" + android:windowSoftInputMode="adjustResize"> @@ -52,7 +48,5 @@ android:name="autoStoreLocales" android:value="true" /> - - \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/Application.kt b/app/src/main/java/ua/acclorite/book_story/Application.kt index 7b1e1a04..5869bf66 100644 --- a/app/src/main/java/ua/acclorite/book_story/Application.kt +++ b/app/src/main/java/ua/acclorite/book_story/Application.kt @@ -7,35 +7,7 @@ package ua.acclorite.book_story import android.app.Application -import android.app.NotificationChannel -import android.app.NotificationManager import dagger.hilt.android.HiltAndroidApp -import ua.acclorite.book_story.data.local.notification.UpdatesNotificationService @HiltAndroidApp -class Application : Application() { - - override fun onCreate() { - super.onCreate() - createNotificationChannel() - } - - private fun createNotificationChannel() { - val channel = NotificationChannel( - UpdatesNotificationService.CHANNEL_ID, - getString(R.string.updates_notification_channel), - NotificationManager.IMPORTANCE_HIGH - ) - - val notificationManager = getSystemService( - NOTIFICATION_SERVICE - ) as NotificationManager - notificationManager.createNotificationChannel(channel) - } -} - - - - - - +class Application : Application() \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/di/AppModule.kt b/app/src/main/java/ua/acclorite/book_story/data/di/AppModule.kt index 80aa79e5..a60e5f04 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/di/AppModule.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/di/AppModule.kt @@ -8,8 +8,6 @@ package ua.acclorite.book_story.data.di import android.app.Application import androidx.room.Room -import com.squareup.moshi.Moshi -import com.squareup.moshi.kotlin.reflect.KotlinJsonAdapterFactory import dagger.Module import dagger.Provides import dagger.hilt.InstallIn @@ -21,31 +19,14 @@ import org.commonmark.node.HtmlBlock import org.commonmark.node.IndentedCodeBlock import org.commonmark.node.ThematicBreak import org.commonmark.parser.Parser -import retrofit2.Retrofit -import retrofit2.converter.moshi.MoshiConverterFactory import ua.acclorite.book_story.data.local.room.BookDao import ua.acclorite.book_story.data.local.room.BookDatabase import ua.acclorite.book_story.data.local.room.DatabaseHelper -import ua.acclorite.book_story.data.remote.GithubAPI import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) object AppModule { - @Provides - @Singleton - fun provideGithubApi(): GithubAPI { - val moshi = Moshi.Builder() - .add(KotlinJsonAdapterFactory()) - .build() - - return Retrofit.Builder() - .baseUrl(GithubAPI.BASE_URL) - .addConverterFactory(MoshiConverterFactory.create(moshi)) - .build() - .create(GithubAPI::class.java) - } - @Provides @Singleton fun provideCommonmarkParser(): Parser { diff --git a/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt b/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt index 36bab6c4..05c1d8bb 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/di/RepositoryModule.kt @@ -12,8 +12,6 @@ import dagger.hilt.InstallIn import dagger.hilt.components.SingletonComponent import ua.acclorite.book_story.data.local.data_store.DataStore import ua.acclorite.book_story.data.local.data_store.DataStoreImpl -import ua.acclorite.book_story.data.local.notification.UpdatesNotificationService -import ua.acclorite.book_story.data.local.notification.UpdatesNotificationServiceImpl import ua.acclorite.book_story.data.mapper.book.BookMapper import ua.acclorite.book_story.data.mapper.book.BookMapperImpl import ua.acclorite.book_story.data.mapper.color_preset.ColorPresetMapper @@ -30,14 +28,12 @@ import ua.acclorite.book_story.data.repository.DataStoreRepositoryImpl import ua.acclorite.book_story.data.repository.FileSystemRepositoryImpl import ua.acclorite.book_story.data.repository.HistoryRepositoryImpl import ua.acclorite.book_story.data.repository.PermissionRepositoryImpl -import ua.acclorite.book_story.data.repository.RemoteRepositoryImpl import ua.acclorite.book_story.domain.repository.BookRepository import ua.acclorite.book_story.domain.repository.ColorPresetRepository import ua.acclorite.book_story.domain.repository.DataStoreRepository import ua.acclorite.book_story.domain.repository.FileSystemRepository import ua.acclorite.book_story.domain.repository.HistoryRepository import ua.acclorite.book_story.domain.repository.PermissionRepository -import ua.acclorite.book_story.domain.repository.RemoteRepository import javax.inject.Singleton @Module @@ -79,12 +75,6 @@ abstract class RepositoryModule { fileSystemRepositoryImpl: FileSystemRepositoryImpl ): FileSystemRepository - @Binds - @Singleton - abstract fun bindRemoteRepository( - remoteRepositoryImpl: RemoteRepositoryImpl - ): RemoteRepository - @Binds @Singleton abstract fun bindPermissionRepository( @@ -120,10 +110,4 @@ abstract class RepositoryModule { abstract fun bindTextParser( textParserImpl: TextParserImpl ): TextParser - - @Binds - @Singleton - abstract fun bindNotificationService( - updatesNotificationServiceImpl: UpdatesNotificationServiceImpl - ): UpdatesNotificationService } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationService.kt b/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationService.kt deleted file mode 100644 index a6e84abe..00000000 --- a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationService.kt +++ /dev/null @@ -1,18 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.data.local.notification - -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo - -interface UpdatesNotificationService { - - fun postNotification(releaseInfo: LatestReleaseInfo) - - companion object { - const val CHANNEL_ID = "updates_channel" - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt deleted file mode 100644 index ea95ad0f..00000000 --- a/app/src/main/java/ua/acclorite/book_story/data/local/notification/UpdatesNotificationServiceImpl.kt +++ /dev/null @@ -1,86 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.data.local.notification - -import android.app.Application -import android.app.Notification -import android.app.NotificationManager -import android.app.PendingIntent -import android.content.Context -import android.content.Intent -import android.graphics.drawable.Icon -import android.net.Uri -import ua.acclorite.book_story.R -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.presentation.core.constants.Constants -import ua.acclorite.book_story.presentation.core.constants.provideDownloadLatestReleasePage -import ua.acclorite.book_story.presentation.core.constants.provideReleasesPage -import javax.inject.Inject - -class UpdatesNotificationServiceImpl @Inject constructor( - private val application: Application -) : UpdatesNotificationService { - - private val notificationManager = application.getSystemService(Context.NOTIFICATION_SERVICE) - as NotificationManager - - /** - * Sends notification about new update. - * - * @param releaseInfo [LatestReleaseInfo]. - */ - override fun postNotification(releaseInfo: LatestReleaseInfo) { - val downloadLatestVersionIntent = Intent( - Intent.ACTION_VIEW, - Uri.parse(Constants.provideDownloadLatestReleasePage()) - ) - val latestReleaseIntent = Intent( - Intent.ACTION_VIEW, - Uri.parse(Constants.provideReleasesPage()) - ) - - val downloadLatestVersionPendingIntent = PendingIntent.getActivity( - application, - 1, - downloadLatestVersionIntent, - PendingIntent.FLAG_IMMUTABLE - ) - val latestReleasePendingIntent = PendingIntent.getActivity( - application, - 1, - latestReleaseIntent, - PendingIntent.FLAG_IMMUTABLE - ) - - val notification = Notification.Builder( - application, - UpdatesNotificationService.CHANNEL_ID - ) - .setSmallIcon(R.drawable.notification_icon) - .setContentTitle(application.getString(R.string.updates_notification_title)) - .setContentText( - application.getString( - R.string.updates_notification_desc, - releaseInfo.name - ) - ) - .setContentIntent(latestReleasePendingIntent) - .addAction( - Notification.Action.Builder( - Icon.createWithResource(application, R.drawable.notification_icon), - application.getString(R.string.updates_notification_action), - downloadLatestVersionPendingIntent - ).build() - ) - .build() - - notificationManager.notify( - 0, - notification - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/remote/GithubAPI.kt b/app/src/main/java/ua/acclorite/book_story/data/remote/GithubAPI.kt deleted file mode 100644 index 9d42d1fa..00000000 --- a/app/src/main/java/ua/acclorite/book_story/data/remote/GithubAPI.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.data.remote - -import retrofit2.http.GET -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo - -interface GithubAPI { - @GET("repos/Acclorite/book-story/releases/latest") - suspend fun getLatestRelease(): LatestReleaseInfo - - companion object { - const val BASE_URL = "https://api.github.com/" - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/remote/dto/LatestReleaseInfo.kt b/app/src/main/java/ua/acclorite/book_story/data/remote/dto/LatestReleaseInfo.kt deleted file mode 100644 index 7cb41c7b..00000000 --- a/app/src/main/java/ua/acclorite/book_story/data/remote/dto/LatestReleaseInfo.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.data.remote.dto - -import androidx.annotation.Keep -import androidx.compose.runtime.Immutable -import com.squareup.moshi.Json -import com.squareup.moshi.JsonClass - -@Keep -@JsonClass(generateAdapter = true) -@Immutable -data class LatestReleaseInfo( - @Json(name = "name") val name: String, - @Json(name = "tag_name") val tagName: String -) diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt index 21a59e54..d3ea5f4b 100644 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt +++ b/app/src/main/java/ua/acclorite/book_story/data/repository/PermissionRepositoryImpl.kt @@ -26,7 +26,6 @@ import javax.inject.Inject import javax.inject.Singleton private const val STORAGE_PERMISSION = "STORAGE PERM, REPO" -private const val NOTIFICATIONS_PERMISSION = "NOTIFIC PERM, REPO" @Singleton class PermissionRepositoryImpl @Inject constructor() : PermissionRepository { @@ -102,53 +101,4 @@ class PermissionRepositoryImpl @Inject constructor() : PermissionRepository { Log.e(STORAGE_PERMISSION, "Not granted: Timeout") return false } - - @OptIn(ExperimentalPermissionsApi::class) - override suspend fun grantNotificationsPermission( - activity: ComponentActivity, - notificationsPermissionState: PermissionState - ): Boolean { - Log.i(NOTIFICATIONS_PERMISSION, "Requested notifications permission") - if (Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU) { - Log.w(NOTIFICATIONS_PERMISSION, "Granted: API is below 33") - return true - } - - if (notificationsPermissionState.status.isGranted) { - Log.i(NOTIFICATIONS_PERMISSION, "Granted: Notifications Permission is already granted") - return true - } - - if (!notificationsPermissionState.status.shouldShowRationale) { - notificationsPermissionState.launchPermissionRequest() - } else { - val intent = Intent(Settings.ACTION_APP_NOTIFICATION_SETTINGS) - intent.putExtra(Settings.EXTRA_APP_PACKAGE, activity.packageName) - - intent.launchActivity(activity) { - Log.e( - NOTIFICATIONS_PERMISSION, - "Could not launch \"APP_NOTIFICATION_SETTINGS\" activity" - ) - return false - } - } - - for (i in 1..20) { - if (!notificationsPermissionState.status.isGranted) { - delay(1000) - yield() - continue - } - - yield() - - Log.i(NOTIFICATIONS_PERMISSION, "Successfully granted") - return true - break - } - - Log.e(NOTIFICATIONS_PERMISSION, "Not granted: Timeout") - return false - } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/data/repository/RemoteRepositoryImpl.kt b/app/src/main/java/ua/acclorite/book_story/data/repository/RemoteRepositoryImpl.kt deleted file mode 100644 index a4f4d952..00000000 --- a/app/src/main/java/ua/acclorite/book_story/data/repository/RemoteRepositoryImpl.kt +++ /dev/null @@ -1,65 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.data.repository - -import android.app.Application -import android.util.Log -import kotlinx.coroutines.Dispatchers -import kotlinx.coroutines.withContext -import ua.acclorite.book_story.R -import ua.acclorite.book_story.data.local.notification.UpdatesNotificationService -import ua.acclorite.book_story.data.remote.GithubAPI -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.domain.repository.RemoteRepository -import javax.inject.Inject -import javax.inject.Singleton - -private const val CHECK_FOR_UPDATES = "CHECK FOR UPD, REPO" - -/** - * Remote repository. - * Manages all API(online) related work. - */ -@Singleton -class RemoteRepositoryImpl @Inject constructor( - private val application: Application, - - private val githubAPI: GithubAPI, - private val updatesNotificationService: UpdatesNotificationService, -) : RemoteRepository { - - /** - * Check for updates from GitHub. - * - * @param postNotification Whether notification should be send. - */ - override suspend fun checkForUpdates(postNotification: Boolean): LatestReleaseInfo? { - Log.i(CHECK_FOR_UPDATES, "Checking for updates. Post notification: $postNotification") - - return withContext(Dispatchers.IO) { - try { - val result = githubAPI.getLatestRelease() - - val version = result.tagName.substringAfter("v") - val currentVersion = application.getString(R.string.app_version) - - if (version != currentVersion && postNotification) { - Log.i(CHECK_FOR_UPDATES, "Posting notification.") - updatesNotificationService.postNotification( - result - ) - } - - result - } catch (e: Exception) { - Log.e(CHECK_FOR_UPDATES, "Could not get latest release information.") - e.printStackTrace() - null - } - } - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt index 0f1259e1..f5e4e354 100644 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt +++ b/app/src/main/java/ua/acclorite/book_story/domain/repository/PermissionRepository.kt @@ -17,10 +17,4 @@ interface PermissionRepository { activity: ComponentActivity, storagePermissionState: PermissionState ): Boolean - - @OptIn(ExperimentalPermissionsApi::class) - suspend fun grantNotificationsPermission( - activity: ComponentActivity, - notificationsPermissionState: PermissionState - ): Boolean } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/repository/RemoteRepository.kt b/app/src/main/java/ua/acclorite/book_story/domain/repository/RemoteRepository.kt deleted file mode 100644 index 997a99ca..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/repository/RemoteRepository.kt +++ /dev/null @@ -1,16 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.domain.repository - -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo - -interface RemoteRepository { - - suspend fun checkForUpdates( - postNotification: Boolean - ): LatestReleaseInfo? -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantNotificationsPermission.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantNotificationsPermission.kt deleted file mode 100644 index 2763138b..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/permission/GrantNotificationsPermission.kt +++ /dev/null @@ -1,29 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.domain.use_case.permission - -import androidx.activity.ComponentActivity -import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.PermissionState -import ua.acclorite.book_story.domain.repository.PermissionRepository -import javax.inject.Inject - -class GrantNotificationsPermission @Inject constructor( - private val repository: PermissionRepository -) { - - @OptIn(ExperimentalPermissionsApi::class) - suspend fun execute( - activity: ComponentActivity, - notificationsPermissionState: PermissionState - ): Boolean { - return repository.grantNotificationsPermission( - activity = activity, - notificationsPermissionState = notificationsPermissionState - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/domain/use_case/remote/CheckForUpdates.kt b/app/src/main/java/ua/acclorite/book_story/domain/use_case/remote/CheckForUpdates.kt deleted file mode 100644 index fd2503d4..00000000 --- a/app/src/main/java/ua/acclorite/book_story/domain/use_case/remote/CheckForUpdates.kt +++ /dev/null @@ -1,20 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.domain.use_case.remote - -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.domain.repository.RemoteRepository -import javax.inject.Inject - -class CheckForUpdates @Inject constructor( - private val repository: RemoteRepository -) { - - suspend fun execute(postNotification: Boolean): LatestReleaseInfo? { - return repository.checkForUpdates(postNotification) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt index 0a5901f7..0592fd9c 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutContent.kt @@ -10,37 +10,21 @@ import androidx.compose.foundation.lazy.LazyListState import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarScrollBehavior import androidx.compose.runtime.Composable -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.domain.util.Dialog import ua.acclorite.book_story.ui.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable fun AboutContent( scrollBehavior: TopAppBarScrollBehavior, - dialog: Dialog? = null, - updateLoading: Boolean, - updateInfo: LatestReleaseInfo?, listState: LazyListState, - checkForUpdate: (AboutEvent.OnCheckForUpdate) -> Unit, navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit, - dismissDialog: (AboutEvent.OnDismissDialog) -> Unit, navigateToLicenses: () -> Unit, navigateToCredits: () -> Unit, navigateBack: () -> Unit ) { - AboutDialog( - dialog = dialog, - updateInfo = updateInfo, - navigateToBrowserPage = navigateToBrowserPage, - dismissDialog = dismissDialog - ) - AboutScaffold( scrollBehavior = scrollBehavior, - updateLoading = updateLoading, listState = listState, - checkForUpdate = checkForUpdate, navigateToBrowserPage = navigateToBrowserPage, navigateToLicenses = navigateToLicenses, navigateToCredits = navigateToCredits, diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutDialog.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutDialog.kt deleted file mode 100644 index 2e06b4df..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutDialog.kt +++ /dev/null @@ -1,31 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.presentation.about - -import androidx.compose.runtime.Composable -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.domain.util.Dialog -import ua.acclorite.book_story.ui.about.AboutEvent -import ua.acclorite.book_story.ui.about.AboutScreen - -@Composable -fun AboutDialog( - dialog: Dialog? = null, - updateInfo: LatestReleaseInfo?, - navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit, - dismissDialog: (AboutEvent.OnDismissDialog) -> Unit -) { - when (dialog) { - AboutScreen.UPDATE_DIALOG -> { - AboutUpdateDialog( - updateInfo = updateInfo, - navigateToBrowserPage = navigateToBrowserPage, - dismissDialog = dismissDialog - ) - } - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt index 07586265..fd5890e9 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutLayout.kt @@ -42,10 +42,8 @@ import ua.acclorite.book_story.ui.about.AboutEvent @OptIn(ExperimentalMaterial3Api::class) @Composable fun AboutLayout( - updateLoading: Boolean, paddingValues: PaddingValues, listState: LazyListState, - checkForUpdate: (AboutEvent.OnCheckForUpdate) -> Unit, navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit, navigateToLicenses: () -> Unit, navigateToCredits: () -> Unit @@ -102,17 +100,9 @@ fun AboutLayout( context.getString(R.string.app_version) ) ) - append("\n") - append(stringResource(id = R.string.app_version_option_desc_2)) }, - showLoading = updateLoading - ) { - checkForUpdate( - AboutEvent.OnCheckForUpdate( - context = context - ) - ) - } + isOnClickEnabled = false + ) AboutItem( title = stringResource(id = R.string.report_bug_option), diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt index 152013f5..febbe861 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutScaffold.kt @@ -21,9 +21,7 @@ import ua.acclorite.book_story.ui.about.AboutEvent @Composable fun AboutScaffold( scrollBehavior: TopAppBarScrollBehavior, - updateLoading: Boolean, listState: LazyListState, - checkForUpdate: (AboutEvent.OnCheckForUpdate) -> Unit, navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit, navigateToLicenses: () -> Unit, navigateToCredits: () -> Unit, @@ -42,10 +40,8 @@ fun AboutScaffold( } ) { paddingValues -> AboutLayout( - updateLoading = updateLoading, paddingValues = paddingValues, listState = listState, - checkForUpdate = checkForUpdate, navigateToBrowserPage = navigateToBrowserPage, navigateToLicenses = navigateToLicenses, navigateToCredits = navigateToCredits diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutUpdateDialog.kt b/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutUpdateDialog.kt deleted file mode 100644 index 09dca49e..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/about/AboutUpdateDialog.kt +++ /dev/null @@ -1,49 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.presentation.about - -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Update -import androidx.compose.runtime.Composable -import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.res.stringResource -import ua.acclorite.book_story.R -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.presentation.core.constants.Constants -import ua.acclorite.book_story.presentation.core.constants.provideReleasesPage -import ua.acclorite.book_story.ui.about.AboutEvent - -@Composable -fun AboutUpdateDialog( - updateInfo: LatestReleaseInfo?, - navigateToBrowserPage: (AboutEvent.OnNavigateToBrowserPage) -> Unit, - dismissDialog: (AboutEvent.OnDismissDialog) -> Unit -) { - val context = LocalContext.current - - Dialog( - title = stringResource(id = R.string.update_query, updateInfo?.tagName ?: ""), - icon = Icons.Default.Update, - description = stringResource( - id = R.string.update_app_description - ), - actionEnabled = true, - disableOnClick = false, - onDismiss = { dismissDialog(AboutEvent.OnDismissDialog) }, - onAction = { - navigateToBrowserPage( - AboutEvent.OnNavigateToBrowserPage( - page = Constants.provideReleasesPage(), - context = context - ) - ) - dismissDialog(AboutEvent.OnDismissDialog) - }, - withContent = false - ) -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt index 43cf4863..d6eda79a 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/DataStoreConstants.kt @@ -21,7 +21,6 @@ object DataStoreConstants { val ABSOLUTE_DARK = booleanPreferencesKey("absolute_dark") val THEME_CONTRAST = stringPreferencesKey("theme_contrast") val SHOW_START_SCREEN = booleanPreferencesKey("guide") - val CHECK_FOR_UPDATES = booleanPreferencesKey("check_for_updates") val DOUBLE_PRESS_EXIT = booleanPreferencesKey("double_press_exit") // Reader settings diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LinkConstants.kt b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LinkConstants.kt index 974da753..c2cc13a4 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LinkConstants.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/core/constants/LinkConstants.kt @@ -8,9 +8,6 @@ package ua.acclorite.book_story.presentation.core.constants -fun Constants.provideDownloadLatestReleasePage() = - "https://www.github.com/Acclorite/book-story/releases/latest/download/book-story.apk" - fun Constants.provideReleasesPage() = "https://www.github.com/Acclorite/book-story/releases/latest" diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt index f71734ee..b642ca63 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/GeneralSettingsCategory.kt @@ -16,7 +16,6 @@ import androidx.compose.ui.unit.Dp import androidx.compose.ui.unit.coerceAtLeast import androidx.compose.ui.unit.dp import ua.acclorite.book_story.presentation.settings.general.components.AppLanguageOption -import ua.acclorite.book_story.presentation.settings.general.components.CheckForUpdatesOption import ua.acclorite.book_story.presentation.settings.general.components.DoublePressExitOption fun LazyListScope.GeneralSettingsCategory( @@ -31,10 +30,6 @@ fun LazyListScope.GeneralSettingsCategory( AppLanguageOption() } - item { - CheckForUpdatesOption() - } - item { DoublePressExitOption() } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/CheckForUpdatesOption.kt b/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/CheckForUpdatesOption.kt deleted file mode 100644 index 9a70ac54..00000000 --- a/app/src/main/java/ua/acclorite/book_story/presentation/settings/general/components/CheckForUpdatesOption.kt +++ /dev/null @@ -1,78 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.presentation.settings.general.components - -import android.Manifest -import android.annotation.SuppressLint -import androidx.compose.material.icons.Icons -import androidx.compose.material.icons.filled.Security -import androidx.compose.runtime.Composable -import androidx.compose.runtime.mutableStateOf -import androidx.compose.runtime.remember -import androidx.compose.ui.res.stringResource -import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.rememberPermissionState -import ua.acclorite.book_story.R -import ua.acclorite.book_story.presentation.core.components.dialog.Dialog -import ua.acclorite.book_story.presentation.core.components.settings.SwitchWithTitle -import ua.acclorite.book_story.presentation.core.util.LocalActivity -import ua.acclorite.book_story.ui.main.MainEvent -import ua.acclorite.book_story.ui.main.MainModel -import ua.acclorite.book_story.ui.settings.SettingsEvent -import ua.acclorite.book_story.ui.settings.SettingsModel - -@OptIn(ExperimentalPermissionsApi::class) -@SuppressLint("InlinedApi") -@Composable -fun CheckForUpdatesOption() { - val mainModel = hiltViewModel() - val settingsModel = hiltViewModel() - - val state = mainModel.state.collectAsStateWithLifecycle() - val activity = LocalActivity.current - val notificationsPermissionState = rememberPermissionState( - permission = Manifest.permission.POST_NOTIFICATIONS - ) - val showConfirmation = remember { mutableStateOf(false) } - - if (showConfirmation.value) { - Dialog( - title = stringResource(id = R.string.enable_check_for_updates), - description = stringResource(id = R.string.enable_check_for_updates_description), - icon = Icons.Default.Security, - actionEnabled = true, - onDismiss = { showConfirmation.value = false }, - onAction = { - mainModel.onEvent(MainEvent.OnChangeCheckForUpdates(true)) - showConfirmation.value = false - }, - withContent = false - ) - } - - SwitchWithTitle( - selected = state.value.checkForUpdates, - title = stringResource(id = R.string.check_for_updates_option), - description = stringResource(id = R.string.check_for_updates_option_desc) - ) { - settingsModel.onEvent( - SettingsEvent.OnChangeCheckForUpdates( - enable = !state.value.checkForUpdates, - activity = activity, - notificationsPermissionState = notificationsPermissionState, - onChangeCheckForUpdates = { - when (it) { - true -> showConfirmation.value = true - false -> mainModel.onEvent(MainEvent.OnChangeCheckForUpdates(false)) - } - } - ) - ) - } -} \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt index b632e756..fc3b69d6 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartContent.kt @@ -24,13 +24,10 @@ fun StartContent( currentPage: Int, stackEvent: StackEvent, storagePermissionGranted: Boolean, - notificationsPermissionGranted: Boolean, storagePermissionState: PermissionState, - notificationsPermissionState: PermissionState, languages: List, changeLanguage: (MainEvent.OnChangeLanguage) -> Unit, storagePermissionRequest: (StartEvent.OnStoragePermissionRequest) -> Unit, - notificationsPermissionRequest: (StartEvent.OnNotificationsPermissionRequest) -> Unit, navigateForward: () -> Unit, navigateBack: () -> Unit, navigateToBrowse: () -> Unit, @@ -50,13 +47,10 @@ fun StartContent( currentPage = currentPage, stackEvent = stackEvent, storagePermissionGranted = storagePermissionGranted, - notificationsPermissionGranted = notificationsPermissionGranted, storagePermissionState = storagePermissionState, - notificationsPermissionState = notificationsPermissionState, languages = languages, changeLanguage = changeLanguage, storagePermissionRequest = storagePermissionRequest, - notificationsPermissionRequest = notificationsPermissionRequest, navigateForward = navigateForward ) } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt index ab7af46c..9ba8c84f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettings.kt @@ -22,13 +22,10 @@ fun StartSettings( currentPage: Int, stackEvent: StackEvent, storagePermissionGranted: Boolean, - notificationsPermissionGranted: Boolean, storagePermissionState: PermissionState, - notificationsPermissionState: PermissionState, languages: List, changeLanguage: (MainEvent.OnChangeLanguage) -> Unit, storagePermissionRequest: (StartEvent.OnStoragePermissionRequest) -> Unit, - notificationsPermissionRequest: (StartEvent.OnNotificationsPermissionRequest) -> Unit, navigateForward: () -> Unit ) { val activity = LocalActivity.current @@ -63,11 +60,8 @@ fun StartSettings( StartSettingsLayoutPermissions( activity = activity, storagePermissionGranted = storagePermissionGranted, - notificationsPermissionGranted = notificationsPermissionGranted, storagePermissionState = storagePermissionState, - notificationsPermissionState = notificationsPermissionState, - storagePermissionRequest = storagePermissionRequest, - notificationsPermissionRequest = notificationsPermissionRequest + storagePermissionRequest = storagePermissionRequest ) } } diff --git a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutPermissions.kt b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutPermissions.kt index 1a1cd7d8..a21c9a5f 100644 --- a/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutPermissions.kt +++ b/app/src/main/java/ua/acclorite/book_story/presentation/start/StartSettingsLayoutPermissions.kt @@ -26,11 +26,8 @@ import ua.acclorite.book_story.ui.start.StartEvent fun LazyListScope.StartSettingsLayoutPermissions( activity: ComponentActivity, storagePermissionGranted: Boolean, - notificationsPermissionGranted: Boolean, storagePermissionState: PermissionState, - notificationsPermissionState: PermissionState, storagePermissionRequest: (StartEvent.OnStoragePermissionRequest) -> Unit, - notificationsPermissionRequest: (StartEvent.OnNotificationsPermissionRequest) -> Unit ) { item { Spacer(modifier = Modifier.height(16.dp)) @@ -65,23 +62,6 @@ fun LazyListScope.StartSettingsLayoutPermissions( ) } - item { - StartSettingsLayoutPermissionsItem( - title = stringResource(id = R.string.start_permissions_notifications), - description = stringResource(id = R.string.start_permissions_notifications_desc), - isOptional = true, - isGranted = notificationsPermissionGranted, - onGrantClick = { - notificationsPermissionRequest( - StartEvent.OnNotificationsPermissionRequest( - activity = activity, - notificationsPermissionState = notificationsPermissionState - ) - ) - } - ) - } - item { Spacer(modifier = Modifier.height(8.dp)) } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt index e5af6b09..626574df 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutEvent.kt @@ -15,10 +15,4 @@ sealed class AboutEvent { val page: String, val context: Context ) : AboutEvent() - - data class OnCheckForUpdate( - val context: Context - ) : AboutEvent() - - data object OnDismissDialog : AboutEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt index 84848415..3eeea548 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutModel.kt @@ -14,29 +14,16 @@ import androidx.lifecycle.viewModelScope import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.FlowPreview -import kotlinx.coroutines.flow.MutableStateFlow -import kotlinx.coroutines.flow.asStateFlow import kotlinx.coroutines.launch -import kotlinx.coroutines.sync.Mutex -import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.withContext -import kotlinx.coroutines.yield import ua.acclorite.book_story.R -import ua.acclorite.book_story.domain.use_case.remote.CheckForUpdates import ua.acclorite.book_story.presentation.core.util.launchActivity import ua.acclorite.book_story.presentation.core.util.showToast import javax.inject.Inject @OptIn(FlowPreview::class) @HiltViewModel -class AboutModel @Inject constructor( - private val checkForUpdates: CheckForUpdates -) : ViewModel() { - - private val mutex = Mutex() - - private val _state = MutableStateFlow(AboutState()) - val state = _state.asStateFlow() +class AboutModel @Inject constructor() : ViewModel() { fun onEvent(event: AboutEvent) { when (event) { @@ -55,74 +42,6 @@ class AboutModel @Inject constructor( } } } - - is AboutEvent.OnCheckForUpdate -> { - viewModelScope.launch { - if (_state.value.updateChecked) { - withContext(Dispatchers.Main) { - event.context.getString(R.string.no_updates) - .showToast(context = event.context) - } - return@launch - } - - _state.update { - it.copy(updateLoading = true) - } - val result = checkForUpdates.execute(false) - - if (result == null) { - _state.update { - it.copy(updateLoading = false) - } - withContext(Dispatchers.Main) { - event.context.getString(R.string.error_check_internet) - .showToast(context = event.context) - } - return@launch - } - - val version = result.tagName.substringAfterLast("v") - val currentVersion = event.context.getString(R.string.app_version) - - if (version == currentVersion) { - withContext(Dispatchers.Main) { - event.context.getString(R.string.no_updates) - .showToast(context = event.context) - } - _state.update { - it.copy( - updateLoading = false, - updateChecked = true - ) - } - return@launch - } - - _state.update { - it.copy( - dialog = AboutScreen.UPDATE_DIALOG, - updateLoading = false, - updateInfo = result - ) - } - } - } - - is AboutEvent.OnDismissDialog -> { - viewModelScope.launch { - _state.update { - it.copy(dialog = null) - } - } - } - } - } - - private suspend inline fun MutableStateFlow.update(function: (T) -> T) { - mutex.withLock { - yield() - this.value = function(this.value) } } } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt index 88187516..fc5b0fe8 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutScreen.kt @@ -11,8 +11,6 @@ import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.TopAppBarDefaults import androidx.compose.runtime.Composable import androidx.hilt.navigation.compose.hiltViewModel -import androidx.lifecycle.compose.collectAsStateWithLifecycle -import kotlinx.parcelize.IgnoredOnParcel import kotlinx.parcelize.Parcelize import ua.acclorite.book_story.domain.navigator.Screen import ua.acclorite.book_story.presentation.about.AboutContent @@ -24,27 +22,18 @@ import ua.acclorite.book_story.ui.licenses.LicensesScreen @Parcelize object AboutScreen : Screen, Parcelable { - @IgnoredOnParcel - const val UPDATE_DIALOG = "update_dialog" - @OptIn(ExperimentalMaterial3Api::class) @Composable override fun Content() { val navigator = LocalNavigator.current val screenModel = hiltViewModel() - val state = screenModel.state.collectAsStateWithLifecycle() val (scrollBehavior, listState) = TopAppBarDefaults.collapsibleTopAppBarScrollBehavior() AboutContent( scrollBehavior = scrollBehavior, - dialog = state.value.dialog, - updateLoading = state.value.updateLoading, - updateInfo = state.value.updateInfo, listState = listState, - checkForUpdate = screenModel::onEvent, navigateToBrowserPage = screenModel::onEvent, - dismissDialog = screenModel::onEvent, navigateToLicenses = { navigator.push(LicensesScreen) }, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutState.kt b/app/src/main/java/ua/acclorite/book_story/ui/about/AboutState.kt deleted file mode 100644 index 45f7c0f8..00000000 --- a/app/src/main/java/ua/acclorite/book_story/ui/about/AboutState.kt +++ /dev/null @@ -1,19 +0,0 @@ -/* - * Book's Story — free and open-source Material You eBook reader. - * Copyright (C) 2024-2025 Acclorite - * SPDX-License-Identifier: GPL-3.0-only - */ - -package ua.acclorite.book_story.ui.about - -import androidx.compose.runtime.Immutable -import ua.acclorite.book_story.data.remote.dto.LatestReleaseInfo -import ua.acclorite.book_story.domain.util.Dialog - -@Immutable -data class AboutState( - val dialog: Dialog? = null, - val updateChecked: Boolean = false, - val updateLoading: Boolean = false, - val updateInfo: LatestReleaseInfo? = null -) \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt index cfb49f2d..09e9dbcd 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainEvent.kt @@ -22,7 +22,6 @@ sealed class MainEvent { data class OnChangeParagraphHeight(val value: Int) : MainEvent() data class OnChangeParagraphIndentation(val value: Int) : MainEvent() data class OnChangeShowStartScreen(val value: Boolean) : MainEvent() - data class OnChangeCheckForUpdates(val value: Boolean) : MainEvent() data class OnChangeSidePadding(val value: Int) : MainEvent() data class OnChangeDoubleClickTranslation(val value: Boolean) : MainEvent() data class OnChangeFastColorPresetChange(val value: Boolean) : MainEvent() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt index 20d6cf7d..9510fe4a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainModel.kt @@ -33,7 +33,6 @@ import ua.acclorite.book_story.domain.reader.toTextAlignment import ua.acclorite.book_story.domain.use_case.data_store.ChangeLanguage import ua.acclorite.book_story.domain.use_case.data_store.GetAllSettings import ua.acclorite.book_story.domain.use_case.data_store.SetDatastore -import ua.acclorite.book_story.domain.use_case.remote.CheckForUpdates import ua.acclorite.book_story.domain.util.toHorizontalAlignment import ua.acclorite.book_story.presentation.core.constants.Constants import ua.acclorite.book_story.presentation.core.constants.DataStoreConstants @@ -52,7 +51,6 @@ class MainModel @Inject constructor( private val setDatastore: SetDatastore, private val changeLanguage: ChangeLanguage, - private val checkForUpdates: CheckForUpdates, private val getAllSettings: GetAllSettings ) : ViewModel() { @@ -166,14 +164,6 @@ class MainModel @Inject constructor( } ) - is MainEvent.OnChangeCheckForUpdates -> handleDatastoreUpdate( - key = DataStoreConstants.CHECK_FOR_UPDATES, - value = event.value, - updateState = { - it.copy(checkForUpdates = this) - } - ) - is MainEvent.OnChangeSidePadding -> handleDatastoreUpdate( key = DataStoreConstants.SIDE_PADDING, value = event.value, @@ -516,18 +506,9 @@ class MainModel @Inject constructor( viewModelScope.launch(Dispatchers.Main) { val settings = getAllSettings.execute() - // All additional execution + /* All additional execution */ changeLanguage.execute(settings.language) - if (settings.checkForUpdates) { - viewModelScope.launch(Dispatchers.IO) { - checkForUpdates.execute( - postNotification = true - ) - } - } - /* - - - - - - - - - - - */ - updateStateWithSavedHandle { settings } mainModelReady.update { true } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt index 35c179df..55707176 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/main/MainState.kt @@ -68,7 +68,6 @@ data class MainState( val absoluteDark: Boolean = provideDefaultValue { false }, val themeContrast: ThemeContrast = provideDefaultValue { ThemeContrast.STANDARD }, val showStartScreen: Boolean = provideDefaultValue { true }, - val checkForUpdates: Boolean = provideDefaultValue { false }, val doublePressExit: Boolean = provideDefaultValue { false }, // Reader Settings @@ -199,10 +198,6 @@ data class MainState( PARAGRAPH_INDENTATION ) { paragraphIndentation }, - checkForUpdates = provideValue( - CHECK_FOR_UPDATES - ) { checkForUpdates }, - sidePadding = provideValue( SIDE_PADDING ) { sidePadding }, diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt index 0dee3790..f8f256e4 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsEvent.kt @@ -9,23 +9,13 @@ package ua.acclorite.book_story.ui.settings import android.content.Context -import androidx.activity.ComponentActivity import androidx.compose.runtime.Immutable import androidx.compose.ui.graphics.Color import com.google.accompanist.permissions.ExperimentalPermissionsApi -import com.google.accompanist.permissions.PermissionState import ua.acclorite.book_story.domain.util.ID @Immutable sealed class SettingsEvent { - - data class OnChangeCheckForUpdates( - val enable: Boolean, - val activity: ComponentActivity, - val notificationsPermissionState: PermissionState, - val onChangeCheckForUpdates: (Boolean) -> Unit - ) : SettingsEvent() - data class OnSelectColorPreset( val id: ID ) : SettingsEvent() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt index b2f101f8..3a958cbc 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/settings/SettingsModel.kt @@ -27,7 +27,6 @@ import ua.acclorite.book_story.domain.use_case.color_preset.GetColorPresets import ua.acclorite.book_story.domain.use_case.color_preset.ReorderColorPresets import ua.acclorite.book_story.domain.use_case.color_preset.SelectColorPreset import ua.acclorite.book_story.domain.use_case.color_preset.UpdateColorPreset -import ua.acclorite.book_story.domain.use_case.permission.GrantNotificationsPermission import ua.acclorite.book_story.presentation.core.constants.Constants import ua.acclorite.book_story.presentation.core.constants.provideDefaultColorPreset import ua.acclorite.book_story.presentation.core.util.showToast @@ -36,7 +35,6 @@ import kotlin.random.Random @HiltViewModel class SettingsModel @Inject constructor( - private val grantNotificationsPermission: GrantNotificationsPermission, private val getColorPresets: GetColorPresets, private val updateColorPreset: UpdateColorPreset, private val selectColorPreset: SelectColorPreset, @@ -52,7 +50,6 @@ class SettingsModel @Inject constructor( private val _isReady = MutableStateFlow(false) val isReady = _isReady.asStateFlow() - private var notificationsPermissionJob: Job? = null private var selectColorPresetJob: Job? = null private var addColorPresetJob: Job? = null private var deleteColorPresetJob: Job? = null @@ -98,25 +95,6 @@ class SettingsModel @Inject constructor( @OptIn(ExperimentalPermissionsApi::class) fun onEvent(event: SettingsEvent) { when (event) { - is SettingsEvent.OnChangeCheckForUpdates -> { - notificationsPermissionJob?.cancel() - notificationsPermissionJob = viewModelScope.launch(Dispatchers.IO) { - if (!event.enable) { - event.onChangeCheckForUpdates(false) - return@launch - } - - grantNotificationsPermission.execute( - activity = event.activity, - notificationsPermissionState = event.notificationsPermissionState - ).apply { - if (this) { - event.onChangeCheckForUpdates(true) - } - } - } - } - is SettingsEvent.OnSelectColorPreset -> { viewModelScope.launch { cancelColorPresetJobs() diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartEvent.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartEvent.kt index 19130eba..5111e65a 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartEvent.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartEvent.kt @@ -16,17 +16,11 @@ import com.google.accompanist.permissions.PermissionState @Immutable sealed class StartEvent { data class OnCheckPermissions( - val storagePermissionState: PermissionState, - val notificationsPermissionState: PermissionState + val storagePermissionState: PermissionState ) : StartEvent() data class OnStoragePermissionRequest( val activity: ComponentActivity, val storagePermissionState: PermissionState ) : StartEvent() - - data class OnNotificationsPermissionRequest( - val activity: ComponentActivity, - val notificationsPermissionState: PermissionState - ) : StartEvent() } \ No newline at end of file diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt index 2a8dfb96..04703f95 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartModel.kt @@ -21,14 +21,12 @@ import kotlinx.coroutines.launch import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import kotlinx.coroutines.yield -import ua.acclorite.book_story.domain.use_case.permission.GrantNotificationsPermission import ua.acclorite.book_story.domain.use_case.permission.GrantStoragePermission import javax.inject.Inject @HiltViewModel class StartModel @Inject constructor( - private val grantStoragePermission: GrantStoragePermission, - private val grantNotificationsPermission: GrantNotificationsPermission + private val grantStoragePermission: GrantStoragePermission ) : ViewModel() { private val mutex = Mutex() @@ -37,7 +35,6 @@ class StartModel @Inject constructor( val state = _state.asStateFlow() private var storagePermissionJob: Job? = null - private var notificationsPermissionJob: Job? = null @OptIn(ExperimentalPermissionsApi::class) fun onEvent(event: StartEvent) { @@ -45,20 +42,13 @@ class StartModel @Inject constructor( is StartEvent.OnCheckPermissions -> { viewModelScope.launch(Dispatchers.IO) { val legacyStoragePermission = Build.VERSION.SDK_INT < Build.VERSION_CODES.R - val legacyNotificationPermission = - Build.VERSION.SDK_INT < Build.VERSION_CODES.TIRAMISU - val storagePermissionGranted = if (!legacyStoragePermission) { Environment.isExternalStorageManager() } else event.storagePermissionState.status.isGranted - val notificationPermissionGranted = if (!legacyNotificationPermission) { - event.notificationsPermissionState.status.isGranted - } else true _state.update { it.copy( - storagePermissionGranted = storagePermissionGranted, - notificationsPermissionGranted = notificationPermissionGranted + storagePermissionGranted = storagePermissionGranted ) } } @@ -81,24 +71,6 @@ class StartModel @Inject constructor( } } } - - is StartEvent.OnNotificationsPermissionRequest -> { - notificationsPermissionJob?.cancel() - notificationsPermissionJob = viewModelScope.launch(Dispatchers.IO) { - grantNotificationsPermission.execute( - activity = event.activity, - notificationsPermissionState = event.notificationsPermissionState - ).apply { - if (this) { - _state.update { - it.copy( - notificationsPermissionGranted = true - ) - } - } - } - } - } } } @@ -106,8 +78,6 @@ class StartModel @Inject constructor( viewModelScope.launch { _state.update { storagePermissionJob?.cancel() - notificationsPermissionJob?.cancel() - StartState() } } diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt index b370e9ea..b94fae97 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartScreen.kt @@ -70,9 +70,6 @@ object StartScreen : Screen, Parcelable { val storagePermissionState = rememberPermissionState( permission = Manifest.permission.READ_EXTERNAL_STORAGE ) - val notificationsPermissionState = rememberPermissionState( - permission = Manifest.permission.POST_NOTIFICATIONS - ) val currentPage = remember { mutableIntStateOf(0) } val stackEvent = remember { mutableStateOf(StackEvent.Default) } @@ -91,8 +88,7 @@ object StartScreen : Screen, Parcelable { LaunchedEffect(Unit) { screenModel.onEvent( StartEvent.OnCheckPermissions( - storagePermissionState = storagePermissionState, - notificationsPermissionState = notificationsPermissionState + storagePermissionState = storagePermissionState ) ) } @@ -104,13 +100,10 @@ object StartScreen : Screen, Parcelable { currentPage = currentPage.intValue, stackEvent = stackEvent.value, storagePermissionGranted = state.value.storagePermissionGranted, - notificationsPermissionGranted = state.value.notificationsPermissionGranted, storagePermissionState = storagePermissionState, - notificationsPermissionState = notificationsPermissionState, languages = languages, changeLanguage = mainModel::onEvent, storagePermissionRequest = screenModel::onEvent, - notificationsPermissionRequest = screenModel::onEvent, navigateForward = { if ((currentPage.intValue + 1 == 3) && !state.value.storagePermissionGranted) { return@StartContent diff --git a/app/src/main/java/ua/acclorite/book_story/ui/start/StartState.kt b/app/src/main/java/ua/acclorite/book_story/ui/start/StartState.kt index 16d7aa87..b2dede29 100644 --- a/app/src/main/java/ua/acclorite/book_story/ui/start/StartState.kt +++ b/app/src/main/java/ua/acclorite/book_story/ui/start/StartState.kt @@ -10,6 +10,5 @@ import androidx.compose.runtime.Immutable @Immutable data class StartState( - val storagePermissionGranted: Boolean = false, - val notificationsPermissionGranted: Boolean = false + val storagePermissionGranted: Boolean = false ) \ No newline at end of file diff --git a/app/src/main/res/drawable-hdpi/notification_icon.png b/app/src/main/res/drawable-hdpi/notification_icon.png deleted file mode 100644 index dda90fb4..00000000 Binary files a/app/src/main/res/drawable-hdpi/notification_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-mdpi/notification_icon.png b/app/src/main/res/drawable-mdpi/notification_icon.png deleted file mode 100644 index 7c44baf6..00000000 Binary files a/app/src/main/res/drawable-mdpi/notification_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xhdpi/notification_icon.png b/app/src/main/res/drawable-xhdpi/notification_icon.png deleted file mode 100644 index bf849efc..00000000 Binary files a/app/src/main/res/drawable-xhdpi/notification_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxhdpi/notification_icon.png b/app/src/main/res/drawable-xxhdpi/notification_icon.png deleted file mode 100644 index 5b3f1a1f..00000000 Binary files a/app/src/main/res/drawable-xxhdpi/notification_icon.png and /dev/null differ diff --git a/app/src/main/res/drawable-xxxhdpi/notification_icon.png b/app/src/main/res/drawable-xxxhdpi/notification_icon.png deleted file mode 100644 index d578f27a..00000000 Binary files a/app/src/main/res/drawable-xxxhdpi/notification_icon.png and /dev/null differ diff --git a/app/src/main/res/values-ar/strings.xml b/app/src/main/res/values-ar/strings.xml index fee4c542..ccb4709e 100644 --- a/app/src/main/res/values-ar/strings.xml +++ b/app/src/main/res/values-ar/strings.xml @@ -1,18 +1,16 @@ + + --> + + التاريخ يمكنك اختيار أي الكُتب تريد إضافتها. يمكنك تعديل العنوان و صورة غلاف الكتاب لاحقا. عملية التحميل يمكن أن تستغرق حتى بضع دقائق. نحتاج إذن التخزين لفحص جهازك من أجل الكُتب. من دون هذا الإذن، لن تكون قادرا على إضافة كتاب. - التحديث %1$s تم نشره للتو! انقر للذهاب الى صفحة الإصدار. اختر الفئة التي تريد نقل هذا الكتاب إليها. سيتم نقل هذا الكتاب إلى الفئة المُحدّدة. - تم العثور على إصدار جديد من Book\'s Story. هل تريد الإنتقال الى صفحة الاصدار ؟ - التحديثات الجديدة - تحديث جديد ل Book\'s Story! - تحميل المكتبة تصفح الإعدادات @@ -25,22 +23,18 @@ حذف الكتاب؟ نقل الكتاب؟ حذف تاريخ القراءة؟ - تفعيل التحقق من التنبيهات؟ اختر الفئة التي تريد نقل جميع الكُتب (%1$s) المُحدّدة. جميع الكُتب المُحدّدة سيتم نقلها إلى الفئة المُحدّدة. هذا سيحذف جميع الكُتب (%1$s) المُحدّدة من قاعدة البيانات. هذا لن يحذف الكُتب المُحدّدة مِن جهازك. هذا سيحذف هذا الكتاب من قاعدة البيانات. هذا لن يحذف الكتاب من جهازك. هذا سيحذف التاريخ بأكمله من قاعدة البيانات. بعد حذف التاريخ بأكمله، سيتم إعادة ضبط ترتيب الكُتب. - بتفعيل «البحث عن التحديثات» سيستخرج التطبيق معلومات اخر اصدار من «api.github.com» في كل مرة عند تشغيل التطبيق. هل تريد المضي قدما و تفعيل «البحث عن تحديثات»؟ حدث خطأ ما. لم يتم العثور على تطبيق ترجمة. لم يتم العثور على متصفح. الملف فارغ أو فاسد أو مفقود. يرجى التحقق من الملف أو تحديث المسار و المحاولة مرة أخرى. - حدث خطأ ما. حاول مرة أخرى لاحقا. مغلق المصدر اقرأ كُتبك المُفضلة و رتبهم باستخدام الفئات دع آخر كتاب قرأته يفتح صفحات قصة جديدة عظيمة من رحلة قرائتك غير قادر على إعادة ضبط صورة الغلاف. - تحديث %1$s إلغاء امنح امنح الإذن @@ -93,7 +87,6 @@ نوع الخط حجم الخط تباعد الفقرة - التحقق من التحديثات الجديدة للتطبيق عند بدء التطبيق عام إزاحة الفقرة مفعل @@ -113,7 +106,6 @@ ارتفاع الخط لون الخلفية لون الخط - التحقق من وجود تحديثات النقر المزدوج للترجمة النقر المزدوج على فقرة لترجمتها قائمة @@ -135,7 +127,6 @@ حُذفت جميع الكُتب المُحدّدة بنجاح. تم النسخ تم حذف صورة الغلاف بنجاح. - أحدث إصدار من التطبيق مثبت بالفعل. حُذف التاريخ بنجاح. تم إعادة تعيين صورة الغلاف بنجاح. عالي @@ -165,7 +156,6 @@ ابدأ المركز المسار - انقر للتحقق من وجود تحديثات الإبلاغ عن خطأ ما الجديد النهاية @@ -344,7 +334,6 @@ إعدادات القارئ تطبيق الهامش على منطقة القطع مطلوب - مطلوب للتحقق من إصدار تطبيق أحدث خطأ لم يتم العثور غلاف صورة المزيد @@ -354,7 +343,6 @@ سهم منحت إذن التخزين - إذن الإشعارات أمس ترتيب الفرز الأذونات diff --git a/app/src/main/res/values-cs/strings.xml b/app/src/main/res/values-cs/strings.xml index ae606ede..d6579d0b 100644 --- a/app/src/main/res/values-cs/strings.xml +++ b/app/src/main/res/values-cs/strings.xml @@ -7,7 +7,6 @@ Tato kniha byla úspěšně smazána. Neptun - Nová verze aplikace byla nalezena. Chcete přejít na stránku verzí? Barva pozadí Barva fontu Podle systému @@ -25,7 +24,6 @@ Uran Pluto Čtěte vaše oblíbené knihy a třiďte je do kategorií - Stáhnout Jazyk aplikace Saturn Ano, přejít na pomoc @@ -51,7 +49,6 @@ Ikony Nápady Smazat historii čtení? - Nejnovější verze aplikace už je nainstalována. Neznámý Fonty Standardní @@ -64,7 +61,6 @@ Pomozte překládat Filtr Čtečka - Aktualizace %1$s Potřebuji pomoc List Úplně tmavé @@ -72,7 +68,6 @@ Různé Můžete si vybrat, které knihy chcete přidat. Název i obálku knihy si můžete změnit později. Načítání knih může trvat i několik minut. Čtečka - Něco se pokazilo. Zkuste to znovu později. Co je nového Témata, barvy Font, texty, překladač @@ -88,7 +83,6 @@ Povolit oprávnění Velikost mřížky Smazat knihy? - Zapnutím «Zkontrolovat aktualizace» bude aplikace získávat informace o nových verzích z «api.github.com» při každém spuštění. Chcete pokračovat a zapnout «Zkontrolovat aktualizace»? Normální Žádná aplikace pro překladač nebyla nalezena. Resetovat obálku knihy na výchozí @@ -115,7 +109,6 @@ Zelená Zkopírováno Celá obrazovka - Hledat aktualizace Překlad na dvojité kliknutí Nechat obrazovku zapnutou Formát souboru @@ -140,7 +133,6 @@ Vrátit Tloušťka řádku Žádná aplikace pro prohlížeč nebyla nalezena. - Nová aktualizace Book\'s Story! Procházet O aplikaci Přidat knihy? @@ -181,7 +173,6 @@ Rychlost čtení Systém Resetovat obálku - Klepněte pro zkontrolování aktualizací Přejít na Zapnutý Spořič @@ -199,11 +190,9 @@ Překlad Jas obrazovky Jak přidám knihy do Knihovny? - Nové aktualizace Obálka byla úspěšně smazána. Pokud nevidíte stažené knihy, zkuste obnovit stránku. Zkontrolujte, jestli mají vaše knihy podporované formáty souborů. Potom klepněte na knihu pro vybrání nebo ji podržte pro zjištění její lokace. Potom co vyberete všechny knihy které chcete, klepněte na ikonu zaškrtnutí v pravém horním rohu, počkejte než se všechny knihy načtou a klepněte na «Přidat». Teď by jste měli vidět všechny knihy přidané v Vlastní jas obrazovky - Hledat nové verze aplikace při spuštění Citlivost Nastavení Vyžadováno, abychom mohli skenoval Vaše úložiště a hledat knihy @@ -220,14 +209,11 @@ Jak přesunu nebo smažu knihy? Přidat soubory Uzavřený zdroj - Aktualizace %1$s byla vydána! Klepněte pro přejití na stránku verzí. Vybrané Obálka nebyla nalezena Hledat Otevřít na webu - Oprávnění oznámení Přejít na - Vyžadováno pro kontrolu novějších verzí aplikace Právě jste dokončili základní nastavení aplikace! Chcete se naučit jak aplikaci ovládat, tím že přejděte do Pomocí? Včera Jít zpět diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml index b6afada6..4e882379 100644 --- a/app/src/main/res/values-de/strings.xml +++ b/app/src/main/res/values-de/strings.xml @@ -5,9 +5,6 @@ --> - Neue Updates - Update %1$s wurde gerade veröffentlicht! Klicken Sie hier, um zur Veröffentlichungsseite zu gelangen. - Download Bibliothek Verlauf Durchsuchen @@ -18,21 +15,17 @@ Buch löschen? Buch verschieben? Leseverlauf löschen? - Überprüfen von Updates aktivieren? Sie können auswählen, welche Bücher Sie hinzufügen möchten. Titel und Coverbild des Buches können Sie später bearbeiten. Der Ladevorgang kann mehrere Minuten dauern. Wählen Sie die Kategorie, in die Sie alle ausgewählten Bücher verschieben möchten (%1$s). Alle ausgewählten Bücher werden in die ausgewählte Kategorie verschoben. Dadurch wird das Buch aus der Datenbank gelöscht. Von Ihrem Gerät wird das Buch jedoch nicht gelöscht. Wählen Sie die Kategorie aus, in die Sie dieses Buch verschieben möchten. Dieses Buch wird in die ausgewählte Kategorie verschoben. - Durch Aktivieren von „Nach Updates suchen“ ruft die App bei jedem Start der App die neuesten Versionsinformationen von „api.github.com“ ab. Möchten Sie fortfahren und „Nach Updates suchen“ aktivieren? Keine Beschreibung. Der Buchinhalt ist leer. Bitte stellen Sie sicher, dass der Buchinhalt nicht leer ist und aktualisieren Sie ihn. - Etwas ist schiefgelaufen. Versuche es später erneut. Titelbild konnte nicht zurückgesetzt werden. Geschlossene Quelle Lesen Sie Ihre Lieblingsbücher und sortieren Sie sie nach Kategorien Lassen Sie Ihr letztes gelesenes Buch die Seiten einer neuen großartigen Geschichte Ihrer Lesereise öffnen %1$s ausgewählt - %1$s aktualisieren Ausgewählt «%1$s» Abbrechen Gewähren @@ -70,8 +63,6 @@ Farbvorgabe Hintergrundfarbe Schriftfarbe - Nach Updates suchen - Beim Start nach einer neueren App-Version suchen Seitenränder Doppelklicken Sie auf die Übersetzung Doppelklicken Sie auf den Absatz, um ihn zu übersetzen @@ -103,7 +94,6 @@ Dieses Buch wurde erfolgreich verschoben. Kopieren Dieses Buch wurde erfolgreich gelöscht. - Die neuste Version der App ist bereits installiert. Das Titelbild wurde erfolgreich zurückgesetzt. Das Verlaufselement wurde erfolgreich gelöscht. Quecksilber @@ -133,8 +123,6 @@ Gewährt Speicherberechtigung Erforderlich, um Ihr Gerät zu scannen und Bücher zu finden - Benachrichtigungsberechtigung - Erforderlich, um nach einer neueren App-Version zu suchen Alles ist erledigt! Sie haben die Grundeinstellungen der App erfolgreich abgeschlossen. Möchten Sie anhand des Hilfebildschirms erfahren, wie Sie die App verwenden? Heute @@ -157,8 +145,6 @@ Zurücksetzen Ausgewählt App-Symbol - Neues Update von Book\'s Story! - Es wurde eine neue App-Version gefunden. Möchten Sie fortfahren und zur Veröffentlichungsseite gehen? Wenn Sie die heruntergeladenen Bücher nicht sehen, versuchen Sie, die Liste zu aktualisieren, indem Sie sie nach unten ziehen. Stellen Sie sicher, dass Ihre Bücher das unterstützte Dateiformat haben. Klicken Sie dann auf das Buch, um es auszuwählen, oder halten Sie gedrückt, um seinen Speicherort anzuzeigen. Nachdem Sie alle gewünschten Bücher ausgewählt haben, klicken Sie auf das Häkchensymbol in der oberen rechten Ecke, warten Sie, bis alle Bücher geladen sind, und klicken Sie auf «Hinzufügen». Jetzt sollten Sie alle Bücher sehen, die Sie in der Liste hinzugefügt haben Hilfe Berechtigung erteilen? @@ -197,7 +183,6 @@ Normal Kursiv Unbekannt - Klicken Sie hier, um nach Updates zu suchen Was ist neu Open Source-Lizenzen Credits diff --git a/app/src/main/res/values-es/strings.xml b/app/src/main/res/values-es/strings.xml index ee8dabd8..9bab7393 100644 --- a/app/src/main/res/values-es/strings.xml +++ b/app/src/main/res/values-es/strings.xml @@ -1,12 +1,12 @@ + - Nuevas actualizaciones - ¡Actualización %1$s recién lanzada! Haz clic para ir a la página de lanzamiento. - Descargar + --> + + Biblioteca Historial Navegar @@ -18,10 +18,8 @@ ¿Mover libros? ¿Borrar libros? ¿Borrar libro? - ¡Nueva actualización de Book\'s Story! ¿Mover libro? ¿Borrar el historial de lectura? - ¿Comprobar actualizaciones? Elija la categoría a la que desea mover todos los libros seleccionados (%1$s). Todos los libros seleccionados serán trasladados a la categoría seleccionada. Elija la categoría a la que quiere mover este libro. Este libro será trasladado a la categoría seleccionada. Eliminará todo el historial de la base de datos. Después de borrar todo el historial, el orden de los libros se restablecerá. @@ -57,8 +55,6 @@ Indentación del párrafo Color de fondo Color de fuente - Buscar actualizaciones - Buscar nueva versión de la aplicación al abrirla Relleno lateral Traducción de doble clic Rojo @@ -83,22 +79,17 @@ ¡Bienvenid@ a Book\'s Story! Arrastrar Borrar - Permisos de notificación Necesitamos permiso de almacenamiento para escanear su dispositivo en busca de libros. Sin este permino, no podrá añadir libros. Eliminará todos los libros seleccionados(%1$s) de la base de datos. No eliminará los libros seleccionados de su dispositivo. Puede escoger qué libros desea añadir. Puede editar el título y la portada del libro más adelante. El proceso de carga puede durar varios minutos. Eliminará este libro de la base de datos. No eliminará este libro de su dispositivo. - Se encontró una nueva versión de la aplicación. ¿Quieres continuar e ir a la página de actualizaciones? No se ha encontrado ninguna aplicación de traducción. El contenido del libro está vacío. Por favor, asegúrate de que el contenido del libro no está vacío y actualizado. - Algo salió mal. Inténtelo de nuevo más tarde. - Al habilitar «Comprobar actualizaciones» la aplicación conseguirá la última información de lanzamiento de «api.github.com» cada vez que comience la aplicación. ¿Quieres continuar y habilitar «Comprobar actualizaciones»? No se pudo reiniciar la portada. Expanda la colección de libros de la biblioteca con sus descargas Lea sus libros favoritos y ordénelos en categorías Deje que su último libro leído abra las páginas de una nueva gran historia en su viaje de lectura Traducir - Actualizar %1$s Conceder permiso Nunca Copiar @@ -139,7 +130,6 @@ Presione atrás de nuevo para salir La portada fue eliminada. Para empezar a leer el libro haga clic en el botón en la esquina inferior derecha del libro que desea leer. También puede comenzar a leer el libro haciendo clic en la portada para ver los detalles del libro y luego haga clic en el botón en la esquina inferior derecha. El progreso será guardado y restaurado automáticamente. Puede traer barras superiores e inferiores haciendo clic en cualquier lugar de la pantalla. Al hacer clic en el título del libro será transferido a los detalles del libro. Al hacer clic en el icono de engranaje verá los ajustes del lector. Puedes usar el control deslizante de la barra inferior para cambiar el progreso. - La última versión de la aplicación ya está instalada. La imagen de la portada se restableció correctamente. El libro fue eliminado. Júpiter @@ -159,7 +149,6 @@ Desconocido Versión de la aplicación Book\'s Story v%1$s - Haz clic para comprobar si hay actualizaciones ¡Gloria a Ucrania! Diseño Ir a la @@ -191,7 +180,6 @@ ¿Cómo utilizo la traducción de doble clic? ¡Hacia un mundo donde las palabras cautivan, enseñan y conducen a increíbles aventuras! ¡Vamos a preparar algunas cosas! Concedido - Requerido para buscar si hay una versión más reciente de la aplicación ¡Todo está listo! Permiso de almacenamiento En primer lugar, vaya a los ajustes del lector (ver: ¿Cómo personalizo el lector?), luego encienda el ajuste correspondiente. Después de eso, comienza a leer el libro (ver: ¿Cómo leo un libro?). Ahora si hace doble clic en el párrafo deseado, el traductor externo se abrirá con el texto del párrafo. diff --git a/app/src/main/res/values-fr/strings.xml b/app/src/main/res/values-fr/strings.xml index 57ddc98a..246b84ff 100644 --- a/app/src/main/res/values-fr/strings.xml +++ b/app/src/main/res/values-fr/strings.xml @@ -5,7 +5,6 @@ --> - Télécharger Bibliothèque Historique Naviguer @@ -18,23 +17,19 @@ Supprimer le livre ? Déplacer le livre ? Effacer l\'historique de lecture ? - Activer la vérification des mises à jour ? Vous pouvez choisir les livres que vous souhaitez ajouter. Vous pouvez modifier le titre et l\'image de couverture du livre par la suite. Le chargement peut prendre plusieurs minutes. Cela supprimera tous les livres sélectionnés (%1$s) de la base de données. Ceci ne supprimera pas les livres sélectionnés de votre appareil. Cela supprimera ce livre de la base de données. Ceci ne le supprimera pas de votre appareil. Choisissez la catégorie dans laquelle vous souhaitez déplacer ce livre. Ce dernier sera déplacé vers la catégorie choisie. - En activant la fonction “Vérifier les mises à jour”, l\'application récupérera les informations de la dernière version de “api.github.com” à chaque fois que l\'application démarrera. Voulez-vous continuer et activer “Vérifier les mises à jour” ? Nous avons besoin de l\'autorisation de stockage pour scanner votre appareil à la recherche de livres Aucune application de traduction n\'a été trouvée. Aucune application de dictionnaire n\'a été trouvée. Aucune application pour partager n\'a été trouvée. - Quelque chose s\'est mal passé. Réessayez plus tard. L\'image de couverture n\'a pas pu être réinitialisée. Source fermée Élargissez la collection de livres de la bibliothèque par vos téléchargements Lisez vos livres préférés et classez-les par catégories %1$s sélectionné - Mise à jour %1$s Préréglage %1$s Sélectionné « %1$s » Déplacer @@ -134,7 +129,6 @@ Ce livre a été déplacé avec succès. Copié L\'historique a été supprimé avec succès. - La dernière version de l\'application est déjà installée. L\'image de couverture a été réinitialisée avec succès. Cet élément de l\'historique a été supprimé avec succès. Chemin du fichier @@ -142,7 +136,6 @@ Taille du fichier Inconnu Book\'s Story v%1$s - Cliquez pour vérifier les mises à jour Signaler un bug Nouveautés Licences Open source @@ -189,8 +182,6 @@ Autorisé Permission de Stockage Nécessaire pour scanner votre appareil et trouver des livres - Permission de notifications - Nécessaire pour vérifier si une nouvelle version de l\'application est disponible Tout est prêt! Hier Poursuivre la lecture @@ -223,16 +214,12 @@ Tryzub Profile Github Glisser - Nouvelles mises à jour Nous avons besoin de l\'autorisation de stockage pour scanner votre appareil et trouver des livres. Sans cette autorisation, vous ne pourrez pas ajouter de livre. Choisissez la catégorie dans laquelle vous souhaitez déplacer tous les livres sélectionnés (%1$s). Tous les livres sélectionnés seront déplacés vers la catégorie choisie. - La mise à jour %1$s vient d\'être réalisée! Cliquez pour accéder à la page de publication. - Nouvelle mise à jour de Book\'s Story! Ajouter des livres ? Pas de description. Quelque chose s\'est mal passé. L\'historique complet sera supprimé de la base de données. Après la suppression de tout l\'historique, l\'ordre des livres sera réinitialisé. - Une nouvelle version de l\'application a été trouvée. Voulez-vous continuer et aller à la page de publication ? Aucune application de navigation n\'a été trouvée. Le contenu du livre est vide. Veuillez vous assurer que le contenu du livre n\'est pas vide et de le mettre à jour. Laissez le dernier livre que vous avez lu ouvrir les pages d\'une grande et nouvelle histoire dans votre aventure de lecture @@ -249,11 +236,9 @@ Thème sombre Noir pur (OLED) Thème de l\'application - Vérifier les mises à jours Double retour en arrière pour sortir Hauteur du paragraphe Contraste du thème - Vérifier les nouvelles versions de l\'application lors du démarrage Appuyer deux fois sur retour pour quitter l\'application Famille de police Style de police diff --git a/app/src/main/res/values-hi/strings.xml b/app/src/main/res/values-hi/strings.xml index aaee0d0b..4ae38388 100644 --- a/app/src/main/res/values-hi/strings.xml +++ b/app/src/main/res/values-hi/strings.xml @@ -5,9 +5,6 @@ --> - नये अपडेट - बुक्स स्टोरी का नया अपडेट! - डाउनलोड करें पुस्तकालय इतिहास सेटिंग्स @@ -18,13 +15,10 @@ किताबें शामिल करें ? किताबें स्थानांतरित करें? किताब हटाएं? - अपडेट्स की जाँच चालू करें? वह श्रेणी चुनें जिसमें आप सभी चयनित पुस्तकों को ले जाना चाहते हैं(%1$s)। सभी चयनित पुस्तकें चयनित श्रेणी में ले जाई जाएँगी। - नया ऐप वर्शन मिला। क्या आप आगे बढ़ना चाहते हैं और रिलीज़ पेज पर जाना चाहते हैं? कुछ गड़बड़ हुआ है । कोई अनुवादक ऐप नहीं मिला । शेर करने के लिए कोई ऐप नहीं मिला । - कुछ ग़लत हुआ। बाद में पुनः प्रयास करें। बंद स्रोत कोड अपनी पसंदीदा पुस्तकें पढ़ें और उन्हें श्रेणियों के बीच क्रमित करें अपनी आखिरी पढ़ी हुई किताब से अपनी पढ़ने की यात्रा की एक नई महान कहानी के पन्ने खोलिए @@ -76,7 +70,6 @@ सामान्य क्रमबद्ध करना ऐप भाषा - अपडेट %1$s अभी जारी हुआ! रिलीज़ पेज पर जाने के लिए क्लिक करें। किताबें हटाएँ? किताब को स्थानांतरित करें ? और देखें @@ -94,14 +87,12 @@ वह श्रेणी चुनें जिसमें आप इस पुस्तक को ले जाना चाहते हैं। यह पुस्तक चयनित श्रेणी में ले जाई जाएगी। यह डेटाबेस से पूरा इतिहास मिटा देगा। पूरा इतिहास मिटाने के बाद, किताबों का क्रम फिर से सेट हो जाएगा। हमें किताबों के लिए आपके डिवाइस को स्कैन करने के लिए भंडारण अनुमति की आवश्यकता है - «अपडेट की जाँच करें» को सक्षम करके, ऐप हर बार ऐप शुरू होने पर «api.github.com» से नवीनतम रिलीज़ जानकारी प्राप्त करेगा। क्या आप आगे बढ़ना चाहते हैं और «अपडेट की जाँच करें» को सक्षम करना चाहते हैं? कोई वर्णन नहीं। कोई शब्दकोश ऐप नहीं मिला । कोई ब्राउज़र ऐप नहीं मिला । पुस्तक की सामग्री रिक्त है। कृपया जाँच करें कि पुस्तक की सामग्री रिक्त न हो और उसे अपडेट करें। कवर छवि रीसेट नहीं की जा सकी । अपने डाउनलोड के साथ पुस्तकालय के पुस्तक संग्रह का विस्तार करें - %1$s अपडेट करें प्रीसेट %1$s हटाना मिटाना @@ -113,8 +104,6 @@ पृष्ठभूमि का रंग पूरी तरह से काला करें थीम कंट्रास्ट ऐप थीम - अद्यतनों के लिए जाँच करें - स्टार्टअप पर ऐप के नए संस्करण की जाँच करें बाहर निकलने के लिए दो बार पीछे जाने की बटन दबाएँ बाहर निकलने के लिए दो बार पीछे जाने की बटन दबाएँ फ़ॉन्ट परिवार @@ -199,7 +188,6 @@ धारणा विस्तारक लाइन मोटाई स्क्रीन अनुकूलन लाल - ऐप का नवीनतम संस्करण पहले से इंस्टॉल है। कवर छवि सफलतापूर्वक रीसेट कर दी गई। दस्तावेज पथ फ़ाइल अंतिम बार खोली गई @@ -216,7 +204,6 @@ मैं ऐप को कैसे अनुकूलित करूं? के पास जाओ किताब की कहानी v%1$s - अपडेट जांचने के लिए क्लिक करें नया क्या है ओपन सोर्स लाइसेंस माउस diff --git a/app/src/main/res/values-in/strings.xml b/app/src/main/res/values-in/strings.xml index a6b3daec..1440f85f 100644 --- a/app/src/main/res/values-in/strings.xml +++ b/app/src/main/res/values-in/strings.xml @@ -1,2 +1,9 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/values-it/strings.xml b/app/src/main/res/values-it/strings.xml index 2f2280f2..461dae9b 100644 --- a/app/src/main/res/values-it/strings.xml +++ b/app/src/main/res/values-it/strings.xml @@ -1,13 +1,12 @@ + - Nuovi aggiornamenti - Nuovo aggiornamento di Book\'s Story! - Aggiornamento %1$s appena rilasciato! Clicca per andare alla pagina del rilascio. - Scarica + --> + + Biblioteca Cronologia Predefinito @@ -49,7 +48,6 @@ Elimina Ricerca web Abilitato - Permesso per le notifiche Icone Preferenze tema Indietro @@ -64,7 +62,6 @@ Tutti i libri selezionati sono stati spostati correttamente. Nessuna app browser trovata. Cancellare la cronologia di lettura? - Abilita controlli degli aggiornamenti? Nessuna app dizionario trovata. Abbiamo bisogno del permesso di archiviazione per la scansione del Tuo Dispositivo per i libri. Senza questo permesso, non sarai in grado di aggiungere i libri. Fatto @@ -86,7 +83,6 @@ Colori Scegli la nuova copertina dalle tue foto Sistema - Controlla aggiornamenti Preset colori Indentazione paragrafo Rosso @@ -100,13 +96,10 @@ Puoi scegliere quali libri vuoi aggiungere. È possibile modificare il titolo e l\'immagine di copertina in seguito. Il processo di caricamento può richiedere fino a diversi minuti. Elimina l\'intera cronologia dal database. Dopo avere eliminato la cronologia, l\'ordine dei libri sarà reimpostato. Eliminerà tutti i libri selezionati (%1$s) dal database. Non eliminerà i libri selezionati dal tuo dispositivo. - Nuova versione dell\'app trovata. Vuoi procedere alla pagina di rilascio? - Abilitando il controllo degli aggiornamenti l\'app cercherà all\'avvio le informazioni sulla versione più recente da «api.github.com». Vuoi procedere e abilitare il controllo degli aggiornamenti? Nessuna descrizione. Qualcosa è andato storto. Abbiamo bisogno del permesso di archiviazione per cercare i libri nel tuo dispositivo Leggi i tuoi libri preferiti e ordinali per categoria - Aggiorna %1$s Ordina Colori Filtri @@ -156,7 +149,6 @@ Caratteri Preferenze lingua Crea nuovo preset di colori - Qualcosa è andato storto. Riprova più tardi. Il file è vuoto, danneggiato o mancante. Verifica il file o aggiorna il percorso e riprova. Come aggiungo libri alla Libreria? Vai a @@ -193,7 +185,6 @@ Luminosità Ordinamento Famiglia di font - L\'ultima versione dell\'app è già installata. Libreria Benvenuti in Book\'s Story! per riga @@ -213,7 +204,6 @@ Libreria Questo libro è stato spostato con successo. Copiato - Clicca per controllare gli aggiornamenti La maggior parte dei pulsanti icona hanno dei suggerimenti, che possono aiutarti se non sai cosa fa un pulsante icona. Per mostrare il tooltip puoi tenere premuto su un pulsante icona. Vai alla Per prima cosa, vai alle impostazioni del Lettore(vedi: Come personalizzare il Lettore?), quindi attiva l\'impostazione corrispondente. Dopodiché, inizia a leggere il libro (vedi: Come leggere un libro?). Ora, se fai doppio clic sul paragrafo desiderato, verrà aperto un traduttore esterno con il testo del paragrafo. @@ -276,7 +266,6 @@ Impostazioni Ripristina immagine di copertina Ripristina l\'immagine di copertina del libro al valore predefinito - Controlla la versione più recente dell\'app all\'avvio Premere due volte indietro per uscire Stile del font Margini laterali @@ -301,7 +290,6 @@ Concesso Autorizzazione di archiviazione Necessario per scansionare il tuo dispositivo e trovare i libri - Necessario per verificare la presenza di una versione più recente dell\'app Hai completato con successo le impostazioni di base dell\'app. Vuoi imparare a usare l\'app leggendo la schermata di Aiuto? Aggiungi file La tua libreria diff --git a/app/src/main/res/values-pl/strings.xml b/app/src/main/res/values-pl/strings.xml index 5c6059ce..c25c233e 100644 --- a/app/src/main/res/values-pl/strings.xml +++ b/app/src/main/res/values-pl/strings.xml @@ -5,7 +5,6 @@ --> - Pobierz Historia Pomoc Przenieś @@ -30,8 +29,6 @@ Zielony Niebieski Wyłączono - Nowe aktualizacje - Nowa aktualizacja Book\'s Story! Ustawienia Biblioteka Przeglądaj @@ -55,13 +52,10 @@ Styl czcionki Odstępy między literami Język aplikacji - Sprawdź dostępność aktualizacji Tak, przejdź do Pomoc Usuń obraz okładki - Coś poszło nie tak. Spróbuj ponownie później. Pluton Planowanie - Włączyć sprawdzanie aktualizacji? Szybka zmiana ustawienia koloru O aplikacji Przyznać dostęp? @@ -73,7 +67,6 @@ Wybierz kategorię, do której chcesz przenieść wszystkie wybrane książki (%1$s). Wszystkie wybrane książki zostaną przeniesione do wybranej kategorii. To spowoduje usunięcie tej książki z bazy danych, ale nie usunie jej z twojego urządzenia. To spowoduje usuniecie całej historii z bazy danych. Po usunięciu całej historii kolejność książek zostanie zresetowana. - Włączając « Sprawdź aktualizacje », aplikacja pobierze najnowsze informacje o wersji z « api.github.com » za każdym razem, gdy aplikacja się uruchomi. Czy chcesz kontynuować i włączyć «Sprawdź aktualizacje»? Potrzebujemy uprawnień do przechowywania, aby przeskanować Twoje urządzenie w poszukiwaniu książek Brak opisu. Coś poszło nie tak. @@ -84,7 +77,6 @@ Przeczytaj swoje ulubione książki i posortuj je między kategoriami Niech ostatnia czytana książka otworzy strony nowej wspaniałej historii twojej czytelniczej podróży Wybrano %1$s - Zaktualizuj %1$s Wyszukiwanie w sieci Zmień obraz okładki Czytanie @@ -97,7 +89,6 @@ Zmień kolor tła na całkowicie czarny Kontrast motywu Motyw aplikacji - Sprawdź przy uruchomieniu, czy jest dostępna nowsza wersja aplikacji Naciśnij dwukrotnie wstecz, aby wyjść z aplikacji Rodzina czcionek Rozmiar czcionki @@ -127,7 +118,6 @@ Przesuń w lewo lub w prawo, aby zmienić ustawienie koloru Treść książki jest pusta. Upewnij się, że zawartość książki nie jest pusta i zaktualizuj ją. Nie znaleziono aplikacji tłumacza. - Znaleziono nową wersję Book\'s Story. Chcesz ją pobrać? Klikając przycisk « Pobierz », zostaniesz przeniesiony do przeglądarki i automatycznie pobierzesz najnowszą aktualizację. Siatka Standardowy Zresetuj obraz okładki @@ -156,7 +146,6 @@ Ogólne, filtr, sortowanie Tłumacz System - Aktualizacja%1$s właśnie została wydana! Kliknij, aby przejść do strony. Wybierz nową okładkę ze swoich zdjęć Preset %1$s Usuń bieżący obraz okładki książki @@ -188,7 +177,6 @@ Zacznij czytać książkę (patrz: Jak mogę przeczytać książkę?), A następnie przynieś górne i dolne paski, klikając w dowolnym miejscu na ekranie. Następnie kliknij ikonę zębatki w prawym górnym rogu. Spowoduje to wyświetlenie wszystkich ustawień Czytnika. Drugim sposobem jest przejście do Nazwij ustawienie… Rozmiar siatki - Zezwolenie na powiadomienia Kolejność sortowania Nie znaleziono obrazu okładki Wnieśli wkład @@ -199,7 +187,6 @@ Wysoki Obraz okładki został pomyślnie zmieniony. Ta książka została pomyślnie przeniesiona. - Najnowsza wersja aplikacji jest już zainstalowana. Obraz okładki został pomyślnie zresetowany. Element historii został pomyślnie usunięty. Plik ostatnio otwarty @@ -223,7 +210,6 @@ Jak mogę tworzyć i modyfikować ustawienia kolorów? Preferencje języka Uprawnienie do przechowywania - Wymagane, aby sprawdzić nowszą wersję aplikacji Dzisiaj Wróć Obraz okładki @@ -255,7 +241,6 @@ Rozdziały Brak rozdziałów Rozdziały - Kliknij, aby sprawdzić aktualizacje Jeśli nie widzisz pobranych książek, spróbuj odświeżyć listę, przeciągając ją w dół. Upewnij się, że Twoje książki posiadają obsługiwany format pliku. Następnie kliknij książkę, aby ją wybrać lub przytrzymaj, aby pokazać jej lokalizację. Po wybraniu wszystkich książek, które chcesz, kliknij ikonę znacznika wyboru w prawym górnym rogu, poczekaj na załadowanie wszystkich książek i kliknij « Dodaj ». Teraz powinieneś zobaczyć wszystkie książki, które dodałeś do Historia czytania Opuść wyszukiwanie diff --git a/app/src/main/res/values-pt-rBR/strings.xml b/app/src/main/res/values-pt-rBR/strings.xml index 2392fffd..7a21f2ab 100644 --- a/app/src/main/res/values-pt-rBR/strings.xml +++ b/app/src/main/res/values-pt-rBR/strings.xml @@ -9,7 +9,6 @@ Mover livro? Apagar livro? Padrão - Habilitar verificação de atualizações? Cancelar Mover Nunca @@ -28,7 +27,6 @@ Permitir Feito Desabilitado - Baixar Apagar livros? Biblioteca Configurações @@ -57,9 +55,6 @@ Texto Miscelânea Desabilitado - Novas Atualizações - A atualização %1$s acabou de lançar! Clique para ir à página de lançamento. - Novo update do Book\'s Story! Adicionar livros? Precisamos de permissão de acesso ao armazenamento para procurar livros no seu dispositivo. Sem essa permissão, você não será capaz de adicionar um livro. Apagar @@ -166,8 +161,6 @@ Lido Tamanho da grade Dar permissão - Atualizar %1$s - Nova versão do aplicativo disponível. Deseja seguir para a página de lançamentos? Sem descrição. %1$s selecionado Código fechado @@ -185,7 +178,6 @@ Mais Caminho Tryzub - Ativando «Verificação de atualizações» o aplicativo receberá as informações mais recentes de «api.github.com» toda vez que ele for iniciado. Deseja prosseguir e ativar «Verificação de atualizações»? Prefêrencia de temas Ordem de classificação Continuar a ler @@ -194,7 +186,6 @@ Permissão de armazenamento O que há de novo Ajude a traduzir - Permissão de notificações Está tudo feito! Imagem da capa Configurações do leitor @@ -213,7 +204,6 @@ Trocar imagem da capa Fonte, texto, tradutor Geral, filtro, ordem - Procurar atualizações Manter a tela ligada Adicionar arquivos Sua biblioteca @@ -243,7 +233,6 @@ Leia seus livros favoritos e organize-os em categorias Não foi possível restaurar a imagem da capa. Espessura da linha - Algo deu errado. Tente novamente. Aumente sua velocidade de leitura focando no centro Clique duas vezes no parágrafo para traduzi-lo Troca rápida do padrão de cores @@ -252,7 +241,6 @@ Restaure a imagem do livro de volta para o padrão Escolha a nova capa das suas fotos Apagar a imagem atual da capa do livro - Procurar por uma atualização do app ao abrir Traduzir com toque duplo Volte duas vezes para sair Aplique uma margem para área de recorte @@ -280,7 +268,6 @@ Destaque o início de cada palavra Como faço para mover ou excluir livros? Como faço para editar um livro? - Clique para verificar se há atualizações Como faço para gerenciar o histórico? Abrir no navegador Nomeie o padrão… @@ -291,7 +278,6 @@ Vá para as configurações de Aparência (veja: Como personalizar o Reader?). Você pode modificar todas as configurações de predefinições de cores na caixa em «Predefinição de cores» na subcategoria «Cores». Para criar uma nova predefinição de cores, clique no botão de ícone «Adicionar». Existem várias maneiras de modificar uma predefinição de cores: clicando no campo de texto, você pode alterar o nome da predefinição de cores, movendo os controles deslizantes, você pode alterar as cores da predefinição de cores, clicando no botão de ícone «Aleatório», você pode embaralhar todas as cores. Se quiser excluir a predefinição de cores, clique no botão de ícone «Excluir». nível Apagar elemento do histórico - Necessário verificar se há uma versão mais recente do aplicativo O que é e como usar o Expansor de Percepção? Voltar ao ponto-salvo Espessura da marcação @@ -355,7 +341,6 @@ Primeiro, vá para as configurações do Reader (veja: Como personalizar o Leitor?), então ative a configuração correspondente. Depois disso, comece a ler o livro (veja: Como ler um livro?). Agora, se você clicar duas vezes no parágrafo desejado, o tradutor externo será aberto com o texto do parágrafo. Ligado (Inverso) Apagar o histórico inteiro - A última versão do aplicativo já está instalada. Makemake Fixar Arquivo não existe diff --git a/app/src/main/res/values-ro/strings.xml b/app/src/main/res/values-ro/strings.xml index 21a65625..ae52b102 100644 --- a/app/src/main/res/values-ro/strings.xml +++ b/app/src/main/res/values-ro/strings.xml @@ -5,6 +5,5 @@ --> - Update nou Standard \ No newline at end of file diff --git a/app/src/main/res/values-ta/strings.xml b/app/src/main/res/values-ta/strings.xml index d39c8eff..eff84716 100644 --- a/app/src/main/res/values-ta/strings.xml +++ b/app/src/main/res/values-ta/strings.xml @@ -10,9 +10,7 @@ நூலகம் வரலாறு புத்தகங்களைச் சேர்க்கவா? - புதுப்பிப்புகளை சரிபார்க்கவா? இந்த புத்தகத்தை நீங்கள் நகர்த்த விரும்பும் வகையைத் தேர்வுசெய்க. இந்த நூல் தேர்ந்தெடுக்கப்பட்ட வகைக்கு மாற்றப்படும். - புதிய பயன்பாட்டு பதிப்பு கண்டறியப்பட்டது. நீங்கள் தொடர விரும்புகிறீர்களா? ஏதோ தவறு நடந்தது. மூடிய மூல உங்கள் பதிவிறக்கங்களுடன் நூலகத்தின் புத்தக சேகரிப்பை விரிவாக்குங்கள் @@ -105,11 +103,9 @@ கோப்பு வடிவம் இயல்புநிலை வாசிப்பு வரலாற்றை நீக்கவா? - செயல்படுத்துவதன் மூலம் «புதுப்பிப்புகளைச் சரிபார்க்கவும்» பயன்பாடு தொடங்கும் ஒவ்வொரு முறையும் «api.github.com இருந்து இலிருந்து அண்மைக் கால வெளியீட்டு தகவல்களை மீட்டெடுக்கும். நீங்கள் தொடர விரும்புகிறீர்களா «புதுப்பிப்புகளை சரிபார்க்கவும்»? புத்தகங்களுக்காக உங்கள் சாதனத்தை ச்கேன் செய்ய எங்களுக்கு சேமிப்பக இசைவு தேவை விளக்கம் இல்லை. %1$s தேர்ந்தெடுக்கப்பட்டன - புதுப்பிப்பு %1$s செயல்தவிர் நகலெடு மொழிபெயர்த்திடு @@ -161,7 +157,6 @@ தோற்ற அமைப்புகளுக்குச் செல்லுங்கள் (பார்க்க: வாசகரை எவ்வாறு தனிப்பயனாக்குவது?). «வண்ண முன்னமைக்கப்பட்ட» அமைப்பில் எந்த வண்ண முன்னமைவைப் பயன்படுத்த வேண்டும் என்பதை நீங்கள் தேர்வு செய்யலாம். அதைத் தேர்ந்தெடுக்க விரும்பிய வண்ண முன்னமைவைக் சொடுக்கு செய்க, இது உங்கள் வண்ணங்களை வாசகரில் மாற்றும். வண்ண முன்னமைவை மறுவரிசைப்படுத்த விரும்பினால், அதைத் தேர்ந்தெடுத்து «கைப்பிடி» ஐகான்-பொன்ட்டைப் பிடித்துக் கொள்ளுங்கள், பின்னர் அதை விரும்பிய நிலைக்கு நகர்த்தவும். வண்ண முன்னமைவை வேகமாக மாற்ற, தோற்ற அமைப்பின் «வண்ணங்கள்» துணைப்பிரிவில் தொடர்புடைய அமைப்பை இயக்குவதன் மூலம் வண்ண முன்னமைவுகளை விரைவாக மாற்றலாம். புலனுணர்வு விரிவாக்கியை நான் எவ்வாறு பயன்படுத்துவது? நம்பமுடியாத சாகசங்களை கவர்ச்சியாக, கற்பித்தல் மற்றும் வழிநடத்தும் ஒரு உலகத்திற்கு! சில விசயங்களை அமைப்போம்! - புதிய பயன்பாட்டு பதிப்பை சரிபார்க்க வேண்டும் எல்லாம் முடிந்தது! இன்று பிழை @@ -180,10 +175,6 @@ தேடுங்கள்… தனிப்பயன் ஒளி ஒளி - புதிய புதுப்பிப்புகள் - புத்தகத்தின் கதையின் புதிய புதுப்பிப்பு! - புதுப்பிப்பு %1$s இப்போது வெளியிடப்பட்டது! வெளியீட்டு பக்கத்திற்கு செல்ல சொடுக்கு செய்க. - பதிவிறக்கம் உலாவு அமைப்புகள் பயன்பாடு பற்றி @@ -202,7 +193,6 @@ மொழிபெயர்ப்பாளர் பயன்பாடு எதுவும் கிடைக்கவில்லை. பகிர்வதற்கு பயன்பாடு இல்லை. புத்தக உள்ளடக்கம் காலியாக உள்ளது. தயவுசெய்து, புத்தக உள்ளடக்கம் காலியாக இல்லை என்பதை உறுதிப்படுத்திக் கொள்ளுங்கள். - ஏதோ தவறு நடந்தது. பின்னர் மீண்டும் முயற்சிக்கவும். அகராதி பயன்பாடு எதுவும் கிடைக்கவில்லை. உலாவி பயன்பாடு எதுவும் கிடைக்கவில்லை. கவர் படத்தை மீட்டமைக்க முடியவில்லை. @@ -222,8 +212,6 @@ முழுமையான இருண்ட கருப்பொருள் மாறுபாடு பயன்பாட்டு கருப்பொருள் - புதுப்பிப்புகளை சரிபார்க்கவும் - தொடக்கத்தில் புதிய பயன்பாட்டு பதிப்பை சரிபார்க்கவும் எழுத்துரு அளவு வரி உயரம் பத்தி உயரம் @@ -264,7 +252,6 @@ வெளியேற மீண்டும் அழுத்தவும் தேர்ந்தெடுக்கப்பட்ட அனைத்து புத்தகங்களும் வெற்றிகரமாக சேர்க்கப்பட்டன. வரலாறு வெற்றிகரமாக நீக்கப்பட்டது. - பயன்பாட்டின் அண்மைக் கால பதிப்பு ஏற்கனவே நிறுவப்பட்டுள்ளது. கவர் படம் வெற்றிகரமாக மீட்டமைக்கப்பட்டது. கோப்பு பாதை கோப்பு கடைசியாக திறக்கப்பட்டது @@ -272,7 +259,6 @@ அத்தியாயங்கள் இல்லை பாடங்கள் புத்தகத்தின் கதை v%1$s - புதுப்பிப்புகளை சரிபார்க்க சொடுக்கு செய்க ஒரு பிழையைப் புகாரளிக்கவும் புதியது என்ன வரவு @@ -306,7 +292,6 @@ கருப்பொருள் விருப்பத்தேர்வுகள் வழங்கப்பட்டது உங்கள் சாதனத்தை ச்கேன் செய்து புத்தகங்களைக் கண்டுபிடிக்க வேண்டும் - அறிவிப்புகள் இசைவு பயன்பாட்டின் அடிப்படை அமைப்பை நீங்கள் வெற்றிகரமாக முடித்துவிட்டீர்கள். உதவித் திரையைப் படிப்பதன் மூலம் பயன்பாட்டை எவ்வாறு பயன்படுத்துவது என்பதை அறிய விரும்புகிறீர்களா? நேற்று தொடர்ந்து படிக்கவும் diff --git a/app/src/main/res/values-tr/strings.xml b/app/src/main/res/values-tr/strings.xml index 659dfb05..b0a10a11 100644 --- a/app/src/main/res/values-tr/strings.xml +++ b/app/src/main/res/values-tr/strings.xml @@ -8,17 +8,6 @@ Varsayılan - - Yeni güncellemeler - Book\'s Story için yeni güncelleme! - - Güncelleme %1$s yeni yayınlandı! - Yayın sayfasına gitmek için tıklayın. - - - İndir - - Kütüphane Geçmiş @@ -35,7 +24,6 @@ Kitap silinsin mi? Kitap taşınsın mı? Okuma geçmişi silinsin mi? - Güncellemeleri kontrol etme etkinleştirilsin mi? Düzenle @@ -68,17 +56,6 @@ Tüm geçmiş veritabanından silinecektir. Geçmişi sildikten sonra kitapların sıralaması sıfırlanacaktır. - - Yeni bir uygulama sürümü bulundu. - İşleme devam edip yayın sayfasına gitmek istiyor musunuz? - - - «Güncellemeleri kontrol et» özelliğini etkinleştirerek - uygulama her açıldığında «api.github.com» üzerinden - en son sürüm bilgilerini alacaktır. - İşleme devam edip «Güncellemeleri kontrol et» özelliğini etkinleştirmek istiyor musunuz? - - Cihazınızı kitaplar için tarayabilmemiz adına depolama iznine ihtiyacımız var @@ -97,10 +74,6 @@ Dosya boş, bozuk veya eksik. Lütfen dosyayı doğrulayın ya da yolu güncelleyerek tekrar deneyin. - - Bir şeyler ters gitti. - Daha sonra tekrar deneyin. - Kapak resmi sıfırlanamadı. Kapalı kaynak Dosya mevcut değil @@ -121,7 +94,6 @@ %1$s seçildi - Güncelle %1$s Ön ayar %1$s Seçilen «%1$s» @@ -205,8 +177,6 @@ Arka plan rengini tamamen siyah yap Tema kontrastı Uygulama teması - Güncellemeleri kontrol et - Uygulama açılışında yeni sürümü kontrol et Çıkmak için iki kez geri bas Uygulamadan çıkmak için geri tuşuna iki kez basın @@ -375,7 +345,6 @@ Bu kitap başarıyla taşındı. Kopyalandı Geçmiş başarıyla silindi. - Uygulamanın en son sürümü zaten yüklü. Kapak resmi başarıyla sıfırlandı. Başlık başarıyla değiştirildi. Yazar başarıyla değiştirildi. @@ -401,7 +370,6 @@ Uygulama sürümü Book\'s Story v%1$s - Güncellemeleri kontrol etmek için tıklayın Hata bildir Yenilikler Açık kaynak lisansları @@ -575,8 +543,6 @@ Verildi Depolama izni Cihazınızı tarayıp kitapları bulmak için gereklidir - Bildirim izni - Yeni uygulama sürümünü kontrol etmek için gereklidir Her şey tamam! Uygulamanın temel ayarlarını başarıyla tamamladınız. diff --git a/app/src/main/res/values-uk/strings.xml b/app/src/main/res/values-uk/strings.xml index d7d77a99..2c332755 100644 --- a/app/src/main/res/values-uk/strings.xml +++ b/app/src/main/res/values-uk/strings.xml @@ -8,12 +8,6 @@ За замовчуванням - - Нові оновлення - Нове оновлення Book\'s Story! - Оновлення %1$s вийшло! Натисніть, щоб перейти на сторінку релізу. - Завантажити - Бібліотека Історія @@ -30,7 +24,6 @@ Видалити книгу? Перемістити книгу? Видалити історію читання? - Увімнкути перевірку на оновлення? Редагувати @@ -41,9 +34,6 @@ Це видалить цю книгу з бази даних. Це не видалить цю книгу з вашого пристрою. Виберіть категорію, в яку ви хочете перемістити цю книгу. Ця книга буде переміщена в обрану категорію. Це видалить всю історію з бази даних. Після видалення всієї історії порядок книг буде скинутий. - Нова версія застосунку була знайдена. Чи бажаєте продовжити та перейти на сторінку релізу? - Увімкнувши «Перевіряти на оновлення» застосунок буде отримувати інформацію про останній реліз з «api.github.com» кожен раз, коли застосунок запускається. Хочете продовжити та увімкнути «Перевіряти на оновлення»? - Нам потрібен дозвіл на сховище, щоб просканувати Ваш Девайс на наявність книг Немає опису. @@ -56,7 +46,6 @@ Файл порожній, пошкоджений або відсутній. Перевірте файл або змініть шлях і спробуйте ще раз. - Щось пішло не так. Спробуйте пізніше. Не вдалося скинути обкладинку. Закритий код Файла не існує @@ -69,7 +58,6 @@ %1$s обрано - Оновлення %1$s Пресет %1$s Вибрано «%1$s» @@ -153,8 +141,6 @@ Змінити колір фона на повністю чорний Контрастність теми Тема застосунка - Перевіряти на оновлення - Перевіряти на новішу версію застосунку при запуску Подвійне натискання для виходу Натисніть назад двічі, щоб вийти з застосунку @@ -321,7 +307,6 @@ Ця книга була успішно переміщена. Скопійовано Історія була успішно видалена. - Остання версія застосунка вже встановлена. Обкладинка була успішно скинута. Назва була успішно змінена. Автор був успішно змінений. @@ -347,7 +332,6 @@ Версія застосунка Book\'s Story v%1$s - Натисніть, щоб перевірити на оновлення Повідомити про помилку Що нового Ліцензії з відкритим кодом @@ -427,8 +411,6 @@ Надано Дозвіл на сховище Потрібний, щоб просканувати ваш пристрій та знайти книги - Дозвіл на сповіщення - Потрібний, щоб перевірити застосунок на нову версію Все готово! Ви успішно закінчили базове налаштовування застосунку. Бажаєте дізнатися, як користуватися застосунком, прочитавши екран Довідки? diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index fc95158f..2f912808 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -15,8 +15,6 @@ 从你的图库中选择新封面 删除封面图片 作者 - 更新 %1$s - 下载 词典 设置 未发现翻译应用。 @@ -24,8 +22,6 @@ 预设 %1$s 取消 我们需要存储权限以扫描您的设备上的书 - Book\'s Story 的新更新! - 更新 %1$s 已发布!点击前往发布页面。 书库 历史 浏览 @@ -37,14 +33,11 @@ 这本书将会从数据库中删除,但不会从您的设备上删除。 选择你想将这本书移动到的分类。这本书将会被移动到指定的分类。 所有的历史将从数据库中被删除。删除所有的历史后,书的顺序将会被重置。 - 发现了新版本。您想继续并前往发布页面吗? - 启用《检查更新》之后,应用将在每次启动时从《api.github.com》获取最新发布信息。是否要继续并启用《检查更新》? 无简介。 出现了一些错误。 未找到要共享的应用。 未发现词典应用。 这本书的内容为空,或有损坏和缺失。请核对文件或尝试更新文件路径。 - 出现了一些错误。请稍后尝试。 无法重置封面图片。 关闭的源 通过下载扩展图书馆的藏书 @@ -73,9 +66,7 @@ 翻译 复制 已选择 %1$s - 启用检查更新? 删除书籍? - 新更新 您可以挑选您想添加哪些书。您可以在之后编辑书的标题与封面图片。加载过程可能会花费数分钟。 选择你想将所选的书(%1$s)移动到的分类。所有被选择的书将会被移动到指定的分类。 阅读速度 @@ -93,7 +84,6 @@ 应用语言 纯黑(OLED) 主题对比 - 检查更新 双击返回退出 双击返回退出应用 字体系列 @@ -113,7 +103,6 @@ 应用主题 颜色 翻译器 - 在启动时检查新版本 排序 蓝色 段落间距 @@ -196,7 +185,6 @@ 这本书已被成功移动。 已复制 成功删除历史。 - 本应用的最新版本已被安装。 成功更改了封面图片。 成功删除了历史元素。 成功移动所有已选择的书。 @@ -213,7 +201,6 @@ 想法 我应该如何添加书籍到库中? Book\'s Story v%1$s - 点击检查更新 书库中 路径 图标 @@ -276,12 +263,10 @@ 权限 设置完成! 错误 - 通知权限 已授权 存储权限 你已经成功完成了应用基本设置。要参阅帮助以获取更多使用技巧吗? 未找到封面图片 - 用于检查应用更新 语言偏好 应用主题 排序规则 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 691b3c77..cfd97bca 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -10,17 +10,6 @@ Book\'s Story Default - - New updates - New update of Book\'s Story! - - Update %1$s just released! - Click to go to the release page. - - - Download - - Library History @@ -37,7 +26,6 @@ Delete book? Move book? Delete reading history? - Enable check for updates? Edit @@ -70,16 +58,6 @@ It will delete the whole history from the database. After deleting the whole history, the order of the books will be reset. - - New app version was found. - Do you want to proceed and go to the release page? - - - By enabling «Check for updates» - the app will retrieve latest release information from «api.github.com» each time - when app starts. - Do you want to proceed and enable «Check for updates»? - @@ -99,10 +77,6 @@ File is empty, corrupted, or missing. Please verify the file or update the path and try again. - - Something went wrong. - Try again later. - Could not reset cover image. Closed source File does not exist @@ -123,7 +97,6 @@ %1$s selected - Update %1$s Preset %1$s Selected «%1$s» @@ -207,8 +180,6 @@ Change background color to be completely black Theme contrast App theme - Check for updates - Check for newer app version on startup Double back press to exit Press back twice to exit the app @@ -377,7 +348,6 @@ This book was successfully moved. Copied History was successfully deleted. - The latest version of the app is already installed. Cover image was successfully reset. Title was successfully changed. Author was successfully changed. @@ -403,7 +373,6 @@ App version Book\'s Story v%1$s - Click to check for updates Report a bug What\'s new Open source licenses @@ -580,8 +549,6 @@ Granted Storage permission Required to scan your device and find books - Notifications permission - Required to check for newer app version Everything\'s done! You\'re successfully done basic setting of the app.