В компаньоне лежит набор строк. Так делять нельзя, иначе не будет возможности сделать перевод на другой язык. Правильно класть строки в strings.xml. При этом вместо
viewState.showError(TOO_LONG_PASSWORD)
Надо сделать конкретные методы:
viewState.showTooLongPasswordError()
и т.д.
Разнести логику в репозитории и интеракторы
Презентер должен выглядеть примерно таким образом (убрал валидацию, по идее ее надо в отедльный класс, который вернет результат валидации. И на основании этого поля ты будешь показывать сообщения с ошибкой):
// domain
interface UserCredentialsRepository {
fun saveCredentials(credentials: Credentials): Completable
}
class SignInInteractor(
private val userCredentialsRepository: UserCredentialsRepository,
private val appRequests: AppRequests
) {
data class Credentials(val id: String, val token: String)
// data
class UserCredentialsRepositoryImpl(val context: Context) : UserCredentialsRepository {
companion object {
const val USER = "current.user"
const val SAVE_ID = "save.id"
const val SAVE_TOKEN = "save.token"
}
val sharedPrefs = context....
fun saveCredentials(credentials: Credentials): Completable {
return Completable.fromAction {
preferences.edit {
clear()
this.putInt(SAVE_ID, credentials.id)
this.putLong(SAVE_TOKEN, credentials.token)
apply()
}
}
}
}
// presenter
@InjectViewState
class LoginPresenter(
private val signInInteractor: SignInInteractor
) : MvpPresenter() {
private val tag = LoginPresenter::class.java.simpleName
private var authRequest: Disposable? = null // dispose it on destroy the presenter
// (check out a super method for that)
fun signInClicked(email: String, password: String) {
Log.d(tag, "Sign in Clicked with email : $email and password : $password")
if (authRequest?.isDisposed == false)
return
Log.d(tag, "Checking correctness")
if (emailValid && passwordValid) {
viewState.showLoad()
authRequest = signInInteractor.signIn(email, password)
.observeOn(AndroidSchedulers.mainThread())
.subscribe({
viewState.hideLoad()
viewState.signIn()
}, {
Log.d(tag, "Error occurred : $it")
viewState.hideLoad()
})
}
}
fun signUpClicked() {}
strings.xml
. При этом вместоНадо сделать конкретные методы:
и т.д.
Разнести логику в репозитории и интеракторы Презентер должен выглядеть примерно таким образом (убрал валидацию, по идее ее надо в отедльный класс, который вернет результат валидации. И на основании этого поля ты будешь показывать сообщения с ошибкой):
class SignInInteractor( private val userCredentialsRepository: UserCredentialsRepository, private val appRequests: AppRequests ) {
}
data class Credentials(val id: String, val token: String)
// data class UserCredentialsRepositoryImpl(val context: Context) : UserCredentialsRepository {
}
// presenter @InjectViewState class LoginPresenter( private val signInInteractor: SignInInteractor ) : MvpPresenter() {
}