1/ Create A New Project .
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
xmlns:tools="http://schemas.android.com/tools"
android:layout_height="match_parent"
tools:context=".MainActivity"
android:background="@color/black">
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/emailEditText"
android:layout_width="match_parent"
android:layout_height="60dp"
android:hint="user: user@gmail.com"
android:textColorHint="@color/white"
android:layout_marginTop="45dp"
android:padding="20dp"
android:textColor="@color/white"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:inputType="textEmailAddress" />
<androidx.appcompat.widget.AppCompatEditText
android:id="@+id/passwordEditText"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginTop="25dp"
android:hint="password : 123456"
android:textColorHint="@color/white"
android:padding="20dp"
android:textColor="@color/white"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:inputType="textPassword" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/loginButton"
android:layout_width="match_parent"
android:layout_height="60dp"
android:layout_marginBottom="20dp"
android:layout_marginTop="20dp"
android:padding="18dp"
android:textSize="16sp"
android:textColor="@color/black"
android:layout_marginStart="25dp"
android:layout_marginEnd="25dp"
android:focusable="true"
android:text="Signin" />
</LinearLayout>
</RelativeLayout>
package com.example.mvplogintest;
public interface LoginContract {
interface View {
void showInvalidCredentialsError();
void showLoginSuccessMessage();
}
interface PresenterData {
void onLoginButtonClick(String email, String password);
}
interface ModelData{
boolean loginInfo(String userInput, String passInput);
}
}
package com.example.mvplogintest;
public class UserLoginModel implements LoginContract.ModelData {
String userName;
String password;
public UserLoginModel(String userName, String password) {
this.userName = userName;
this.password = password;
}
@Override
public boolean loginInfo(String userInput, String passInput) {
if (userName.equals(userInput) && password.equals(passInput)){
return true;
}else {
return false;
}
}
}
package com.example.mvplogintest;
public class LoginPresenter implements LoginContract.PresenterData {
private LoginContract.View viewIterface;
private LoginContract.ModelData model;
String user;
String pass;
public LoginPresenter(LoginContract.View view,String user,String pass) {
viewIterface = view;
this.user = user;
this.pass = pass;
model=new UserLoginModel(user,pass);
}
@Override
public void onLoginButtonClick(String userInput, String passInput) {
if (model.loginInfo(userInput,passInput)) {
viewIterface.showLoginSuccessMessage();
} else {
viewIterface.showInvalidCredentialsError();
}
}
}
package com.example.mvplogintest;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
import androidx.activity.EdgeToEdge;
import androidx.appcompat.app.AppCompatActivity;
import androidx.core.graphics.Insets;
import androidx.core.view.ViewCompat;
import androidx.core.view.WindowInsetsCompat;
public class MainActivity extends AppCompatActivity implements LoginContract.View{
private EditText etEmail;
private EditText etPassword;
private Button btnSigin;
private LoginPresenter loginPresenter;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
EdgeToEdge.enable(this);
setContentView(R.layout.activity_main);
etEmail = findViewById(R.id.emailEditText);
etPassword = findViewById(R.id.passwordEditText);
btnSigin = findViewById(R.id.loginButton);
loginPresenter = new LoginPresenter(this,"user@gmail.com","123456");
btnSigin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
String email = etEmail.getText().toString().trim();
String password = etPassword.getText().toString().trim();
loginPresenter.onLoginButtonClick(email, password);
}
});
}
@Override
public void showInvalidCredentialsError() {
Toast.makeText(this, "Error", Toast.LENGTH_SHORT).show();
}
@Override
public void showLoginSuccessMessage() {
Toast.makeText(this, "Success", Toast.LENGTH_SHORT).show();
}
}
Run code then see output.