Skip to content

Commit

Permalink
Got an issue at line 17 of MainActivity while working on Ijaiswalshiv…
Browse files Browse the repository at this point in the history
  • Loading branch information
yuvrajsinghgmx committed Jun 1, 2024
1 parent ed7f6e3 commit 0f68745
Show file tree
Hide file tree
Showing 6 changed files with 115 additions and 64 deletions.
26 changes: 26 additions & 0 deletions TalkIn/.idea/appInsightsSettings.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 3 additions & 0 deletions TalkIn/.idea/deploymentTargetSelector.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 4 additions & 1 deletion TalkIn/app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -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'
Expand Down
66 changes: 14 additions & 52 deletions TalkIn/app/src/main/java/com/example/talk_in/MainActivity.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<User>
private val mainViewModel: MainViewModel by viewModels()
private lateinit var adapter: UserAdapter
private lateinit var tempUserList: ArrayList<User>
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
Expand All @@ -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)
Expand Down
50 changes: 50 additions & 0 deletions TalkIn/app/src/main/java/com/example/talk_in/MainViewModel.kt
Original file line number Diff line number Diff line change
@@ -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<List<User>>()
val userList: LiveData<List<User>> 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<User>()
for (postSnapshot in snapshot.children){
val currentUser =postSnapshot.getValue(User::class.java)
if (currentUser != null && mAuth.currentUser?.uid !=currentUser.uid&&currentUser.verified==true){
tempList.add(currentUser)
}
}
_userList.value=tempList
}

override fun onCancelled(error: DatabaseError) {

}
})

}
fun filterList(query: String):List<User>{
return _userList.value?.filter { it.name?.startsWith(query,ignoreCase = true)==true }?: emptyList()
}

}
29 changes: 18 additions & 11 deletions TalkIn/app/src/main/java/com/example/talk_in/UserAdapter.kt
Original file line number Diff line number Diff line change
Expand Up @@ -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<User>) :
class UserAdapter(val context: Context, private var userList: ArrayList<User>) :
RecyclerView.Adapter<UserAdapter.UserViewHolder>() {

private lateinit var mAuth: FirebaseAuth
private lateinit var storageReference: StorageReference
private lateinit var mDbRef: DatabaseReference
Expand Down Expand Up @@ -61,14 +62,13 @@ class UserAdapter(val context: Context, val userList: ArrayList<User>) :
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
}
}

Expand All @@ -83,9 +83,9 @@ class UserAdapter(val context: Context, val userList: ArrayList<User>) :
}

class UserViewHolder(itemView: View) : RecyclerView.ViewHolder(itemView) {
val textName = itemView.findViewById<TextView>(R.id.txt_name)
val userprofileImage = itemView.findViewById<ImageView>(R.id.user_profile_image)
val txt_last_message = itemView.findViewById<TextView>(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) {
Expand All @@ -97,11 +97,18 @@ class UserAdapter(val context: Context, val userList: ArrayList<User>) :
.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()
}
}
}

// Add updateUsers method
fun updateUsers(newUserList: List<User>) {
userList.clear()
userList.addAll(newUserList)
notifyDataSetChanged()
}
}

0 comments on commit 0f68745

Please sign in to comment.