diff --git a/app/build.gradle b/app/build.gradle index 54174a9f10..e5fc8aadc2 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -76,6 +76,7 @@ android { dimension "default" } dev { + resConfigs "en" dimension "default" } } diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt index 526a34b00c..1b50ff6176 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/library/LibraryPresenter.kt @@ -2,6 +2,7 @@ package eu.kanade.tachiyomi.ui.library import android.os.Bundle import com.jakewharton.rxrelay.BehaviorRelay +import eu.kanade.tachiyomi.R import eu.kanade.tachiyomi.data.cache.CoverCache import eu.kanade.tachiyomi.data.database.DatabaseHelper import eu.kanade.tachiyomi.data.database.models.Category @@ -11,6 +12,7 @@ import eu.kanade.tachiyomi.data.database.models.MangaImpl import eu.kanade.tachiyomi.data.download.DownloadManager import eu.kanade.tachiyomi.data.preference.PreferencesHelper import eu.kanade.tachiyomi.data.preference.getOrDefault +import eu.kanade.tachiyomi.data.track.TrackManager import eu.kanade.tachiyomi.source.LocalSource import eu.kanade.tachiyomi.source.Source import eu.kanade.tachiyomi.source.SourceManager @@ -62,6 +64,7 @@ class LibraryPresenter( private val context = preferences.context + private val loggedServices by lazy { Injekt.get().services.filter { it.isLogged } } /** * Categories of the library. */ @@ -141,9 +144,13 @@ class LibraryPresenter( if (filterTracked != STATE_IGNORE) { val db = Injekt.get() - val tracks = db.getTracks(item.manga).executeAsBlocking().size - if (filterTracked == STATE_INCLUDE && tracks == 0) return@f false - if (filterTracked == STATE_EXCLUDE && tracks > 0) return@f false + val tracks = db.getTracks(item.manga).executeAsBlocking() + + val trackCount = loggedServices.count { service -> + tracks.any { it.sync_id == service.id } + } + if (filterTracked == STATE_INCLUDE && trackCount == 0) return@f false + if (filterTracked == STATE_EXCLUDE && trackCount > 0) return@f false } // Filter when there are no downloads. if (filterDownloaded != STATE_IGNORE) { diff --git a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt index d5582f87b6..3f862ee27b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/ui/manga/track/TrackSearchDialog.kt @@ -136,6 +136,11 @@ class TrackSearchDialog : DialogController { view.progress.visibility = View.INVISIBLE view.track_search_list.visibility = View.VISIBLE adapter?.setItems(results) + if (results.size == 1 && !wasPreviouslyTracked) { + selectedItem = adapter?.getItem(0) + (dialog as? MaterialDialog)?.positiveButton(R.string.action_track) + (dialog as? MaterialDialog)?.setActionButtonEnabled(WhichButton.POSITIVE, true) + } } fun onSearchResultsError() { diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/LoginDialogPreference.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/LoginDialogPreference.kt index 986859f169..24b14eae0b 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/LoginDialogPreference.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/LoginDialogPreference.kt @@ -26,16 +26,24 @@ abstract class LoginDialogPreference(bundle: Bundle? = null) : DialogController( var requestSubscription: Subscription? = null + open var canLogout = false + override fun onCreateDialog(savedViewState: Bundle?): Dialog { - val dialog = MaterialDialog(activity!!) - .customView(R.layout.pref_account_login, scrollable = false) - .negativeButton(android.R.string.cancel) + val dialog = MaterialDialog(activity!!).apply { + customView(R.layout.pref_account_login, scrollable = false) + positiveButton(android.R.string.cancel) + if (canLogout) { + negativeButton(R.string.logout) { logout() } + } + } onViewCreated(dialog.view) return dialog } + open fun logout() { } + fun onViewCreated(view: View) { v = view.apply { show_password.setOnCheckedChangeListener { _, isChecked -> diff --git a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt index 500a9225be..dcd99390ba 100644 --- a/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt +++ b/app/src/main/java/eu/kanade/tachiyomi/widget/preference/TrackLoginDialog.kt @@ -16,6 +16,8 @@ class TrackLoginDialog(bundle: Bundle? = null) : LoginDialogPreference(bundle) { private val service = Injekt.get().getService(args.getInt("key"))!! + override var canLogout = true + constructor(service: TrackService) : this(Bundle().apply { putInt("key", service.id) }) override fun setCredentialsOnView(view: View) = with(view) { @@ -49,6 +51,13 @@ class TrackLoginDialog(bundle: Bundle? = null) : LoginDialogPreference(bundle) { } } + override fun logout() { + if (service.isLogged) { + service.logout() + activity?.toast(R.string.logout_success) + } + } + override fun onDialogClosed() { super.onDialogClosed() (targetController as? Listener)?.trackDialogClosed(service) diff --git a/app/src/main/res/layout/search_activity.xml b/app/src/main/res/layout/search_activity.xml new file mode 100644 index 0000000000..a5e72d8fc3 --- /dev/null +++ b/app/src/main/res/layout/search_activity.xml @@ -0,0 +1,46 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 936bba78e6..8e31d404a9 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -386,7 +386,9 @@ Password Show password Login + Logout Successfully logged in + You are now logged out Could not log in Unknown error