add remembering me
This commit is contained in:
		
					parent
					
						
							
								9d0401c0f6
							
						
					
				
			
			
				commit
				
					
						ac3900d3d4
					
				
			
		
					 2 changed files with 26 additions and 9 deletions
				
			
		| 
						 | 
				
			
			@ -63,7 +63,6 @@ import androidx.compose.ui.unit.dp
 | 
			
		|||
import androidx.lifecycle.lifecycleScope
 | 
			
		||||
import eu.m724.vastapp.BuildConfig
 | 
			
		||||
import eu.m724.vastapp.R
 | 
			
		||||
import eu.m724.vastapp.activity.PermissionChecker
 | 
			
		||||
import eu.m724.vastapp.activity.dashboard.DashboardActivity
 | 
			
		||||
import eu.m724.vastapp.ui.theme.VastappTheme
 | 
			
		||||
import eu.m724.vastapp.vastai.data.User
 | 
			
		||||
| 
						 | 
				
			
			@ -84,7 +83,7 @@ class LoginActivity : ComponentActivity() {
 | 
			
		|||
 | 
			
		||||
        val executor = Executors.newSingleThreadExecutor()
 | 
			
		||||
        val cronetEngine = CronetEngine.Builder(baseContext).build()
 | 
			
		||||
        val loginViewModel = LoginViewModel(cronetEngine, executor)
 | 
			
		||||
        val loginViewModel = LoginViewModel(application, cronetEngine, executor)
 | 
			
		||||
 | 
			
		||||
        loginViewModel.error.observe(this) { errorMessage ->
 | 
			
		||||
            if (errorMessage != null) {
 | 
			
		||||
| 
						 | 
				
			
			@ -100,6 +99,8 @@ class LoginActivity : ComponentActivity() {
 | 
			
		|||
            }
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        loginViewModel.loadKey()
 | 
			
		||||
 | 
			
		||||
        enableEdgeToEdge()
 | 
			
		||||
        setContent {
 | 
			
		||||
            VastappTheme {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -1,23 +1,24 @@
 | 
			
		|||
package eu.m724.vastapp.activity.login
 | 
			
		||||
 | 
			
		||||
import android.widget.Toast
 | 
			
		||||
import android.app.Application
 | 
			
		||||
import android.content.Context
 | 
			
		||||
import androidx.lifecycle.AndroidViewModel
 | 
			
		||||
import androidx.lifecycle.LiveData
 | 
			
		||||
import androidx.lifecycle.MutableLiveData
 | 
			
		||||
import androidx.lifecycle.ViewModel
 | 
			
		||||
import androidx.lifecycle.viewModelScope
 | 
			
		||||
import eu.m724.vastapp.vastai.ApiFailure
 | 
			
		||||
import eu.m724.vastapp.vastai.ApiRoute
 | 
			
		||||
import eu.m724.vastapp.vastai.VastApi
 | 
			
		||||
import eu.m724.vastapp.vastai.api.UserUrlRequestCallback
 | 
			
		||||
import eu.m724.vastapp.vastai.data.User
 | 
			
		||||
import kotlinx.coroutines.flow.MutableStateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.StateFlow
 | 
			
		||||
import kotlinx.coroutines.flow.asStateFlow
 | 
			
		||||
import kotlinx.coroutines.launch
 | 
			
		||||
import org.chromium.net.CronetEngine
 | 
			
		||||
import java.util.concurrent.Executor
 | 
			
		||||
 | 
			
		||||
class LoginViewModel(val cronetEngine: CronetEngine, val executor: Executor) : ViewModel() {
 | 
			
		||||
class LoginViewModel(
 | 
			
		||||
    application: Application,
 | 
			
		||||
    val cronetEngine: CronetEngine,
 | 
			
		||||
    val executor: Executor
 | 
			
		||||
) : AndroidViewModel(application) {
 | 
			
		||||
    private val _uiState: MutableStateFlow<LoginUiState> =
 | 
			
		||||
        MutableStateFlow(LoginUiState.Idle)
 | 
			
		||||
    val uiState: StateFlow<LoginUiState> =
 | 
			
		||||
| 
						 | 
				
			
			@ -26,11 +27,26 @@ class LoginViewModel(val cronetEngine: CronetEngine, val executor: Executor) : V
 | 
			
		|||
    private val _error = MutableLiveData<String?>(null)
 | 
			
		||||
    val error: LiveData<String?> = _error // TODO put this in uistate
 | 
			
		||||
 | 
			
		||||
    private val applicationContext = getApplication<Application>().applicationContext
 | 
			
		||||
    private val sharedPreferences = applicationContext.getSharedPreferences("login", Context.MODE_PRIVATE)
 | 
			
		||||
 | 
			
		||||
    fun loadKey() {
 | 
			
		||||
        val apiKey = sharedPreferences.getString("apiKey", null)
 | 
			
		||||
 | 
			
		||||
        if (apiKey != null) {
 | 
			
		||||
            tryLogin(apiKey)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    fun tryLogin(apiKey: String) {
 | 
			
		||||
        val vastApi = VastApi(apiKey, cronetEngine, executor)
 | 
			
		||||
        val request = vastApi.buildRequest(
 | 
			
		||||
            ApiRoute.SHOW_USER,
 | 
			
		||||
            UserUrlRequestCallback({ user ->
 | 
			
		||||
                with (sharedPreferences.edit()) {
 | 
			
		||||
                    putString("apiKey", apiKey) // TODO encrypt
 | 
			
		||||
                    apply()
 | 
			
		||||
                } // TODO toggle for this
 | 
			
		||||
                _uiState.value = LoginUiState.Success(user)
 | 
			
		||||
            }, { apiFailure ->
 | 
			
		||||
                _uiState.value = LoginUiState.Idle
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue