diff --git a/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt b/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt
index 698d319b25f..8350da0b0f9 100644
--- a/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt
+++ b/app/src/main/java/com/nextcloud/talk/adapters/GeocodingAdapter.kt
@@ -24,35 +24,47 @@ import android.content.Context
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
-import android.widget.BaseAdapter
import android.widget.TextView
+import androidx.recyclerview.widget.RecyclerView
import com.nextcloud.talk.R
import fr.dudie.nominatim.model.Address
-class GeocodingAdapter(context: Context, val dataSource: List
) : BaseAdapter() {
+class GeocodingAdapter(private val context: Context, private val dataSource: List) :
+ RecyclerView.Adapter() {
- private val inflater: LayoutInflater = context.getSystemService(Context.LAYOUT_INFLATER_SERVICE) as LayoutInflater
-
- override fun getCount(): Int {
- return dataSource.size
+ interface OnItemClickListener {
+ fun onItemClick(position: Int)
}
- override fun getItem(position: Int): Any {
- return dataSource[position]
+ private var listener: OnItemClickListener? = null
+ fun setOnItemClickListener(listener: OnItemClickListener) {
+ this.listener = listener
}
- override fun getItemId(position: Int): Long {
- return position.toLong()
+ override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder {
+ val inflater = LayoutInflater.from(context)
+ val view = inflater.inflate(R.layout.geocoding_item, parent, false)
+ return ViewHolder(view)
}
- override fun getView(position: Int, convertView: View?, parent: ViewGroup): View {
- val rowView = inflater.inflate(R.layout.geocoding_item, parent, false)
+ override fun onBindViewHolder(holder: ViewHolder, position: Int) {
+ val address = dataSource[position]
+ holder.nameView.text = address.displayName
- val nameView = rowView.findViewById(R.id.name) as TextView
+ holder.itemView.setOnClickListener {
+ listener?.onItemClick(position)
+ }
+ }
- val address = getItem(position) as Address
- nameView.text = address.displayName
+ override fun getItemCount(): Int {
+ return dataSource.size
+ }
+
+ fun getItem(position: Int): Any {
+ return dataSource[position]
+ }
- return rowView
+ inner class ViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
+ val nameView: TextView = itemView.findViewById(R.id.name)
}
}
diff --git a/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt b/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt
index 854d3825cc3..5e94022a591 100644
--- a/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt
+++ b/app/src/main/java/com/nextcloud/talk/location/GeocodingActivity.kt
@@ -31,10 +31,11 @@ import android.util.Log
import android.view.Menu
import android.view.MenuItem
import android.view.inputmethod.EditorInfo
-import android.widget.AdapterView
import androidx.appcompat.widget.SearchView
import androidx.core.view.MenuItemCompat
import androidx.preference.PreferenceManager
+import androidx.recyclerview.widget.LinearLayoutManager
+import androidx.recyclerview.widget.RecyclerView
import autodagger.AutoInjector
import com.google.android.material.snackbar.Snackbar
import com.nextcloud.talk.R
@@ -77,6 +78,7 @@ class GeocodingActivity :
lateinit var adapter: GeocodingAdapter
private var geocodingResults: List = ArrayList()
+ private lateinit var recyclerView: RecyclerView
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@@ -91,6 +93,10 @@ class GeocodingActivity :
roomToken = intent.getStringExtra(BundleKeys.KEY_ROOM_TOKEN)!!
query = intent.getStringExtra(BundleKeys.KEY_GEOCODING_QUERY)
+ recyclerView = findViewById(R.id.geocoding_results)
+ recyclerView.layoutManager = LinearLayoutManager(this)
+ adapter = GeocodingAdapter(this, geocodingResults)
+ recyclerView.adapter = adapter
}
override fun onStart() {
@@ -108,16 +114,17 @@ class GeocodingActivity :
Log.e(TAG, "search string that was passed to GeocodingController was null or empty")
}
- binding.geocodingResults.onItemClickListener = AdapterView.OnItemClickListener { parent, view, position, id ->
- val address: Address = adapter.getItem(position) as Address
- val geocodingResult = GeocodingResult(address.latitude, address.longitude, address.displayName)
-
- val intent = Intent(this, LocationPickerActivity::class.java)
- intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
- intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, roomToken)
- intent.putExtra(BundleKeys.KEY_GEOCODING_RESULT, geocodingResult)
- startActivity(intent)
- }
+ adapter.setOnItemClickListener(object : GeocodingAdapter.OnItemClickListener {
+ override fun onItemClick(position: Int) {
+ val address: Address = adapter.getItem(position) as Address
+ val geocodingResult = GeocodingResult(address.latitude, address.longitude, address.displayName)
+ val intent = Intent(this@GeocodingActivity, LocationPickerActivity::class.java)
+ intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP)
+ intent.putExtra(BundleKeys.KEY_ROOM_TOKEN, roomToken)
+ intent.putExtra(BundleKeys.KEY_GEOCODING_RESULT, geocodingResult)
+ startActivity(intent)
+ }
+ })
}
private fun setupActionBar() {
diff --git a/app/src/main/res/layout/activity_geocoding.xml b/app/src/main/res/layout/activity_geocoding.xml
index 54546788769..d58ca3b7153 100644
--- a/app/src/main/res/layout/activity_geocoding.xml
+++ b/app/src/main/res/layout/activity_geocoding.xml
@@ -44,10 +44,9 @@
tools:title="@string/nc_app_product_name" />
-
-
+ android:layout_height="match_parent"/>