Created
December 2, 2023 16:48
-
-
Save amoozeshbebin/25f5ec0c49271c877509635ae604c16d to your computer and use it in GitHub Desktop.
MVP
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
MainActivity: | |
package com.iliyadev.mvp.main | |
import android.content.Intent | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.widget.Button | |
import com.iliyadev.mvp.R | |
import com.iliyadev.mvp.login.LoginActivity | |
class MainActivity : AppCompatActivity(),MainContract.MainView { | |
private lateinit var presenter: MainContract.MainPresenter | |
private lateinit var btn_login:Button | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_main) | |
init() | |
} | |
private fun init(){ | |
bindViews() | |
presenter = MainPresenterImpl(this) | |
btn_login.setOnClickListener { | |
presenter.handleLoginButton() | |
} | |
} | |
private fun bindViews(){ | |
btn_login = findViewById(R.id.btn_login) | |
} | |
override fun showLoginView() { | |
startActivity(Intent(this, LoginActivity::class.java)) | |
} | |
} | |
MainContract interface: | |
package com.iliyadev.mvp.main | |
interface MainContract { | |
interface MainView { | |
fun showLoginView() | |
} | |
interface MainPresenter { | |
fun handleLoginButton() | |
} | |
} | |
MainPresenterImpl: | |
package com.iliyadev.mvp.main | |
class MainPresenterImpl(private var view:MainContract.MainView) : MainContract.MainPresenter { | |
override fun handleLoginButton() { | |
view.showLoginView() | |
} | |
} | |
LoginPresenterImpl: | |
package com.iliyadev.mvp.login | |
import com.iliyadev.mvp.login.data.LoginInteractor | |
import com.iliyadev.mvp.login.data.UserCrenedtial | |
import com.iliyadev.mvp.main.MainContract | |
class LoginPresenterImpl( | |
private val view:LoginContract.LoginView, | |
) : LoginContract.LoginPresenter { | |
private val interactor = LoginInteractor(this) | |
override fun doLogin(userCrenedtial: UserCrenedtial) { | |
view.showLoading() | |
interactor.login(userCrenedtial) | |
} | |
override fun onError(message: String) { | |
view.hideLoading() | |
view.onError(message) | |
} | |
override fun onSuccess() { | |
view.hideLoading() | |
view.onSuccess() | |
} | |
} | |
LoginContract Interface: | |
package com.iliyadev.mvp.login | |
import com.iliyadev.mvp.login.data.UserCrenedtial | |
interface LoginContract { | |
interface LoginView { | |
fun onError(message: String) | |
fun onSuccess() | |
fun showLoading() | |
fun hideLoading() | |
} | |
interface LoginPresenter { | |
fun doLogin(userCrenedtial: UserCrenedtial) | |
fun onError(message: String) | |
fun onSuccess() | |
} | |
} | |
LoginActivity: | |
package com.iliyadev.mvp.login | |
import android.app.ProgressDialog | |
import androidx.appcompat.app.AppCompatActivity | |
import android.os.Bundle | |
import android.view.View | |
import android.widget.Button | |
import android.widget.EditText | |
import android.widget.ProgressBar | |
import android.widget.Toast | |
import com.google.android.material.button.MaterialButton | |
import com.iliyadev.mvp.R | |
import com.iliyadev.mvp.login.data.UserCrenedtial | |
class LoginActivity : AppCompatActivity(), LoginContract.LoginView { | |
private lateinit var txtusername: EditText | |
private lateinit var txtpaswword: EditText | |
private lateinit var btnSignin: MaterialButton | |
private lateinit var progressBar: ProgressBar | |
private lateinit var presenter: LoginContract.LoginPresenter | |
override fun onCreate(savedInstanceState: Bundle?) { | |
super.onCreate(savedInstanceState) | |
setContentView(R.layout.activity_login) | |
init() | |
} | |
private fun init() { | |
bindView() | |
presenter = LoginPresenterImpl(this) | |
// Initially hide the ProgressBar | |
progressBar.visibility = View.GONE | |
btnSignin.setOnClickListener { | |
// Show the ProgressBar when the login button is clicked | |
showLoading() | |
val username = txtusername.text.toString() | |
val password = txtpaswword.text.toString() | |
val userCredential = UserCrenedtial(username, password) | |
presenter.doLogin(userCredential) | |
} | |
} | |
private fun bindView() { | |
txtusername = findViewById(R.id.txtUsername) | |
txtpaswword = findViewById(R.id.txtPassword) | |
btnSignin = findViewById(R.id.logBTN) | |
progressBar = findViewById(R.id.progressBar) | |
} | |
override fun onError(message: String) { | |
Toast.makeText(this, message, Toast.LENGTH_LONG).show() | |
hideLoading() | |
} | |
override fun onSuccess() { | |
Toast.makeText(this, "Login Successfully!", Toast.LENGTH_LONG).show() | |
hideLoading() | |
} | |
override fun showLoading() { | |
progressBar.visibility = View.VISIBLE | |
btnSignin.visibility = View.GONE | |
} | |
override fun hideLoading() { | |
progressBar.visibility = View.GONE | |
btnSignin.visibility = View.VISIBLE | |
} | |
} | |
UserCredential: | |
package com.iliyadev.mvp.login.data | |
class UserCrenedtial(val username:String,var password:String) { | |
} | |
LoginInteractor: | |
package com.iliyadev.mvp.login.data | |
import android.os.Handler | |
import android.os.Looper | |
import com.iliyadev.mvp.login.LoginContract | |
class LoginInteractor(private val presenter: LoginContract.LoginPresenter) { | |
fun login(userCrenedtial: UserCrenedtial) { | |
if (hasError(userCrenedtial)) { | |
return | |
} | |
// Simulate an asynchronous operation (e.g., API call) | |
Handler(Looper.getMainLooper()).postDelayed({ | |
// Check credentials against a server or perform any other operation | |
if (userCrenedtial.username == "admin" && userCrenedtial.password == "123") { | |
presenter.onSuccess() | |
} else { | |
presenter.onError("Incorrect username or password") | |
} | |
}, 2000) // Simulating a delay of 2 seconds, adjust as needed | |
} | |
private fun hasError(userCrenedtial: UserCrenedtial): Boolean { | |
if (userCrenedtial.username.isEmpty() || userCrenedtial.password.isEmpty()) { | |
presenter.onError("Please enter a username and password") | |
return true | |
} | |
return false | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment