diff --git a/Habitica/res/drawable/search_background.xml b/Habitica/res/drawable/search_background.xml new file mode 100644 index 000000000..057473816 --- /dev/null +++ b/Habitica/res/drawable/search_background.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/Habitica/res/menu/menu_searchable.xml b/Habitica/res/menu/menu_searchable.xml index d09a077fb..e9e0b7acd 100644 --- a/Habitica/res/menu/menu_searchable.xml +++ b/Habitica/res/menu/menu_searchable.xml @@ -1,13 +1,16 @@ + xmlns:app="http://schemas.android.com/apk/res-auto" + android:layout_width="match_parent" + android:layout_height="match_parent" + android:orientation="vertical"> + android:id="@+id/action_search" + android:icon="@android:drawable/ic_menu_search" + android:title="@string/search" + app:actionViewClass="androidx.appcompat.widget.SearchView" + app:iconifiedByDefault="false" + app:queryBackground="@android:color/transparent" + app:submitBackground="@android:color/transparent" + app:showAsAction="always" /> diff --git a/Habitica/res/values/strings.xml b/Habitica/res/values/strings.xml index 44bc216b9..f2ae5d116 100644 --- a/Habitica/res/values/strings.xml +++ b/Habitica/res/values/strings.xml @@ -1564,6 +1564,7 @@ Valentines Habitoween Turkey Day + Search Equipment You diff --git a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt index 1f02cbcf5..e516994ed 100644 --- a/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt +++ b/Habitica/src/main/java/com/habitrpg/android/habitica/ui/fragments/inventory/equipment/EquipmentDetailFragment.kt @@ -2,6 +2,8 @@ package com.habitrpg.android.habitica.ui.fragments.inventory.equipment import android.app.SearchManager import android.database.MatrixCursor +import android.graphics.Color +import android.graphics.drawable.InsetDrawable import android.os.Bundle import android.provider.BaseColumns import android.view.LayoutInflater @@ -11,11 +13,11 @@ import android.view.MenuItem import android.view.View import android.view.ViewGroup import android.widget.AutoCompleteTextView +import androidx.appcompat.content.res.AppCompatResources import androidx.appcompat.widget.SearchView import androidx.core.view.MenuProvider import androidx.cursoradapter.widget.SimpleCursorAdapter import androidx.lifecycle.lifecycleScope -import androidx.recyclerview.widget.DividerItemDecoration import androidx.recyclerview.widget.LinearLayoutManager import androidx.swiperefreshlayout.widget.SwipeRefreshLayout import com.habitrpg.android.habitica.R @@ -24,8 +26,10 @@ import com.habitrpg.android.habitica.databinding.FragmentRefreshRecyclerviewBind import com.habitrpg.android.habitica.helpers.ReviewManager import com.habitrpg.android.habitica.ui.adapter.inventory.EquipmentRecyclerViewAdapter import com.habitrpg.android.habitica.ui.fragments.BaseMainFragment +import com.habitrpg.android.habitica.ui.helpers.KeyboardUtil import com.habitrpg.android.habitica.ui.helpers.SafeDefaultItemAnimator import com.habitrpg.android.habitica.ui.viewmodels.MainUserViewModel +import com.habitrpg.common.habitica.extensions.dpToPx import com.habitrpg.common.habitica.extensions.observeOnce import com.habitrpg.common.habitica.helpers.EmptyItem import com.habitrpg.common.habitica.helpers.ExceptionHandler @@ -38,7 +42,6 @@ import kotlinx.coroutines.flow.map import kotlinx.coroutines.launch import javax.inject.Inject - @AndroidEntryPoint class EquipmentDetailFragment : BaseMainFragment(), @@ -123,12 +126,6 @@ class EquipmentDetailFragment : binding?.recyclerView?.adapter = this.adapter binding?.recyclerView?.layoutManager = LinearLayoutManager(mainActivity) - binding?.recyclerView?.addItemDecoration( - DividerItemDecoration( - activity, - DividerItemDecoration.VERTICAL, - ), - ) binding?.recyclerView?.itemAnimator = SafeDefaultItemAnimator() type?.let { type -> @@ -148,6 +145,7 @@ class EquipmentDetailFragment : override fun onDestroy() { inventoryRepository.close() + KeyboardUtil.dismissKeyboard(requireActivity()) super.onDestroy() } @@ -162,8 +160,9 @@ class EquipmentDetailFragment : menuInflater.inflate(R.menu.menu_searchable, menu) val searchItem = menu.findItem(R.id.action_search) + searchItem.expandActionView() val searchView = searchItem.actionView as SearchView - val suggestions = arrayOf("Spring Gear", "Summer Gear", "Fall Gear", "Winter Gear") + val suggestions = arrayOf("Spring Gear", "Summer Gear", "Fall Gear", "Winter Gear", "Subscriber Item", "Enchanted Armoire") val from = arrayOf(SearchManager.SUGGEST_COLUMN_TEXT_1) val to = intArrayOf(android.R.id.text1) val suggestionAdapter = SimpleCursorAdapter(requireContext(), R.layout.support_simple_spinner_dropdown_item, null, from, to, 0) @@ -173,7 +172,21 @@ class EquipmentDetailFragment : } suggestionAdapter.changeCursor(cursor) searchView.suggestionsAdapter = suggestionAdapter - searchView.findViewById(R.id.search_src_text).threshold = 0 + val textView = searchView.findViewById(R.id.search_src_text) + textView.threshold = 0 + searchView.setIconifiedByDefault(false) + searchView.isIconified = false + searchView.clearFocus() + searchView.queryHint = getString(R.string.search_equipment) + searchView.findViewById(androidx.appcompat.R.id.search_plate) + .setBackgroundColor(Color.TRANSPARENT) + searchView.background = InsetDrawable( + AppCompatResources.getDrawable(requireContext(), R.drawable.search_background), + 12.dpToPx(requireContext()), + 0, + 8.dpToPx(requireContext()), + 0 + ) searchView.setOnQueryTextListener(object : SearchView.OnQueryTextListener { override fun onQueryTextSubmit(query: String): Boolean { @@ -196,12 +209,14 @@ class EquipmentDetailFragment : searchView.setOnSuggestionListener(object : SearchView.OnSuggestionListener { override fun onSuggestionSelect(position: Int): Boolean { - val text = suggestionAdapter.getItem(position) - searchedText.value = text.toString() + val selected = suggestionAdapter.getItem(position) + searchView.setQuery((selected as MatrixCursor).getString(1), true) return false } override fun onSuggestionClick(position: Int): Boolean { + val selected = suggestionAdapter.getItem(position) + searchView.setQuery((selected as MatrixCursor).getString(1), true) return false } }) diff --git a/build.gradle b/build.gradle index c6d849f6f..3e9af528f 100644 --- a/build.gradle +++ b/build.gradle @@ -33,7 +33,7 @@ buildscript { play_wearables_version = '18.2.0' play_auth_version = '21.2.0' preferences_version = '1.2.1' - realm_version = '1.0.2' + realm_version = '1.9.1' retrofit_version = '2.9.0' recyclerview_version = '1.3.2' } @@ -48,7 +48,7 @@ buildscript { classpath 'com.neenbedankt.gradle.plugins:android-apt:1.8' classpath 'com.google.gms:google-services:4.4.2' classpath 'com.google.firebase:firebase-crashlytics-gradle:3.0.2' - classpath "io.realm:realm-gradle-plugin:10.13.2-transformer-api" + classpath "io.realm:realm-gradle-plugin:10.19.0" classpath("io.realm.kotlin:gradle-plugin:$realm_version") classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version" classpath "io.gitlab.arturbosch.detekt:detekt-gradle-plugin:1.19.0"