diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index cf7e5eaec..4f90acfff 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -144,7 +144,6 @@
-
diff --git a/app/src/main/java/com/aurora/store/util/NavigationUtil.kt b/app/src/main/java/com/aurora/store/util/NavigationUtil.kt
index 95a5bf3a8..87b4f23e8 100644
--- a/app/src/main/java/com/aurora/store/util/NavigationUtil.kt
+++ b/app/src/main/java/com/aurora/store/util/NavigationUtil.kt
@@ -29,7 +29,6 @@ import com.aurora.store.data.model.Report
import com.aurora.store.view.ui.details.AppDetailsActivity
import com.aurora.store.view.ui.details.DetailsExodusActivity
import com.aurora.store.view.ui.details.DevAppsActivity
-import com.aurora.store.view.ui.search.SearchResultsActivity
import com.google.gson.Gson
import com.google.gson.GsonBuilder
import java.lang.reflect.Modifier
@@ -70,13 +69,4 @@ object NavigationUtil {
val options = ActivityOptions.makeSceneTransitionAnimation(context as AppCompatActivity)
context.startActivity(intent, options.toBundle())
}
-
- fun openSearchActivity(context: Context) {
- val intent = Intent(
- context,
- SearchResultsActivity::class.java
- )
- val options = ActivityOptions.makeSceneTransitionAnimation(context as AppCompatActivity)
- context.startActivity(intent, options.toBundle())
- }
}
diff --git a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt
index 7c5e7e2cb..ede070adf 100644
--- a/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/search/SearchResultsFragment.kt
@@ -33,6 +33,8 @@ import androidx.lifecycle.Lifecycle
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import androidx.lifecycle.repeatOnLifecycle
+import androidx.navigation.fragment.findNavController
+import androidx.navigation.fragment.navArgs
import com.aurora.Constants
import com.aurora.extensions.open
import com.aurora.gplayapi.data.models.App
@@ -40,14 +42,14 @@ import com.aurora.gplayapi.data.models.SearchBundle
import com.aurora.store.R
import com.aurora.store.data.Filter
import com.aurora.store.data.providers.FilterProvider
-import com.aurora.store.databinding.ActivitySearchResultBinding
+import com.aurora.store.databinding.FragmentSearchResultBinding
import com.aurora.store.util.Preferences
import com.aurora.store.view.custom.recycler.EndlessRecyclerOnScrollListener
import com.aurora.store.view.epoxy.views.AppProgressViewModel_
import com.aurora.store.view.epoxy.views.app.AppListViewModel_
import com.aurora.store.view.epoxy.views.app.NoAppViewModel_
import com.aurora.store.view.epoxy.views.shimmer.AppListViewShimmerModel_
-import com.aurora.store.view.ui.commons.BaseActivity
+import com.aurora.store.view.ui.commons.BaseFragment
import com.aurora.store.view.ui.downloads.DownloadActivity
import com.aurora.store.view.ui.sheets.FilterSheet
import com.aurora.store.viewmodel.search.SearchResultViewModel
@@ -56,9 +58,15 @@ import com.google.android.material.textfield.TextInputEditText
import kotlinx.coroutines.launch
-class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
+class SearchResultsFragment : BaseFragment(R.layout.fragment_search_result),
+ OnSharedPreferenceChangeListener {
+
+ private var _binding: FragmentSearchResultBinding? = null
+ private val binding: FragmentSearchResultBinding
+ get() = _binding!!
+
+ private val args: SearchResultsFragmentArgs by navArgs()
- lateinit var B: ActivitySearchResultBinding
lateinit var VM: SearchResultViewModel
lateinit var endlessRecyclerOnScrollListener: EndlessRecyclerOnScrollListener
@@ -69,51 +77,59 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
var query: String? = null
var searchBundle: SearchBundle = SearchBundle()
+
private var shimmerAnimationVisible = false
private var snackbar: Snackbar? = null
- override fun onConnected() {
- hideNetworkConnectivitySheet()
- }
+ override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
+ super.onViewCreated(view, savedInstanceState)
- override fun onDisconnected() {
- showNetworkConnectivitySheet()
- }
-
- override fun onReconnected() {
- }
-
- override fun onCreate(savedInstanceState: Bundle?) {
- super.onCreate(savedInstanceState)
-
- B = ActivitySearchResultBinding.inflate(layoutInflater)
+ _binding = FragmentSearchResultBinding.bind(view)
VM = ViewModelProvider(this)[SearchResultViewModel::class.java]
- sharedPreferences = Preferences.getPrefs(this)
+ sharedPreferences = Preferences.getPrefs(view.context)
sharedPreferences.registerOnSharedPreferenceChangeListener(this)
- filter = FilterProvider.with(this).getSavedFilter()
+ filter = FilterProvider.with(view.context).getSavedFilter()
- setContentView(B.root)
+ // Toolbar
+ binding.layoutViewToolbar.apply {
+ searchView = inputSearch
+ imgActionPrimary.setOnClickListener {
+ findNavController().navigateUp()
+ }
+ imgActionSecondary.setOnClickListener {
+ activity?.open(DownloadActivity::class.java)
+ }
+ }
- attachToolbar()
+ // Search
attachSearch()
- attachRecycler()
- attachFilter()
- VM.liveData.observe(this) {
+ // RecyclerView
+ endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() {
+ override fun onLoadMore(currentPage: Int) {
+ VM.next(searchBundle.subBundles)
+ }
+ }
+ binding.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
+
+ // Filter
+ binding.filterFab.setOnClickListener {
+ FilterSheet.newInstance().show(childFragmentManager, FilterSheet.TAG)
+ }
+
+ VM.liveData.observe(viewLifecycleOwner) {
if (shimmerAnimationVisible) {
endlessRecyclerOnScrollListener.resetPageCount()
- B.recycler.clear()
+ binding.recycler.clear()
shimmerAnimationVisible = false
}
searchBundle = it
updateController(searchBundle)
}
- query = intent.getStringExtra(Constants.STRING_EXTRA)
- query?.let {
- updateQuery(it)
- }
+ query = args.query
+ query?.let { updateQuery(it) }
lifecycleScope.launch {
repeatOnLifecycle(Lifecycle.State.STARTED) {
@@ -124,74 +140,52 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
attachErrorLayout(getString(R.string.rate_limited))
} else {
snackbar = Snackbar.make(
- B.root,
+ binding.root,
getString(R.string.rate_limited),
Snackbar.LENGTH_INDEFINITE
)
snackbar?.show()
}
}
+
else -> {
- if (B.errorLayout.isVisible) detachErrorLayout()
+ if (binding.errorLayout.isVisible) detachErrorLayout()
if (snackbar != null && snackbar?.isShown == true) snackbar?.dismiss()
}
}
}
}
}
-
}
- override fun onDestroy() {
- sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
- if (Preferences.getBoolean(this, Preferences.PREFERENCE_FILTER_SEARCH))
- FilterProvider.with(this).saveFilter(Filter())
- super.onDestroy()
+ override fun onDestroyView() {
+ context?.let {
+ sharedPreferences.unregisterOnSharedPreferenceChangeListener(this)
+ if (Preferences.getBoolean(it, Preferences.PREFERENCE_FILTER_SEARCH)) {
+ FilterProvider.with(it).saveFilter(Filter())
+ }
+ }
+ super.onDestroyView()
+ _binding = null
}
private fun attachErrorLayout(message: String) {
- B.recycler.visibility = View.GONE
- B.filterFab.visibility = View.GONE
- B.errorLayout.visibility = View.VISIBLE
- B.errorMessage.text = message
+ binding.recycler.visibility = View.GONE
+ binding.filterFab.visibility = View.GONE
+ binding.errorLayout.visibility = View.VISIBLE
+ binding.errorMessage.text = message
}
private fun detachErrorLayout() {
- B.recycler.visibility = View.VISIBLE
- B.filterFab.visibility = View.VISIBLE
- B.errorLayout.visibility = View.GONE
- }
-
- private fun attachToolbar() {
- searchView = B.layoutViewToolbar.inputSearch
-
- B.layoutViewToolbar.imgActionPrimary.setOnClickListener {
- finishAfterTransition()
- }
- B.layoutViewToolbar.imgActionSecondary.setOnClickListener {
- open(DownloadActivity::class.java)
- }
- }
-
- private fun attachFilter() {
- B.filterFab.setOnClickListener {
- FilterSheet.newInstance().show(supportFragmentManager, FilterSheet.TAG)
- }
- }
-
- private fun attachRecycler() {
- endlessRecyclerOnScrollListener = object : EndlessRecyclerOnScrollListener() {
- override fun onLoadMore(currentPage: Int) {
- VM.next(searchBundle.subBundles)
- }
- }
- B.recycler.addOnScrollListener(endlessRecyclerOnScrollListener)
+ binding.recycler.visibility = View.VISIBLE
+ binding.filterFab.visibility = View.VISIBLE
+ binding.errorLayout.visibility = View.GONE
}
private fun updateController(searchBundle: SearchBundle?) {
if (searchBundle == null) {
shimmerAnimationVisible = true
- B.recycler.withModels {
+ binding.recycler.withModels {
for (i in 1..10) {
add(AppListViewShimmerModel_().id(i))
}
@@ -204,7 +198,7 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
if (filteredAppList.isEmpty()) {
if (searchBundle.subBundles.isNotEmpty()) {
VM.next(searchBundle.subBundles)
- B.recycler.withModels {
+ binding.recycler.withModels {
setFilterDuplicates(true)
add(
AppProgressViewModel_()
@@ -212,10 +206,10 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
)
}
} else {
- B.recycler.adapter?.let {
+ binding.recycler.adapter?.let {
/*Show empty search list if nothing found or no app matches filter criterion*/
if (it.itemCount == 1 && searchBundle.subBundles.isEmpty()) {
- B.recycler.withModels {
+ binding.recycler.withModels {
add(
NoAppViewModel_()
.id("no_app")
@@ -227,7 +221,7 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
}
}
} else {
- B.recycler
+ binding.recycler
.withModels {
setFilterDuplicates(true)
@@ -250,7 +244,7 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
}
}
- B.recycler.adapter?.let {
+ binding.recycler.adapter?.let {
if (it.itemCount < 10) {
VM.next(searchBundle.subBundles)
}
@@ -295,7 +289,7 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
}
private fun filter(appList: MutableList): List {
- filter = FilterProvider.with(this).getSavedFilter()
+ filter = FilterProvider.with(requireContext()).getSavedFilter()
return appList
.asSequence()
.filter { if (!filter.paidApps) it.isFree else true }
@@ -308,7 +302,7 @@ class SearchResultsActivity : BaseActivity(), OnSharedPreferenceChangeListener {
override fun onSharedPreferenceChanged(sharedPreferences: SharedPreferences?, key: String?) {
if (key == FilterProvider.PREFERENCE_FILTER) {
- filter = FilterProvider.with(this).getSavedFilter()
+ filter = FilterProvider.with(requireContext()).getSavedFilter()
query?.let {
queryViewModel(it)
}
diff --git a/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt b/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt
index c0268979b..868e7b565 100644
--- a/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt
+++ b/app/src/main/java/com/aurora/store/view/ui/search/SearchSuggestionFragment.kt
@@ -152,9 +152,10 @@ class SearchSuggestionFragment : Fragment(R.layout.fragment_search_suggestion) {
) {
requireContext().browse("${Constants.PLAY_QUERY_URL}$query", true)
} else {
- val intent = Intent(requireContext(), SearchResultsActivity::class.java)
- intent.putExtra(Constants.STRING_EXTRA, query)
- startActivity(intent, requireContext().getEmptyActivityBundle())
+ findNavController().navigate(
+ SearchSuggestionFragmentDirections
+ .actionSearchSuggestionFragmentToSearchResultsFragment(query)
+ )
}
}
}
diff --git a/app/src/main/res/layout/fragment_search_result.xml b/app/src/main/res/layout/fragment_search_result.xml
index 5e6649e32..5f2e313de 100644
--- a/app/src/main/res/layout/fragment_search_result.xml
+++ b/app/src/main/res/layout/fragment_search_result.xml
@@ -19,9 +19,11 @@
+ android:layout_height="match_parent"
+ tools:context=".view.ui.search.SearchResultsFragment">
+ tools:layout="@layout/fragment_search_suggestion">
+
+
+
+
+
\ 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 5a0f0d3d4..b0d8a444e 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -306,6 +306,7 @@
"Settings"
"Spoof manager"
"Search suggestion"
+ "Search results"
"Updates"
"Advanced"
"Manual download"