adding shared prefs to save the users name

This commit is contained in:
2025-07-03 21:31:35 -04:00
parent e44ce67873
commit b1f1aa0cad
4 changed files with 201 additions and 27 deletions

View File

@@ -1,6 +1,8 @@
package com.mattintech.lchat.ui
import android.os.Bundle
import android.text.Editable
import android.text.TextWatcher
import android.util.Log
import android.view.LayoutInflater
import android.view.View
@@ -48,6 +50,18 @@ class LobbyFragment : Fragment() {
}
private fun setupUI() {
binding.nameInput.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {}
override fun afterTextChanged(s: Editable?) {
s?.toString()?.trim()?.let { name ->
viewModel.saveUserName(name)
}
}
})
binding.modeRadioGroup.setOnCheckedChangeListener { _, checkedId ->
when (checkedId) {
R.id.hostRadio -> {
@@ -80,6 +94,12 @@ class LobbyFragment : Fragment() {
}
private fun observeViewModel() {
viewModel.savedUserName.observe(viewLifecycleOwner) { savedName ->
if (!savedName.isNullOrEmpty() && binding.nameInput.text.isNullOrEmpty()) {
binding.nameInput.setText(savedName)
}
}
viewModel.state.observe(viewLifecycleOwner) { state ->
when (state) {
is LobbyState.Idle -> {

View File

@@ -0,0 +1,36 @@
package com.mattintech.lchat.utils
import android.content.Context
import android.content.SharedPreferences
import dagger.hilt.android.qualifiers.ApplicationContext
import javax.inject.Inject
import javax.inject.Singleton
@Singleton
class PreferencesManager @Inject constructor(
@ApplicationContext private val context: Context
) {
private val sharedPreferences: SharedPreferences =
context.getSharedPreferences(PREFS_NAME, Context.MODE_PRIVATE)
fun saveUserName(name: String) {
if (name.isBlank()) {
clearUserName()
} else {
sharedPreferences.edit().putString(KEY_USER_NAME, name).apply()
}
}
fun getUserName(): String? {
return sharedPreferences.getString(KEY_USER_NAME, null)
}
fun clearUserName() {
sharedPreferences.edit().remove(KEY_USER_NAME).apply()
}
companion object {
private const val PREFS_NAME = "lchat_preferences"
private const val KEY_USER_NAME = "user_name"
}
}

View File

@@ -5,6 +5,7 @@ import androidx.lifecycle.MutableLiveData
import androidx.lifecycle.ViewModel
import androidx.lifecycle.viewModelScope
import com.mattintech.lchat.repository.ChatRepository
import com.mattintech.lchat.utils.PreferencesManager
import dagger.hilt.android.lifecycle.HiltViewModel
import kotlinx.coroutines.launch
import javax.inject.Inject
@@ -27,7 +28,8 @@ sealed class LobbyEvent {
@HiltViewModel
class LobbyViewModel @Inject constructor(
private val chatRepository: ChatRepository
private val chatRepository: ChatRepository,
private val preferencesManager: PreferencesManager
) : ViewModel() {
private val _state = MutableLiveData<LobbyState>(LobbyState.Idle)
@@ -36,8 +38,16 @@ class LobbyViewModel @Inject constructor(
private val _events = MutableLiveData<LobbyEvent?>()
val events: LiveData<LobbyEvent?> = _events
private val _savedUserName = MutableLiveData<String?>()
val savedUserName: LiveData<String?> = _savedUserName
init {
setupConnectionCallback()
loadSavedUserName()
}
private fun loadSavedUserName() {
_savedUserName.value = preferencesManager.getUserName()
}
private fun setupConnectionCallback() {
@@ -65,6 +75,7 @@ class LobbyViewModel @Inject constructor(
viewModelScope.launch {
_state.value = LobbyState.Connecting
preferencesManager.saveUserName(userName)
chatRepository.startHostMode(roomName)
_events.value = LobbyEvent.NavigateToChat(roomName, userName, true)
}
@@ -78,11 +89,13 @@ class LobbyViewModel @Inject constructor(
viewModelScope.launch {
_state.value = LobbyState.Connecting
preferencesManager.saveUserName(userName)
chatRepository.startClientMode()
}
}
fun onConnectedToRoom(roomName: String, userName: String) {
preferencesManager.saveUserName(userName)
_events.value = LobbyEvent.NavigateToChat(roomName, userName, false)
}
@@ -90,6 +103,12 @@ class LobbyViewModel @Inject constructor(
_events.value = null
}
fun saveUserName(name: String) {
if (name.isNotBlank()) {
preferencesManager.saveUserName(name)
}
}
override fun onCleared() {
super.onCleared()
// Clean up resources if needed