master
Koitharu 1 year ago
parent 644f0af262
commit 609f2bd134
Signed by: Koitharu
GPG Key ID: 676DEE768C17A9D7

@ -64,6 +64,9 @@ class ExternalBackupStorage @Inject constructor(
suspend fun getLastBackupDate() = listOrNull()?.maxOfOrNull { it.dateTime } suspend fun getLastBackupDate() = listOrNull()?.maxOfOrNull { it.dateTime }
suspend fun trim(maxCount: Int): Boolean { suspend fun trim(maxCount: Int): Boolean {
if (maxCount == Int.MAX_VALUE) {
return false
}
val list = listOrNull() val list = listOrNull()
if (list == null || list.size <= maxCount) { if (list == null || list.size <= maxCount) {
return false return false

@ -12,7 +12,6 @@ import androidx.appcompat.app.AppCompatDelegate
import androidx.collection.ArraySet import androidx.collection.ArraySet
import androidx.core.content.edit import androidx.core.content.edit
import androidx.core.os.LocaleListCompat import androidx.core.os.LocaleListCompat
import androidx.core.util.TimeUtils
import androidx.documentfile.provider.DocumentFile import androidx.documentfile.provider.DocumentFile
import androidx.preference.PreferenceManager import androidx.preference.PreferenceManager
import dagger.hilt.android.qualifiers.ApplicationContext import dagger.hilt.android.qualifiers.ApplicationContext
@ -476,7 +475,11 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
get() = TimeUnit.DAYS.toMillis(prefs.getString(KEY_BACKUP_PERIODICAL_FREQUENCY, null)?.toLongOrNull() ?: 7L) get() = TimeUnit.DAYS.toMillis(prefs.getString(KEY_BACKUP_PERIODICAL_FREQUENCY, null)?.toLongOrNull() ?: 7L)
val periodicalBackupMaxCount: Int val periodicalBackupMaxCount: Int
get() = prefs.getInt(KEY_BACKUP_PERIODICAL_COUNT, 10) get() = if (prefs.getBoolean(KEY_BACKUP_PERIODICAL_TRIM, true)) {
prefs.getInt(KEY_BACKUP_PERIODICAL_COUNT, 10)
} else {
Int.MAX_VALUE
}
var periodicalBackupDirectory: Uri? var periodicalBackupDirectory: Uri?
get() = prefs.getString(KEY_BACKUP_PERIODICAL_OUTPUT, null)?.toUriOrNull() get() = prefs.getString(KEY_BACKUP_PERIODICAL_OUTPUT, null)?.toUriOrNull()
@ -626,6 +629,7 @@ class AppSettings @Inject constructor(@ApplicationContext context: Context) {
const val KEY_RESTORE = "restore" const val KEY_RESTORE = "restore"
const val KEY_BACKUP_PERIODICAL_ENABLED = "backup_periodic" const val KEY_BACKUP_PERIODICAL_ENABLED = "backup_periodic"
const val KEY_BACKUP_PERIODICAL_FREQUENCY = "backup_periodic_freq" const val KEY_BACKUP_PERIODICAL_FREQUENCY = "backup_periodic_freq"
const val KEY_BACKUP_PERIODICAL_TRIM = "backup_periodic_trim"
const val KEY_BACKUP_PERIODICAL_COUNT = "backup_periodic_count" const val KEY_BACKUP_PERIODICAL_COUNT = "backup_periodic_count"
const val KEY_BACKUP_PERIODICAL_OUTPUT = "backup_periodic_output" const val KEY_BACKUP_PERIODICAL_OUTPUT = "backup_periodic_output"
const val KEY_BACKUP_PERIODICAL_LAST = "backup_periodic_last" const val KEY_BACKUP_PERIODICAL_LAST = "backup_periodic_last"

@ -9,6 +9,7 @@ import android.widget.AdapterView
import android.widget.ArrayAdapter import android.widget.ArrayAdapter
import androidx.core.view.isGone import androidx.core.view.isGone
import androidx.core.view.updatePadding import androidx.core.view.updatePadding
import androidx.fragment.app.Fragment
import androidx.fragment.app.FragmentManager import androidx.fragment.app.FragmentManager
import com.google.android.material.chip.Chip import com.google.android.material.chip.Chip
import com.google.android.material.slider.RangeSlider import com.google.android.material.slider.RangeSlider
@ -356,5 +357,7 @@ class FilterSheetFragment : BaseAdaptiveSheet<SheetFilterBinding>(),
private const val TAG = "FilterSheet" private const val TAG = "FilterSheet"
fun show(fm: FragmentManager) = FilterSheetFragment().showDistinct(fm, TAG) fun show(fm: FragmentManager) = FilterSheetFragment().showDistinct(fm, TAG)
fun isSupported(fragment: Fragment) = fragment.activity is FilterCoordinator.Owner
} }
} }

@ -62,7 +62,7 @@ class LocalListFragment : MangaListFragment(), FilterCoordinator.Owner {
override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) { override fun onViewBindingCreated(binding: FragmentListBinding, savedInstanceState: Bundle?) {
super.onViewBindingCreated(binding, savedInstanceState) super.onViewBindingCreated(binding, savedInstanceState)
addMenuProvider(LocalListMenuProvider(binding.root.context, childFragmentManager, this::onEmptyActionClick)) addMenuProvider(LocalListMenuProvider(this, this::onEmptyActionClick))
addMenuProvider(MangaSearchMenuProvider(filterCoordinator, viewModel)) addMenuProvider(MangaSearchMenuProvider(filterCoordinator, viewModel))
viewModel.onMangaRemoved.observeEvent(viewLifecycleOwner) { onItemRemoved() } viewModel.onMangaRemoved.observeEvent(viewLifecycleOwner) { onItemRemoved() }
} }

@ -1,18 +1,17 @@
package org.koitharu.kotatsu.local.ui package org.koitharu.kotatsu.local.ui
import android.content.Context import android.content.Intent
import android.view.Menu import android.view.Menu
import android.view.MenuInflater import android.view.MenuInflater
import android.view.MenuItem import android.view.MenuItem
import androidx.core.view.MenuProvider import androidx.core.view.MenuProvider
import androidx.fragment.app.FragmentManager import androidx.fragment.app.Fragment
import org.koitharu.kotatsu.R import org.koitharu.kotatsu.R
import org.koitharu.kotatsu.filter.ui.sheet.FilterSheetFragment import org.koitharu.kotatsu.filter.ui.sheet.FilterSheetFragment
import org.koitharu.kotatsu.settings.storage.directories.MangaDirectoriesActivity import org.koitharu.kotatsu.settings.storage.directories.MangaDirectoriesActivity
class LocalListMenuProvider( class LocalListMenuProvider(
private val context: Context, private val fragment: Fragment,
private val fragmentManager: FragmentManager,
private val onImportClick: Function0<Unit>, private val onImportClick: Function0<Unit>,
) : MenuProvider { ) : MenuProvider {
@ -20,6 +19,11 @@ class LocalListMenuProvider(
menuInflater.inflate(R.menu.opt_local, menu) menuInflater.inflate(R.menu.opt_local, menu)
} }
override fun onPrepareMenu(menu: Menu) {
super.onPrepareMenu(menu)
menu.findItem(R.id.action_filter)?.isVisible = FilterSheetFragment.isSupported(fragment)
}
override fun onMenuItemSelected(menuItem: MenuItem): Boolean { override fun onMenuItemSelected(menuItem: MenuItem): Boolean {
return when (menuItem.itemId) { return when (menuItem.itemId) {
R.id.action_import -> { R.id.action_import -> {
@ -28,12 +32,14 @@ class LocalListMenuProvider(
} }
R.id.action_directories -> { R.id.action_directories -> {
context.startActivity(MangaDirectoriesActivity.newIntent(context)) fragment.context?.run {
startActivity(Intent(this, MangaDirectoriesActivity::class.java))
}
true true
} }
R.id.action_filter -> { R.id.action_filter -> {
FilterSheetFragment.show(fragmentManager) FilterSheetFragment.show(fragment.childFragmentManager)
true true
} }

@ -763,4 +763,6 @@
<string name="breadcrumbs_separator" translatable="false"><![CDATA[" > "]]></string> <string name="breadcrumbs_separator" translatable="false"><![CDATA[" > "]]></string>
<string name="access_denied_403">Access denied (403)</string> <string name="access_denied_403">Access denied (403)</string>
<string name="max_backups_count">Max number of backups</string> <string name="max_backups_count">Max number of backups</string>
<string name="delete_old_backups">Delete old backups</string>
<string name="delete_old_backups_summary">Automatically delete old backup files to save storage space</string>
</resources> </resources>

@ -24,7 +24,15 @@
android:title="@string/backup_frequency" android:title="@string/backup_frequency"
app:useSimpleSummaryProvider="true" /> app:useSimpleSummaryProvider="true" />
<SwitchPreferenceCompat
android:defaultValue="true"
android:dependency="backup_periodic"
android:key="backup_periodic_trim"
android:summary="@string/delete_old_backups_summary"
android:title="@string/delete_old_backups" />
<org.koitharu.kotatsu.settings.utils.SliderPreference <org.koitharu.kotatsu.settings.utils.SliderPreference
android:dependency="backup_periodic_trim"
android:key="backup_periodic_count" android:key="backup_periodic_count"
android:stepSize="1" android:stepSize="1"
android:title="@string/max_backups_count" android:title="@string/max_backups_count"

@ -5,7 +5,7 @@ adapterdelegates = "4.3.2"
appcompat = "1.7.0" appcompat = "1.7.0"
avifDecoder = "1.1.1.14d8e3c4" avifDecoder = "1.1.1.14d8e3c4"
biometric = "1.2.0-alpha05" biometric = "1.2.0-alpha05"
coil = "3.0.1" coil = "3.0.2"
collections = "1.4.5" collections = "1.4.5"
conscrypt = "2.5.3" conscrypt = "2.5.3"
constraintlayout = "2.2.0" constraintlayout = "2.2.0"
@ -30,7 +30,7 @@ material = "1.12.0"
moshi = "1.15.1" moshi = "1.15.1"
okhttp = "4.12.0" okhttp = "4.12.0"
okio = "3.9.1" okio = "3.9.1"
parsers = "275d7f5419" parsers = "f3d14e101c"
preference = "1.2.1" preference = "1.2.1"
recyclerview = "1.3.2" recyclerview = "1.3.2"
room = "2.6.1" room = "2.6.1"

Loading…
Cancel
Save