diff --git a/app/src/main/java/com/itsaky/androidide/di/AppModule.kt b/app/src/main/java/com/itsaky/androidide/di/AppModule.kt index a601f3178a..fd35f7396e 100644 --- a/app/src/main/java/com/itsaky/androidide/di/AppModule.kt +++ b/app/src/main/java/com/itsaky/androidide/di/AppModule.kt @@ -8,6 +8,7 @@ import com.itsaky.androidide.analytics.AnalyticsManager import com.itsaky.androidide.analytics.IAnalyticsManager import com.itsaky.androidide.git.core.GitCredentialsManager import com.itsaky.androidide.roomData.recentproject.RecentProjectRoomDatabase +import com.itsaky.androidide.viewmodel.CloneRepositoryViewModel import com.itsaky.androidide.viewmodel.GitBottomSheetViewModel import com.itsaky.androidide.viewmodel.MainViewModel import kotlinx.coroutines.CoroutineScope @@ -33,6 +34,7 @@ val coreModule = GitBottomSheetViewModel(get()) } viewModel { MainViewModel(get()) } + viewModel { CloneRepositoryViewModel(get(), get()) } single { diff --git a/app/src/main/java/com/itsaky/androidide/fragments/CloneRepositoryFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/CloneRepositoryFragment.kt index b6a585fff9..5051c9ad03 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/CloneRepositoryFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/CloneRepositoryFragment.kt @@ -7,7 +7,6 @@ import android.view.ViewGroup import android.widget.EditText import androidx.core.widget.doAfterTextChanged import org.koin.androidx.viewmodel.ext.android.activityViewModel -import androidx.fragment.app.viewModels import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle @@ -24,12 +23,13 @@ import com.itsaky.androidide.idetooltips.TooltipManager import com.itsaky.androidide.idetooltips.TooltipTag import com.itsaky.androidide.utils.forEachViewRecursively import kotlinx.coroutines.launch +import org.koin.androidx.viewmodel.ext.android.viewModel import java.io.File class CloneRepositoryFragment : BaseFragment() { private var binding: FragmentCloneRepositoryBinding? = null - private val viewModel: CloneRepositoryViewModel by viewModels() + private val viewModel: CloneRepositoryViewModel by viewModel() private val mainViewModel: MainViewModel by activityViewModel() override fun onCreateView( diff --git a/app/src/main/java/com/itsaky/androidide/viewmodel/CloneRepositoryViewModel.kt b/app/src/main/java/com/itsaky/androidide/viewmodel/CloneRepositoryViewModel.kt index b6f7ea367f..7883ee4d62 100644 --- a/app/src/main/java/com/itsaky/androidide/viewmodel/CloneRepositoryViewModel.kt +++ b/app/src/main/java/com/itsaky/androidide/viewmodel/CloneRepositoryViewModel.kt @@ -21,9 +21,13 @@ import java.net.UnknownHostException import java.io.EOFException import java.io.File import com.blankj.utilcode.util.NetworkUtils +import com.itsaky.androidide.git.core.GitCredentialsManager import com.itsaky.androidide.resources.R -class CloneRepositoryViewModel(application: Application) : AndroidViewModel(application) { +class CloneRepositoryViewModel( + application: Application, + private val credentialsManager: GitCredentialsManager +) : AndroidViewModel(application) { private val _uiState = MutableStateFlow(CloneRepoUiState.Idle()) val uiState: StateFlow = _uiState.asStateFlow() @@ -182,6 +186,7 @@ class CloneRepositoryViewModel(application: Application) : AndroidViewModel(appl _uiState.update { CloneRepoUiState.Success(localPath = localPath) } + credentialsManager.saveCredentialsIfNeeded(username, token) } catch (e: Exception) { // Error handling if (isCloneCancelled) { diff --git a/git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt b/git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt index 9bd71da2c4..707217eb38 100644 --- a/git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt +++ b/git-core/src/main/java/com/itsaky/androidide/git/core/GitCredentialsManager.kt @@ -32,7 +32,7 @@ class GitCredentialsManager( return cachedPrefs!! } - fun saveCredentials(username: String, token: String) { + private fun saveCredentials(username: String, token: String) { try { val (usernameIv, usernameData) = CryptoManager.encrypt(username) val (tokenIv, tokenData) = CryptoManager.encrypt(token) @@ -51,11 +51,6 @@ class GitCredentialsManager( fun getUsername(): String? = decrypt(KEY_USERNAME_IV, KEY_USERNAME_DATA) fun getToken(): String? = decrypt(KEY_TOKEN_IV, KEY_TOKEN_DATA) - fun hasCredentials(): Boolean { - val prefs = getPrefs() - return prefs.contains(KEY_USERNAME_DATA) && prefs.contains(KEY_TOKEN_DATA) - } - private fun decrypt(ivKey: String, dataKey: String): String? { val prefs = getPrefs() val ivBase64 = prefs.getString(ivKey, null) ?: return null