package com.example.gorda.snapchatclone.loginRegistration; import android.content.Intent; import android.support.annotation.NonNull; import android.support.design.widget.TextInputLayout; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.text.Editable; import android.text.TextWatcher; import android.view.View; import android.view.WindowManager; import android.widget.Button; import android.widget.EditText; import android.widget.Toast; import com.example.gorda.snapchatclone.MainActivity; import com.example.gorda.snapchatclone.R; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.database.DatabaseReference; import com.google.firebase.database.FirebaseDatabase; import java.util.HashMap; import java.util.Map; public class RegisterActivity extends AppCompatActivity { private Button mRegister; private EditText mEmail, mPassword, mUsername; private TextInputLayout emailLayout, passwordLayout, usernameLayout; private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener firebaseAuthStateListener; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_register); firebaseAuthStateListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser(); if (user != null) { Intent intent = new Intent(getApplication(), MainActivity.class); intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); startActivity(intent); finish(); } } }; mAuth = FirebaseAuth.getInstance(); mRegister = findViewById(R.id.buttonRegister); mEmail = findViewById(R.id.editTextEmailRegister); mPassword = findViewById(R.id.editTextPasswordRegister); mUsername = findViewById(R.id.editTextUsernameRegister); passwordLayout = findViewById(R.id.editTextPasswordRegisterLay); emailLayout = findViewById(R.id.editTextEmailRegisterLay); usernameLayout = findViewById(R.id.editTextUsernameRegisterLay); mPassword.addTextChangedListener(new MyTextWatcher(mPassword)); mUsername.addTextChangedListener(new MyTextWatcher(mUsername)); mEmail.addTextChangedListener(new MyTextWatcher(mEmail)); mRegister.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { if (!validateEmail()) { return; } if (!validatePassword()) { return; } if (!validateUsername()) { return; } final String username = mUsername.getText().toString(); final String email = mEmail.getText().toString(); final String password = mPassword.getText().toString(); mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(RegisterActivity.this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { if (!task.isSuccessful()) { Toast.makeText(getApplication(), "Sign in ERROR", Toast.LENGTH_LONG).show(); } else { String userId = mAuth.getCurrentUser().getUid(); DatabaseReference currentUserDB = FirebaseDatabase.getInstance().getReference().child("users").child(userId); Map userInfo = new HashMap(); userInfo.put("email", email); userInfo.put("username", username); userInfo.put("profileImageUrl", "default"); currentUserDB.updateChildren(userInfo); } } }); } }); } private boolean validatePassword() { if (mPassword.getText().toString().trim().isEmpty()) { passwordLayout.setError("Enter your password"); requestFocus(mPassword); return false; } passwordLayout.setErrorEnabled(false); return true; } private boolean validateEmail() { if (mEmail.getText().toString().trim().isEmpty()) { emailLayout.setError("Enter your email"); requestFocus(mEmail); return false; } emailLayout.setErrorEnabled(false); return true; } private boolean validateUsername() { if (mUsername.getText().toString().trim().isEmpty()) { usernameLayout.setError("Enter your username"); requestFocus(mUsername); return false; } usernameLayout.setErrorEnabled(false); return true; } private void requestFocus(View view) { if (view.requestFocus()) { getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } private class MyTextWatcher implements TextWatcher { private View view; private MyTextWatcher(View view) { this.view = view; } @Override public void beforeTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void onTextChanged(CharSequence charSequence, int i, int i1, int i2) { } @Override public void afterTextChanged(Editable editable) { switch (view.getId()) { case R.id.editTextEmailRegister: validateEmail(); break; case R.id.editTextPasswordRegister: validatePassword(); break; case R.id.editTextUsernameRegister: validateUsername(); break; } } } @Override protected void onStart() { super.onStart(); mAuth.addAuthStateListener(firebaseAuthStateListener); } @Override protected void onStop() { super.onStop(); mAuth.removeAuthStateListener(firebaseAuthStateListener); } }