diff --git a/TalkIn/.idea/appInsightsSettings.xml b/TalkIn/.idea/appInsightsSettings.xml
new file mode 100644
index 0000000..719888c
--- /dev/null
+++ b/TalkIn/.idea/appInsightsSettings.xml
@@ -0,0 +1,26 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/TalkIn/.idea/deploymentTargetSelector.xml b/TalkIn/.idea/deploymentTargetSelector.xml
index b268ef3..fc8303f 100644
--- a/TalkIn/.idea/deploymentTargetSelector.xml
+++ b/TalkIn/.idea/deploymentTargetSelector.xml
@@ -5,6 +5,9 @@
+
+
+
\ No newline at end of file
diff --git a/TalkIn/app/build.gradle b/TalkIn/app/build.gradle
index 58cbff9..89dd653 100644
--- a/TalkIn/app/build.gradle
+++ b/TalkIn/app/build.gradle
@@ -39,7 +39,10 @@ android {
}
dependencies {
-
+ implementation "androidx.lifecycle:lifecycle-viewmodel-ktx:2.6.1"
+ implementation "androidx.lifecycle:lifecycle-livedata-ktx:2.6.1"
+ implementation 'androidx.activity:activity-ktx'
+ implementation 'androidx.lifecycle:lifecycle-viewmodel-ktx'
implementation 'androidx.core:core-ktx:1.13.1'
implementation 'androidx.appcompat:appcompat:1.6.1'
implementation 'com.google.android.material:material:1.12.0'
diff --git a/TalkIn/app/src/main/java/com/example/talk_in/MainActivity.kt b/TalkIn/app/src/main/java/com/example/talk_in/MainActivity.kt
index 75c86b9..4e124da 100644
--- a/TalkIn/app/src/main/java/com/example/talk_in/MainActivity.kt
+++ b/TalkIn/app/src/main/java/com/example/talk_in/MainActivity.kt
@@ -4,69 +4,47 @@ import android.content.Intent
import android.os.Bundle
import android.util.Log
import android.widget.Toast
+import androidx.activity.viewModels
import androidx.appcompat.app.AppCompatActivity
import androidx.appcompat.widget.SearchView
import androidx.recyclerview.widget.LinearLayoutManager
+import com.example.talk_in.MainViewModel
import com.example.talk_in.databinding.ActivityMainBinding
-import com.google.firebase.auth.FirebaseAuth
-import com.google.firebase.database.*
-
class MainActivity : AppCompatActivity() {
private lateinit var binding: ActivityMainBinding
- private lateinit var userList: ArrayList
+ private val mainViewModel: MainViewModel by viewModels()
private lateinit var adapter: UserAdapter
- private lateinit var tempUserList: ArrayList
private lateinit var tempAdapter: UserAdapter
- private lateinit var mAuth: FirebaseAuth
- private lateinit var mDbRef: DatabaseReference
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
binding = ActivityMainBinding.inflate(layoutInflater)
setContentView(binding.root)
- mAuth = FirebaseAuth.getInstance()
- mDbRef = FirebaseDatabase.getInstance().getReference()
-
- userList = ArrayList()
- adapter = UserAdapter(this, userList)
-
- tempUserList = ArrayList()
- tempAdapter = UserAdapter(this, tempUserList)
+ adapter = UserAdapter(this, ArrayList())
+ tempAdapter = UserAdapter(this, ArrayList())
binding.userRecyclerView.layoutManager = LinearLayoutManager(this)
binding.userRecyclerView.adapter = adapter
- mDbRef.child("user").addValueEventListener(object : ValueEventListener {
- override fun onDataChange(snapshot: DataSnapshot) {
- userList.clear()
- for (postSnapshot in snapshot.children) {
- val currentUser = postSnapshot.getValue(User::class.java)
- if (currentUser != null && mAuth.currentUser?.uid != currentUser.uid && currentUser.verified == true) {
- userList.add(currentUser)
- }
- }
- adapter.notifyDataSetChanged()
- }
-
- override fun onCancelled(error: DatabaseError) {
- // Handle possible errors.
- }
- })
+ mainViewModel.userList.observe(this) { users ->
+ adapter.updateUsers(users)
+ }
binding.userSearchBar.setOnQueryTextListener(object : SearchView.OnQueryTextListener {
- override fun onQueryTextSubmit(query: String): Boolean {
- return false
- }
-
override fun onQueryTextChange(newText: String): Boolean {
- filterList(newText)
+ val filteredList = mainViewModel.filterList(newText)
+ adapter.updateUsers(filteredList) // Update the main adapter directly
+ if (filteredList.isEmpty()) {
+ Toast.makeText(this@MainActivity, "No data found", Toast.LENGTH_SHORT).show()
+ }
return true
}
})
+
binding.bottomNavigation.setOnItemSelectedListener { item ->
when (item.itemId) {
R.id.menu_chat -> true
@@ -83,22 +61,6 @@ class MainActivity : AppCompatActivity() {
}
}
- private fun filterList(text: String) {
- tempUserList.clear()
- binding.userRecyclerView.adapter = tempAdapter
- for (user in userList) {
- if (user.name?.startsWith(text, ignoreCase = true) == true) {
- tempUserList.add(user)
- }
- }
- if (tempUserList.isEmpty()) {
- tempAdapter.notifyDataSetChanged()
- Toast.makeText(this@MainActivity, "No data found", Toast.LENGTH_SHORT).show()
- } else {
- tempAdapter.notifyDataSetChanged()
- }
- }
-
override fun onBackPressed() {
super.onBackPressed()
val intent = Intent(Intent.ACTION_MAIN)
diff --git a/TalkIn/app/src/main/java/com/example/talk_in/MainViewModel.kt b/TalkIn/app/src/main/java/com/example/talk_in/MainViewModel.kt
new file mode 100644
index 0000000..8984ba8
--- /dev/null
+++ b/TalkIn/app/src/main/java/com/example/talk_in/MainViewModel.kt
@@ -0,0 +1,50 @@
+package com.example.talk_in
+
+import android.widget.Toast
+import androidx.lifecycle.LiveData
+import androidx.lifecycle.MutableLiveData
+import com.example.talk_in.databinding.ActivityMainBinding
+import com.google.firebase.auth.FirebaseAuth
+import com.google.firebase.database.DataSnapshot
+import com.google.firebase.database.DatabaseError
+import com.google.firebase.database.DatabaseReference
+import com.google.firebase.database.FirebaseDatabase
+import com.google.firebase.database.ValueEventListener
+
+class MainViewModel {
+ private val _userList = MutableLiveData>()
+ val userList: LiveData> get()=_userList
+
+ private val mAuth: FirebaseAuth=FirebaseAuth.getInstance()
+ private val mDbRef: DatabaseReference=FirebaseDatabase.getInstance().reference
+
+ init {
+ fetchUsers()
+ }
+
+ // Firebase Fetch
+
+ private fun fetchUsers(){
+ mDbRef.child("user").addValueEventListener(object :ValueEventListener{
+ override fun onDataChange(snapshot: DataSnapshot) {
+ val tempList = mutableListOf()
+ for (postSnapshot in snapshot.children){
+ val currentUser =postSnapshot.getValue(User::class.java)
+ if (currentUser != null && mAuth.currentUser?.uid !=currentUser.uid&¤tUser.verified==true){
+ tempList.add(currentUser)
+ }
+ }
+ _userList.value=tempList
+ }
+
+ override fun onCancelled(error: DatabaseError) {
+
+ }
+ })
+
+ }
+ fun filterList(query: String):List{
+ return _userList.value?.filter { it.name?.startsWith(query,ignoreCase = true)==true }?: emptyList()
+ }
+
+}
\ No newline at end of file
diff --git a/TalkIn/app/src/main/java/com/example/talk_in/UserAdapter.kt b/TalkIn/app/src/main/java/com/example/talk_in/UserAdapter.kt
index 83d60cf..4fc14d4 100644
--- a/TalkIn/app/src/main/java/com/example/talk_in/UserAdapter.kt
+++ b/TalkIn/app/src/main/java/com/example/talk_in/UserAdapter.kt
@@ -21,8 +21,9 @@ import com.google.firebase.storage.StorageReference
import java.io.File
import java.io.IOException
-class UserAdapter(val context: Context, val userList: ArrayList) :
+class UserAdapter(val context: Context, private var userList: ArrayList) :
RecyclerView.Adapter() {
+
private lateinit var mAuth: FirebaseAuth
private lateinit var storageReference: StorageReference
private lateinit var mDbRef: DatabaseReference
@@ -61,14 +62,13 @@ class UserAdapter(val context: Context, val userList: ArrayList) :
override fun onDataChange(snapshot: DataSnapshot) {
if (snapshot.exists()) {
val lastMessage = snapshot.children.first().getValue(Message::class.java)
- holder.txt_last_message.setText(lastMessage?.message.toString())
- }
- else{
+ holder.txt_last_message.text = lastMessage?.message.toString()
+ } else {
var aboutUser = currentUser.aboutMe.toString().trim()
- if (aboutUser.length > 30){
+ if (aboutUser.length > 30) {
aboutUser = aboutUser.substring(0, minOf(currentUser.aboutMe.toString().length, 30)).trim() + "..."
}
- holder.txt_last_message.setText(aboutUser)
+ holder.txt_last_message.text = aboutUser
}
}
@@ -83,9 +83,9 @@ class UserAdapter(val context: Context, val userList: ArrayList) :
}
class UserViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
- val textName = itemView.findViewById(R.id.txt_name)
- val userprofileImage = itemView.findViewById(R.id.user_profile_image)
- val txt_last_message = itemView.findViewById(R.id.txt_last_message)
+ val textName: TextView = itemView.findViewById(R.id.txt_name)
+ val userprofileImage: ImageView = itemView.findViewById(R.id.user_profile_image)
+ val txt_last_message: TextView = itemView.findViewById(R.id.txt_last_message)
}
private fun setProfileImage(uid: String, holder: UserViewHolder) {
@@ -97,11 +97,18 @@ class UserAdapter(val context: Context, val userList: ArrayList) :
.addOnSuccessListener {
val bitmap = BitmapFactory.decodeFile(localFile.absolutePath)
holder.userprofileImage.setImageBitmap(bitmap)
- }.addOnFailureListener{
+ }.addOnFailureListener {
holder.userprofileImage.setImageResource(R.drawable.user_profile_icon)
}
} catch (e: IOException) {
e.printStackTrace()
}
}
-}
\ No newline at end of file
+
+ // Add updateUsers method
+ fun updateUsers(newUserList: List) {
+ userList.clear()
+ userList.addAll(newUserList)
+ notifyDataSetChanged()
+ }
+}