adding shared prefs to save the users name
This commit is contained in:
@@ -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 -> {
|
||||
|
||||
@@ -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"
|
||||
}
|
||||
}
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user