Last active
October 12, 2021 08:42
-
-
Save hieptl/1292a7e0e33ab042943361901e005c3b to your computer and use it in GitHub Desktop.
SignUpActivity.java - Voice and Video Chat App - Android App
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
package com.cometchat.chatapp; | |
import android.app.ProgressDialog; | |
import android.content.Intent; | |
import android.os.Bundle; | |
import android.view.View; | |
import android.widget.Button; | |
import android.widget.EditText; | |
import android.widget.Toast; | |
import androidx.annotation.NonNull; | |
import androidx.appcompat.app.AppCompatActivity; | |
import com.cometchat.pro.core.CometChat; | |
import com.cometchat.pro.exceptions.CometChatException; | |
import com.cometchat.pro.models.User; | |
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.database.DatabaseReference; | |
import com.google.firebase.database.FirebaseDatabase; | |
import java.util.UUID; | |
import java.util.concurrent.ThreadLocalRandom; | |
public class SignUpActivity extends AppCompatActivity implements View.OnClickListener { | |
private EditText usernameEdt; | |
private EditText emailEdt; | |
private EditText passwordEdt; | |
private EditText confirmPasswordEdt; | |
private Button registerBtn; | |
private ProgressDialog pDialog; | |
private static final String EMPTY_STRING = ""; | |
private FirebaseAuth mAuth; | |
private DatabaseReference mDatabase; | |
@Override | |
protected void onCreate(Bundle savedInstanceState) { | |
super.onCreate(savedInstanceState); | |
setContentView(R.layout.activity_sign_up); | |
this.initViews(); | |
this.initEvents(); | |
this.initFirebase(); | |
this.initFirebaseDatabase(); | |
} | |
private void initViews() { | |
this.usernameEdt = findViewById(R.id.usernameEdt); | |
this.emailEdt = findViewById(R.id.emailEdt); | |
this.passwordEdt = findViewById(R.id.passwordEdt); | |
this.confirmPasswordEdt = findViewById(R.id.confirmPasswordEdt); | |
this.registerBtn = findViewById(R.id.registerBtn); | |
this.pDialog = new ProgressDialog(this); | |
this.pDialog.setMessage("Loading"); | |
this.pDialog.setCanceledOnTouchOutside(false); | |
} | |
private void initEvents() { | |
this.registerBtn.setOnClickListener(this); | |
} | |
private void initFirebase() { | |
this.mAuth = FirebaseAuth.getInstance(); | |
} | |
private void initFirebaseDatabase() { | |
this.mDatabase = FirebaseDatabase.getInstance(Constants.FIREBASE_REALTIME_DATABASE_URL).getReference(); | |
} | |
private String generateAvatar() { | |
int avatarPosition = ThreadLocalRandom.current().nextInt(0, 5); | |
String[] avatars = new String[]{ | |
"https://data-us.cometchat.io/assets/images/avatars/captainamerica.png", | |
"https://data-us.cometchat.io/assets/images/avatars/cyclops.png", | |
"https://data-us.cometchat.io/assets/images/avatars/ironman.png", | |
"https://data-us.cometchat.io/assets/images/avatars/spiderman.png", | |
"https://data-us.cometchat.io/assets/images/avatars/wolverine.png" | |
}; | |
return avatars[avatarPosition]; | |
} | |
private void goToLogin() { | |
startActivity(new Intent(SignUpActivity.this, LoginActivity.class)); | |
} | |
private void insertFirebaseDatabase(UserModel userModel) { | |
// Write a message to the database | |
if (userModel != null) { | |
mDatabase.child(Constants.FIREBASE_USERS).child(userModel.getUid()).setValue(userModel); | |
} | |
} | |
private void registerCometChatAccount(String username, String email) { | |
if (username == null) { | |
pDialog.dismiss(); | |
return; | |
} | |
String uid = UUID.randomUUID().toString(); | |
String avatar = this.generateAvatar(); | |
User user = new User(); | |
user.setUid(uid); | |
user.setName(username); | |
user.setAvatar(avatar); | |
CometChat.createUser(user, Constants.COMETCHAT_AUTH_KEY, new CometChat.CallbackListener<User>() { | |
@Override | |
public void onSuccess(User user) { | |
pDialog.dismiss(); | |
Toast.makeText(SignUpActivity.this, user.getName() + " has been created successfully", Toast.LENGTH_SHORT).show(); | |
UserModel userModel = new UserModel(uid, username, email, avatar); | |
insertFirebaseDatabase(userModel); | |
goToLogin(); | |
} | |
@Override | |
public void onError(CometChatException e) { | |
pDialog.dismiss(); | |
Toast.makeText(SignUpActivity.this, "Failed to create your account. Please try again", Toast.LENGTH_SHORT).show(); | |
} | |
}); | |
} | |
private void callFirebaseAuthService(String username, String email, String password) { | |
this.mAuth.createUserWithEmailAndPassword(email, password) | |
.addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { | |
@Override | |
public void onComplete(@NonNull Task<AuthResult> task) { | |
if (task.isSuccessful()) { | |
// register to the CometChat. | |
registerCometChatAccount(username, email); | |
} else { | |
Toast.makeText(SignUpActivity.this, "Fail to create you account. Please try again", Toast.LENGTH_SHORT).show(); | |
pDialog.dismiss(); | |
} | |
} | |
}); | |
} | |
private boolean validateAccount(String username, String email, String password, String confirmPassword) { | |
if (username == null || username.equals(EMPTY_STRING)) { | |
Toast.makeText(SignUpActivity.this, "Please input your username", Toast.LENGTH_SHORT).show(); | |
return false; | |
} | |
if (email == null || email.equals(EMPTY_STRING)) { | |
Toast.makeText(SignUpActivity.this, "Please input your email", Toast.LENGTH_SHORT).show(); | |
return false; | |
} | |
if (password == null || password.equals(EMPTY_STRING)) { | |
Toast.makeText(SignUpActivity.this, "Please input your password", Toast.LENGTH_SHORT).show(); | |
return false; | |
} | |
if (confirmPassword == null || confirmPassword.equals(EMPTY_STRING)) { | |
Toast.makeText(SignUpActivity.this, "Please input your confirm password", Toast.LENGTH_SHORT).show(); | |
return false; | |
} | |
if (!password.equals(confirmPassword)) { | |
Toast.makeText(SignUpActivity.this, "The confirmed password and the password must be matched", Toast.LENGTH_SHORT).show(); | |
return false; | |
} | |
return true; | |
} | |
private void registerAccount() { | |
String username = this.usernameEdt.getText().toString().trim(); | |
String email = this.emailEdt.getText().toString().trim(); | |
String password = this.passwordEdt.getText().toString().trim(); | |
String confirmPassword = this.confirmPasswordEdt.getText().toString().trim(); | |
if (this.validateAccount(username, email, password, confirmPassword)) { | |
this.pDialog.show(); | |
this.callFirebaseAuthService(username, email, password); | |
} | |
} | |
@Override | |
public void onClick(View view) { | |
switch (view.getId()) { | |
case R.id.registerBtn: | |
this.registerAccount(); | |
break; | |
} | |
} | |
} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment