Android 29 April 2019
Post header popup list

Android Coding Sigup Timelapse with Android Studio

Hi guys, here you have a timelapse coding a Signup/Login screen.

YouTube tutorial. Enjoy!

Code Display

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".session.SignupActivity"
    android:orientation="vertical"
    android:background="@color/white"
    >


    <ImageView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/text_logo"

        android:layout_marginStart="50dp"
        android:layout_marginTop="70dp"
        android:layout_marginEnd="50dp"
        />

    <EditText
        android:id="@+id/et_user_name"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:paddingBottom="6dp"
        android:paddingTop="6dp"
        android:layout_marginStart="50dp"
        android:layout_marginTop="60dp"
        android:layout_marginEnd="50dp"

        tools:text="devjdelasen"
        android:textSize="14dp"
        android:hint="@string/user_name_label"
        android:background="@drawable/edit_text_bg"
        android:textColor="@color/title_strong"
        android:textColorHint="@color/send_message_hint"
        android:inputType="textWebEmailAddress"
        android:fontFamily="@font/my_nunito"
        />

    <TextView
        android:visibility="gone"
        android:id="@+id/tv_user_name_validation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:text="Valdiation user name"

        android:gravity="end"
        android:layout_marginStart="50dp"
        android:layout_marginEnd="50dp"

        android:textColor="@color/red_validation"
        android:fontFamily="@font/my_nunito"
        android:textSize="12sp"
        />

    <EditText
        android:id="@+id/et_email"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:paddingBottom="6dp"
        android:paddingTop="6dp"
        android:layout_marginStart="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="50dp"

        tools:text="jonathandelasen@gmail.com"
        android:textSize="14dp"
        android:hint="@string/email_label"
        android:background="@drawable/edit_text_bg"
        android:textColor="@color/title_strong"
        android:textColorHint="@color/send_message_hint"
        android:inputType="textWebEmailAddress"
        android:fontFamily="@font/my_nunito"
        />

    <TextView
        android:visibility="gone"
        android:id="@+id/tv_email_validation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:text="Valdiation email"

        android:gravity="end"
        android:layout_marginStart="50dp"
        android:layout_marginEnd="50dp"

        android:textColor="@color/red_validation"
        android:fontFamily="@font/my_nunito"
        android:textSize="12sp"
        />

    <EditText
        android:id="@+id/et_password"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        android:paddingLeft="12dp"
        android:paddingRight="12dp"
        android:paddingBottom="6dp"
        android:paddingTop="6dp"
        android:layout_marginStart="50dp"
        android:layout_marginTop="10dp"
        android:layout_marginEnd="50dp"

        android:textSize="14dp"
        android:hint="@string/password_label"
        android:background="@drawable/edit_text_bg"
        android:textColor="@color/title_strong"
        android:textColorHint="@color/send_message_hint"
        android:inputType="textPassword"
        android:imeOptions="actionGo"
        android:fontFamily="@font/my_nunito"

        tools:text="Asdf1234"
        />

    <TextView
        android:visibility="gone"
        android:id="@+id/tv_password_validation"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        tools:text="Valdiation password"

        android:gravity="end"
        android:layout_marginStart="50dp"
        android:layout_marginEnd="50dp"

        android:textColor="@color/red_validation"
        android:fontFamily="@font/my_nunito"
        android:textSize="12sp"
        />

    <RelativeLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"

        android:layout_marginStart="50dp"
        android:layout_marginTop="42dp"
        android:layout_marginEnd="50dp"
        >

        <TextView
            android:id="@+id/tv_action"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"

            android:gravity="center"
            android:paddingLeft="8dp"
            android:paddingTop="8dp"
            android:paddingRight="8dp"
            android:paddingBottom="8dp"

            android:text="@string/sign_up_label"
            android:textColor="@color/white"
            android:background="@drawable/button_login_signup_bg"
            android:textSize="16dp"
            android:fontFamily="@font/my_nunito"
            android:textAllCaps="true"
            />


        <android.support.v4.widget.ContentLoadingProgressBar
            android:visibility="gone"
            android:id="@+id/clpb"
            android:layout_width="20dp"
            android:layout_height="20dp"
            style="?android:attr/progressBarStyleLarge"

            android:layout_centerInParent="true"
            />


    </RelativeLayout>

    <TextView
        android:id="@+id/tv_login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/log_in_label"

        android:layout_gravity="center_horizontal"
        android:layout_marginStart="32dp"
        android:layout_marginTop="12dp"
        android:layout_marginEnd="32dp"
        android:paddingStart="16dp"
        android:paddingTop="4dp"
        android:paddingEnd="16dp"
        android:paddingBottom="16dp"

        android:textSize="18dp"
        android:textColor="@color/detail_blue"
        android:fontFamily="@font/my_nunito"
        />

</LinearLayout>
                    
package jonathandelasen.com.nightlife.session;

import android.os.Bundle;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

import butterknife.BindView;
import jonathandelasen.com.nightlife.R;
import jonathandelasen.com.nightlife.activities.MyApplication;
import jonathandelasen.com.nightlife.profile.activities.CompleteInfoActivity;
import jonathandelasen.com.nightlife.tasks.SessionTask;
import jonathandelasen.com.nightlife.utils.Utils;

public class SignupActivity extends BaseLoginSigupActivity {



    @BindView(R.id.et_email) EditText etEmail;
    @BindView(R.id.tv_email_validation) TextView tvEmailValidation;

    @BindView(R.id.et_user_name) EditText etUserName;
    @BindView(R.id.tv_user_name_validation) TextView tvUserNameValidation;

    @BindView(R.id.et_password) EditText etPassword;
    @BindView(R.id.tv_password_validation) TextView tvPasswordValidation;

