diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt index 69ea8d6f8..4a887bce9 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/main/ui/MainActivity.kt @@ -161,9 +161,12 @@ class MainActivity : BaseActivity(), AppBarOwner, BottomNav } override fun onPrepareOptionsMenu(menu: Menu?): Boolean { - menu?.findItem(R.id.action_incognito)?.isChecked = searchSuggestionViewModel.isIncognitoModeEnabled.value + if (menu == null) { + return false + } + menu.findItem(R.id.action_incognito)?.isChecked = searchSuggestionViewModel.isIncognitoModeEnabled.value val hasAppUpdate = viewModel.appUpdate.value != null - menu?.findItem(R.id.action_app_update)?.isVisible = hasAppUpdate + menu.findItem(R.id.action_app_update)?.isVisible = hasAppUpdate appUpdateBadge.setBadgeVisible(hasAppUpdate) return super.onPrepareOptionsMenu(menu) } @@ -379,6 +382,9 @@ class MainActivity : BaseActivity(), AppBarOwner, BottomNav supportActionBar?.setHomeAsUpIndicator( if (isOpened) materialR.drawable.abc_ic_ab_back_material else materialR.drawable.abc_ic_search_api_material, ) + viewBinding.searchView.setHintCompat( + if (isOpened) R.string.search_hint else R.string.search_manga, + ) bottomNav?.showOrHide(!isOpened) } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/widget/SearchEditText.kt b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/widget/SearchEditText.kt index 914e461dd..8b8feff81 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/widget/SearchEditText.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/search/ui/widget/SearchEditText.kt @@ -13,8 +13,11 @@ import android.view.SoundEffectConstants import android.view.accessibility.AccessibilityEvent import android.view.inputmethod.EditorInfo import androidx.annotation.AttrRes +import androidx.annotation.CheckResult +import androidx.annotation.StringRes import androidx.appcompat.widget.AppCompatEditText import androidx.core.content.ContextCompat +import org.koitharu.kotatsu.R import org.koitharu.kotatsu.core.util.ext.drawableEnd import org.koitharu.kotatsu.core.util.ext.drawableStart import org.koitharu.kotatsu.search.ui.suggestion.SearchSuggestionListener @@ -33,7 +36,7 @@ class SearchEditText @JvmOverloads constructor( private var isEmpty = text.isNullOrEmpty() init { - wrapHint() + hint = wrapHint() } var query: String @@ -106,6 +109,10 @@ class SearchEditText @JvmOverloads constructor( text?.clear() } + fun setHintCompat(@StringRes resId: Int) { + hint = wrapHint(context.getString(resId)) + } + private fun onActionIconClick() { when { !text.isNullOrEmpty() -> text?.clear() @@ -122,15 +129,16 @@ class SearchEditText @JvmOverloads constructor( } } - private fun wrapHint() { - val rawHint = hint?.toString() ?: return + @CheckResult + private fun wrapHint(raw: CharSequence? = hint): SpannableString? { + val rawHint = raw?.toString() ?: return null val formatted = SpannableString(rawHint) formatted.setSpan( - TextAppearanceSpan(context, materialR.style.TextAppearance_Material3_SearchView), + TextAppearanceSpan(context, R.style.TextAppearance_Kotatsu_SearchView), 0, formatted.length, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE, ) - hint = formatted + return formatted } } diff --git a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt index a9d714841..7995250cb 100644 --- a/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt +++ b/app/src/main/kotlin/org/koitharu/kotatsu/tracker/work/TrackWorker.kt @@ -74,11 +74,11 @@ class TrackWorker @AssistedInject constructor( override suspend fun doWork(): Result { trySetForeground() logger.log("doWork()") - try { - return doWorkImpl() + return try { + doWorkImpl() } catch (e: Throwable) { logger.log("fatal", e) - throw e + Result.failure() } finally { withContext(NonCancellable) { logger.flush() @@ -253,7 +253,7 @@ class TrackWorker @AssistedInject constructor( .setBackoffCriteria(BackoffPolicy.LINEAR, 30, TimeUnit.MINUTES) .build() workManager - .enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.KEEP, request) + .enqueueUniquePeriodicWork(TAG, ExistingPeriodicWorkPolicy.UPDATE, request) .await() } diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0599bcb84..a7cfa8873 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -463,4 +463,5 @@ Manage favourites Do not update suggestions using metered network connections Do not check for new chapters using metered network connections + Enter manga title, genre or source name