From 360decd37cacb889a29d98a4d558495dcad5f712 Mon Sep 17 00:00:00 2001 From: tom5079 Date: Wed, 16 Sep 2020 14:31:45 +0900 Subject: [PATCH] FloatingSearchView migration --- app/build.gradle | 6 +- .../xyz/quaver/pupil/types/Suggestions.kt | 24 +-- .../java/xyz/quaver/pupil/ui/MainActivity.kt | 28 ++-- .../pupil/ui/view/FloatingSearchView.kt} | 38 ++--- .../res/drawable/reader_item_boundary.xml | 2 +- .../res/layout-v23/activity_main_content.xml | 152 ------------------ .../main/res/layout/activity_main_content.xml | 31 ++-- app/src/main/res/layout/activity_reader.xml | 4 +- app/src/main/res/layout/item_galleryblock.xml | 2 +- build.gradle | 3 +- 10 files changed, 63 insertions(+), 227 deletions(-) rename app/src/main/java/{com/arlib/floatingsearchview/FloatingSearchViewDayNight.kt => xyz/quaver/pupil/ui/view/FloatingSearchView.kt} (89%) delete mode 100644 app/src/main/res/layout-v23/activity_main_content.xml diff --git a/app/build.gradle b/app/build.gradle index 4d59040d..b6f63468 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -20,8 +20,8 @@ android { applicationId "xyz.quaver.pupil" minSdkVersion 16 targetSdkVersion 30 - versionCode 59 - versionName "5.0.3-hotfix2" + versionCode 60 + versionName "5.1" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" vectorDrawables.useSupportLibrary = true } @@ -80,7 +80,6 @@ dependencies { implementation 'com.google.firebase:firebase-perf:19.0.8' implementation 'com.google.android.gms:play-services-oss-licenses:17.0.0' implementation 'com.google.android.gms:play-services-mlkit-face-detection:16.1.1' - implementation 'com.github.arimorty:floatingsearchview:2.1.1' implementation 'com.github.clans:fab:1.6.4' //implementation 'com.quiph.ui:recyclerviewfastscroller:0.2.1' //noinspection GradleDependency @@ -106,6 +105,7 @@ dependencies { exclude group: 'org.jetbrains.kotlinx', module: 'kotlinx-serialization-core-jvm' } implementation "xyz.quaver:documentfilex:0.2.15" + implementation "xyz.quaver:floatingsearchview:1.0" testImplementation 'junit:junit:4.13' androidTestImplementation 'androidx.test.ext:junit:1.1.2' androidTestImplementation 'androidx.test:rules:1.3.0' diff --git a/app/src/main/java/xyz/quaver/pupil/types/Suggestions.kt b/app/src/main/java/xyz/quaver/pupil/types/Suggestions.kt index e49391e4..54dccdab 100644 --- a/app/src/main/java/xyz/quaver/pupil/types/Suggestions.kt +++ b/app/src/main/java/xyz/quaver/pupil/types/Suggestions.kt @@ -18,36 +18,28 @@ package xyz.quaver.pupil.types -import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion +import kotlinx.android.parcel.IgnoredOnParcel import kotlinx.android.parcel.Parcelize +import xyz.quaver.floatingsearchview.suggestions.model.SearchSuggestion import xyz.quaver.hitomi.Suggestion @Parcelize data class TagSuggestion(val s: String, val t: Int, val u: String, val n: String) : SearchSuggestion { constructor(s: Suggestion) : this(s.s, s.t, s.u, s.n) - override fun getBody(): String { - return s - } + @IgnoredOnParcel + override val body = s } @Parcelize -class Suggestion(val str: String) : SearchSuggestion { - override fun getBody() = str -} +class Suggestion(override val body: String) : SearchSuggestion @Parcelize -class NoResultSuggestion(val str: String) : SearchSuggestion { - override fun getBody() = str -} +class NoResultSuggestion(override val body: String) : SearchSuggestion @Parcelize -class LoadingSuggestion(val str: String) : SearchSuggestion { - override fun getBody() = str -} +class LoadingSuggestion(override val body: String) : SearchSuggestion @Parcelize @Suppress("PARCELABLE_PRIMARY_CONSTRUCTOR_IS_EMPTY") -class FavoriteHistorySwitch(private val body: String) : SearchSuggestion { - override fun getBody() = body -} \ No newline at end of file +class FavoriteHistorySwitch(override val body: String) : SearchSuggestion \ No newline at end of file diff --git a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt index 8913ca8f..51242e86 100644 --- a/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/MainActivity.kt @@ -29,10 +29,6 @@ import androidx.appcompat.app.AlertDialog import androidx.appcompat.app.AppCompatDelegate import androidx.cardview.widget.CardView import androidx.core.view.GravityCompat -import com.arlib.floatingsearchview.FloatingSearchView -import com.arlib.floatingsearchview.FloatingSearchViewDayNight -import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion -import com.arlib.floatingsearchview.util.view.SearchInputView import com.bumptech.glide.Glide import com.google.android.material.appbar.AppBarLayout import com.google.android.material.navigation.NavigationView @@ -41,6 +37,9 @@ import com.google.firebase.crashlytics.FirebaseCrashlytics import kotlinx.android.synthetic.main.activity_main.* import kotlinx.android.synthetic.main.activity_main_content.* import kotlinx.coroutines.* +import xyz.quaver.floatingsearchview.FloatingSearchView +import xyz.quaver.floatingsearchview.suggestions.model.SearchSuggestion +import xyz.quaver.floatingsearchview.util.view.SearchInputView import xyz.quaver.hitomi.doSearch import xyz.quaver.hitomi.getGalleryIDsFromNozomi import xyz.quaver.hitomi.getSuggestionsForQuery @@ -60,7 +59,6 @@ import kotlin.math.roundToInt class MainActivity : BaseActivity(), - FloatingSearchView.OnMenuItemClickListener, NavigationView.OnNavigationItemSelectedListener { @@ -626,8 +624,8 @@ class MainActivity : private var suggestionJob : Job? = null private fun setupSearchBar() { - with(main_searchview as FloatingSearchViewDayNight) { - setOnLeftMenuClickListener(object: FloatingSearchView.OnLeftMenuClickListener { + with(main_searchview as xyz.quaver.pupil.ui.view.FloatingSearchView) { + onMenuStatusChangeListener = object: FloatingSearchView.OnMenuStatusChangeListener { override fun onMenuOpened() { (this@MainActivity.main_recyclerview.adapter as GalleryBlockAdapter).closeAllItems() } @@ -635,7 +633,7 @@ class MainActivity : override fun onMenuClosed() { //Do Nothing } - }) + } onHistoryDeleteClickedListener = { searchHistory.remove(it) @@ -646,9 +644,11 @@ class MainActivity : swapSuggestions(defaultSuggestions) } - setOnMenuItemClickListener(this@MainActivity) + onMenuItemClickListener = { + onActionMenuItemSelected(it) + } - setOnQueryChangeListener { _, query -> + onQueryChangeListener = lambda@{ _, query -> this@MainActivity.query = query suggestionJob?.cancel() @@ -656,7 +656,7 @@ class MainActivity : if (query.isEmpty() or query.endsWith(' ')) { swapSuggestions(defaultSuggestions) - return@setOnQueryChangeListener + return@lambda } swapSuggestions(listOf(LoadingSuggestion(getText(R.string.reader_loading).toString()))) @@ -682,7 +682,7 @@ class MainActivity : } } - setOnFocusChangeListener(object: FloatingSearchView.OnFocusChangeListener { + onFocusChangeListener = object: FloatingSearchView.OnFocusChangeListener { override fun onFocus() { if (query.isEmpty() or query.endsWith(' ')) swapSuggestions(defaultSuggestions) @@ -699,13 +699,13 @@ class MainActivity : loadBlocks() } } - }) + } attachNavigationDrawerToMenuButton(main_drawer_layout) } } - override fun onActionMenuItemSelected(item: MenuItem?) { + fun onActionMenuItemSelected(item: MenuItem?) { when(item?.itemId) { R.id.main_menu_settings -> startActivityForResult(Intent(this@MainActivity, SettingsActivity::class.java), R.id.request_settings.normalizeID()) R.id.main_menu_thin -> { diff --git a/app/src/main/java/com/arlib/floatingsearchview/FloatingSearchViewDayNight.kt b/app/src/main/java/xyz/quaver/pupil/ui/view/FloatingSearchView.kt similarity index 89% rename from app/src/main/java/com/arlib/floatingsearchview/FloatingSearchViewDayNight.kt rename to app/src/main/java/xyz/quaver/pupil/ui/view/FloatingSearchView.kt index 0792cac1..79b4b362 100644 --- a/app/src/main/java/com/arlib/floatingsearchview/FloatingSearchViewDayNight.kt +++ b/app/src/main/java/xyz/quaver/pupil/ui/view/FloatingSearchView.kt @@ -16,7 +16,7 @@ * along with this program. If not, see . */ -package com.arlib.floatingsearchview +package xyz.quaver.pupil.ui.view import android.content.Context import android.graphics.PorterDuff @@ -36,21 +36,21 @@ import androidx.core.content.ContextCompat import androidx.core.content.res.ResourcesCompat import androidx.swiperefreshlayout.widget.CircularProgressDrawable import androidx.vectordrawable.graphics.drawable.AnimatedVectorDrawableCompat -import com.arlib.floatingsearchview.suggestions.SearchSuggestionsAdapter -import com.arlib.floatingsearchview.suggestions.model.SearchSuggestion -import com.arlib.floatingsearchview.util.view.SearchInputView +import xyz.quaver.floatingsearchview.FloatingSearchView +import xyz.quaver.floatingsearchview.suggestions.model.SearchSuggestion +import xyz.quaver.floatingsearchview.util.MenuPopupHelper +import xyz.quaver.floatingsearchview.util.view.MenuView +import xyz.quaver.floatingsearchview.util.view.SearchInputView import xyz.quaver.pupil.R import xyz.quaver.pupil.favoriteTags import xyz.quaver.pupil.types.* import java.util.* -class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : +class FloatingSearchView @JvmOverloads constructor(context: Context, attrs: AttributeSet? = null) : FloatingSearchView(context, attrs), FloatingSearchView.OnSearchListener, - SearchSuggestionsAdapter.OnBindSuggestionCallback, TextWatcher { - private val searchInputView = findViewById(R.id.search_bar_text) var onHistoryDeleteClickedListener: ((String) -> Unit)? = null @@ -60,8 +60,10 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att searchInputView.imeOptions = EditorInfo.IME_FLAG_NO_EXTRACT_UI searchInputView.addTextChangedListener(this) - setOnSearchListener(this) - setOnBindSuggestionCallback(this) + onSearchListener = this + onBindSuggestionCallback = { a, b, c, d, e -> + onBindSuggestion(a, b, c, d, e) + } } override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) { @@ -83,7 +85,7 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att when (searchSuggestion) { is TagSuggestion -> { val tag = "${searchSuggestion.n}:${searchSuggestion.s.replace(Regex("\\s"), "_")}" - with(searchInputView.text) { + with(searchInputView.text!!) { delete(if (lastIndexOf(' ') == -1) 0 else lastIndexOf(' ') + 1, length) if (!this.contains(tag)) @@ -91,9 +93,9 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att } } is Suggestion -> { - with(searchInputView.text) { + with(searchInputView.text!!) { clear() - append(searchSuggestion.str) + append(searchSuggestion.body) } } is FavoriteHistorySwitch -> onFavoriteHistorySwitchClickListener?.invoke() @@ -102,14 +104,14 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att override fun onSearchAction(currentQuery: String?) {} - override fun onBindSuggestion( + fun onBindSuggestion( suggestionView: View?, leftIcon: ImageView?, textView: TextView?, item: SearchSuggestion?, itemPosition: Int ) { - when(item) { + when(item) { is TagSuggestion -> { val tag = "${item.n}:${item.s.replace(Regex("\\s"), "_")}" @@ -199,7 +201,7 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att isClickable = true setOnClickListener { - onHistoryDeleteClickedListener?.invoke(item.str) + onHistoryDeleteClickedListener?.invoke(item.body) } } } @@ -215,10 +217,4 @@ class FloatingSearchViewDayNight @JvmOverloads constructor(context: Context, att } } } - - // hack to remove color attributes which should not be reused - override fun onSaveInstanceState(): Parcelable? { - super.onSaveInstanceState() - return null - } } \ No newline at end of file diff --git a/app/src/main/res/drawable/reader_item_boundary.xml b/app/src/main/res/drawable/reader_item_boundary.xml index caff3bcf..18006135 100644 --- a/app/src/main/res/drawable/reader_item_boundary.xml +++ b/app/src/main/res/drawable/reader_item_boundary.xml @@ -4,7 +4,7 @@ - + diff --git a/app/src/main/res/layout-v23/activity_main_content.xml b/app/src/main/res/layout-v23/activity_main_content.xml deleted file mode 100644 index 78db4973..00000000 --- a/app/src/main/res/layout-v23/activity_main_content.xml +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/app/src/main/res/layout/activity_main_content.xml b/app/src/main/res/layout/activity_main_content.xml index 210d502b..34ad0fd2 100644 --- a/app/src/main/res/layout/activity_main_content.xml +++ b/app/src/main/res/layout/activity_main_content.xml @@ -1,7 +1,7 @@