    @BindView(R.id.tv_login) TextView tvLogin;



    private String email, userName, password;



    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_signup);
        Utils.setTranslucentStatusBar(this);

        setLoaderStyle();
        setListeners();
    }



    private void setListeners() {
        setLoginListener();
        setSignupListener();
    }

    private void setSignupListener() {
        tvAction.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (!validate()) return;


                setViewsLoading();
                SessionTask.signup(userName, email, password, SignupActivity.this, new SessionTask.SignInCallback() {
                    @Override
                    public void signinSuccess() {
                        MyApplication.appInstance.preferences.setEmail(email);
                        MyApplication.appInstance.preferences.setPassword(password);
                        Utils.redirectToClearAllStack(SignupActivity.this, CompleteInfoActivity.class);
                        setUserPersonalInfoPreferences();
                    }

                    @Override
                    public void signinError(String message) {
                        setViewsNotLoading();
                        Toast.makeText(SignupActivity.this, message, Toast.LENGTH_LONG).show();
                    }

                    private void setViewsNotLoading() {
                        tvAction.setText(R.string.sign_up_label);
                        clpb.setVisibility(View.GONE);
                    }

                    private void setUserPersonalInfoPreferences() {
                        MyApplication.appInstance.preferences.setEmail(email);
                        MyApplication.appInstance.preferences.setPassword(password);
                        MyApplication.appInstance.preferences.setRememberMe(false);
                    }
                });
            }
        });
    }

    private boolean validate() {
        setValues();

        boolean isValidEmail = validateEmailAndSetError(email, tvEmailValidation);
        boolean isValidUserName = validateUserNameAndSetError(userName, tvUserNameValidation);
        boolean isValidPassword = validatePasswordAndSetError(password, tvPasswordValidation);

        return isValidEmail && isValidUserName && isValidPassword;
    }

    private void setValues() {
        email = etEmail.getText().toString();
        userName = etUserName.getText().toString();
        password = etPassword.getText().toString();
    }

    private void setLoginListener() {
        tvLogin.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                Utils.redirectTo(SignupActivity.this, LoginActivity.class);
            }
        });
    }
}

                    
package jonathandelasen.com.nightlife.session;

import android.annotation.SuppressLint;
import android.graphics.PorterDuff;
import android.support.v4.content.ContextCompat;
import android.support.v4.widget.ContentLoadingProgressBar;
import android.view.View;
import android.widget.TextView;

import butterknife.BindView;
import jonathandelasen.com.nightlife.R;
import jonathandelasen.com.nightlife.activities.BaseActivity;
import jonathandelasen.com.nightlife.utils.Utils;

@SuppressLint("Registered")
public class BaseLoginSigupActivity extends BaseActivity {


    private static final int MAX_USER_NAME_LENGHT = 12;
    private static final int MIN_USER_NAME_LENGHT = 2;
    private static final int MAX_PASSWORD_LENGHT = 20;
    private static final int MIN_PASSWORD_LENGHT = 4;


    @BindView(R.id.tv_action) TextView tvAction;
    @BindView(R.id.clpb) ContentLoadingProgressBar clpb;






    protected void setLoaderStyle() {
        clpb.getIndeterminateDrawable()
                .setColorFilter(ContextCompat.getColor(this, R.color.white), PorterDuff.Mode.SRC_IN );
    }

    protected void setViewsLoading() {
        tvAction.setText("");
        clpb.setVisibility(View.VISIBLE);
    }

    protected boolean validateEmailAndSetError(String email, TextView tvValidation) {
        boolean isValid = true;

        if (email.isEmpty()) {
            isValid = false;
            tvValidation.setText(R.string.empty_field_validation);
        }

        if (isValid && !Utils.isEmailFormatValid(email)) {
            isValid = false;
            tvValidation.setText(R.string.invalid_email_format_validation);
        }

        tvValidation.setVisibility(isValid ? View.GONE : View.VISIBLE);

        return isValid;
    }

    protected boolean validateUserNameAndSetError(String userName, TextView tvValidation) {
        boolean isValid = true;

        if (userName.isEmpty()) {
            isValid = false;
            tvValidation.setText(R.string.empty_field_validation);
        }

        if (isValid && !(userName.length() < MAX_USER_NAME_LENGHT)) {
            isValid = false;
            tvValidation.setText(getString(R.string.should_be_less_than_validation, MAX_USER_NAME_LENGHT));
        }

        if (isValid && !(userName.length() > MIN_USER_NAME_LENGHT)) {
            isValid = false;
            tvValidation.setText(getString(R.string.should_be_greater_than_validation, MIN_USER_NAME_LENGHT));
        }

        tvValidation.setVisibility(isValid ? View.GONE : View.VISIBLE);

        return isValid;
    }

    protected boolean validatePasswordAndSetError(String password, TextView tvValidation) {
        boolean isValid = true;

        if (password.isEmpty()) {
            isValid = false;
            tvValidation.setText(R.string.empty_field_validation);
        }

        if (isValid && !(password.length() < MAX_PASSWORD_LENGHT)) {
            isValid = false;
            tvValidation.setText(getString(R.string.should_be_less_than_validation, MAX_USER_NAME_LENGHT));
        }

        if (isValid && !(password.length() > MIN_PASSWORD_LENGHT)) {
            isValid = false;
            tvValidation.setText(getString(R.string.should_be_greater_than_validation, MIN_USER_NAME_LENGHT));
        }

        tvValidation.setVisibility(isValid ? View.GONE : View.VISIBLE);

        return isValid;
    }
}

                    
Author photo

About the author

I just turn ideas into apps.