· 8 years ago · Jul 23, 2018, 02:30 PM
1
2
3import android.content.Intent;
4import android.os.Bundle;
5import android.support.annotation.NonNull;
6import android.support.annotation.Nullable;
7import android.support.v7.app.AppCompatActivity;
8import android.util.Log;
9import android.view.View;
10import android.view.WindowManager;
11import android.widget.Button;
12import android.widget.EditText;
13import android.widget.ProgressBar;
14import android.widget.Toast;
15
16import com.google.android.gms.tasks.OnCompleteListener;
17import com.google.android.gms.tasks.OnFailureListener;
18import com.google.android.gms.tasks.Task;
19import com.google.firebase.auth.AuthResult;
20import com.google.firebase.auth.FirebaseAuth;
21import com.google.firebase.auth.FirebaseUser;
22import com.google.firebase.database.DatabaseReference;
23import com.google.firebase.database.FirebaseDatabase;
24
25import courses.pluralsight.com.tabianconsulting.models.User;
26
27
28public class RegisterActivity extends AppCompatActivity {
29
30 private static final String TAG = "RegisterActivity";
31
32 private static final String DOMAIN_NAME = "gmail.com";
33
34 //widgets
35 private EditText mEmail, mPassword, mConfirmPassword;
36 private Button mRegister;
37 private ProgressBar mProgressBar;
38
39 //vars
40 public static boolean isActivityRunning;
41
42 @Override
43 protected void onCreate(@Nullable Bundle savedInstanceState) {
44 super.onCreate(savedInstanceState);
45 setContentView(R.layout.activity_register);
46 mEmail = (EditText) findViewById(R.id.input_email);
47 mPassword = (EditText) findViewById(R.id.input_password);
48 mConfirmPassword = (EditText) findViewById(R.id.input_confirm_password);
49 mRegister = (Button) findViewById(R.id.btn_register);
50 mProgressBar = (ProgressBar) findViewById(R.id.progressBar);
51
52 mRegister.setOnClickListener(new View.OnClickListener() {
53 @Override
54 public void onClick(View view) {
55 Log.d(TAG, "onClick: attempting to register.");
56
57 //check for null valued EditText fields
58 if(!isEmpty(mEmail.getText().toString())
59 && !isEmpty(mPassword.getText().toString())
60 && !isEmpty(mConfirmPassword.getText().toString())){
61
62 //check if user has a company email address
63 if(isValidDomain(mEmail.getText().toString())){
64
65 //check if passwords match
66 if(doStringsMatch(mPassword.getText().toString(), mConfirmPassword.getText().toString())){
67
68 //Initiate registration task
69 registerNewEmail(mEmail.getText().toString(), mPassword.getText().toString());
70 }else{
71 Toast.makeText(RegisterActivity.this, "Passwords do not Match", Toast.LENGTH_SHORT).show();
72 }
73 }else{
74 Toast.makeText(RegisterActivity.this, "Please Register with Company Email", Toast.LENGTH_SHORT).show();
75 }
76
77 }else{
78 Toast.makeText(RegisterActivity.this, "You must fill out all the fields", Toast.LENGTH_SHORT).show();
79 }
80 }
81 });
82
83 hideSoftKeyboard();
84
85 }
86
87
88 /**
89 * Register a new email and password to Firebase Authentication
90 * @param email
91 * @param password
92 */
93 public void registerNewEmail(final String email, String password){
94
95 showDialog();
96
97 FirebaseAuth.getInstance().createUserWithEmailAndPassword(email, password)
98 .addOnCompleteListener(new OnCompleteListener<AuthResult>() {
99 @Override
100 public void onComplete(@NonNull Task<AuthResult> task) {
101 Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful());
102
103 if (task.isSuccessful()){
104 Log.d(TAG, "onComplete: AuthState: " + FirebaseAuth.getInstance().getCurrentUser().getUid());
105
106 //send email verificaiton
107 sendVerificationEmail();
108
109 //insert some default data
110 User user = new User();
111 user.setName(email.substring(0, email.indexOf("@")));
112 user.setPhone("1");
113 user.setProfile_image("");
114 user.setSecurity_level("1");
115 user.setUser_id(FirebaseAuth.getInstance().getCurrentUser().getUid());
116 FirebaseDatabase.getInstance().getReference()
117 .child(getString(R.string.dbnode_users))
118 .child(FirebaseAuth.getInstance().getCurrentUser().getUid())
119 .setValue(user)
120 .addOnCompleteListener(new OnCompleteListener<Void>() {
121 @Override
122 public void onComplete(@NonNull Task<Void> task) {
123 FirebaseAuth.getInstance().signOut();
124
125 //redirect the user to the login screen
126 redirectLoginScreen();
127 }
128 }).addOnFailureListener(new OnFailureListener() {
129 @Override
130 public void onFailure(@NonNull Exception e) {
131 Toast.makeText(RegisterActivity.this, "something went wrong.", Toast.LENGTH_SHORT).show();
132 FirebaseAuth.getInstance().signOut();
133
134 //redirect the user to the login screen
135 redirectLoginScreen();
136 }
137 });
138
139 }
140 if (!task.isSuccessful()) {
141 Toast.makeText(RegisterActivity.this, "Unable to Register",
142 Toast.LENGTH_SHORT).show();
143 }
144 hideDialog();
145
146 // ...
147 }
148 });
149 }
150
151 /**
152 * sends an email verification link to the user
153 */
154 private void sendVerificationEmail() {
155 FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
156
157 if (user != null) {
158 user.sendEmailVerification()
159 .addOnCompleteListener(new OnCompleteListener<Void>() {
160 @Override
161 public void onComplete(@NonNull Task<Void> task) {
162 if (task.isSuccessful()) {
163 Toast.makeText(RegisterActivity.this, "Sent Verification Email", Toast.LENGTH_SHORT).show();
164 }
165 else{
166 Toast.makeText(RegisterActivity.this, "Couldn't Verification Send Email", Toast.LENGTH_SHORT).show();
167 }
168 }
169 });
170 }
171
172 }
173
174 /**
175 * Returns True if the user's email contains '@tabian.ca'
176 * @param email
177 * @return
178 */
179 private boolean isValidDomain(String email){
180 Log.d(TAG, "isValidDomain: verifying email has correct domain: " + email);
181 String domain = email.substring(email.indexOf("@") + 1).toLowerCase();
182 Log.d(TAG, "isValidDomain: users domain: " + domain);
183 return domain.equals(DOMAIN_NAME);
184 }
185
186 /**
187 * Redirects the user to the login screen
188 */
189 private void redirectLoginScreen(){
190 Log.d(TAG, "redirectLoginScreen: redirecting to login screen.");
191
192 Intent intent = new Intent(RegisterActivity.this, LoginActivity.class);
193 startActivity(intent);
194 finish();
195 }
196 /**
197 * Return true if @param 's1' matches @param 's2'
198 * @param s1
199 * @param s2
200 * @return
201 */
202 private boolean doStringsMatch(String s1, String s2){
203 return s1.equals(s2);
204 }
205
206 /**
207 * Return true if the @param is null
208 * @param string
209 * @return
210 */
211 private boolean isEmpty(String string){
212 return string.equals("");
213 }
214
215
216 private void showDialog(){
217 mProgressBar.setVisibility(View.VISIBLE);
218
219 }
220
221 private void hideDialog(){
222 if(mProgressBar.getVisibility() == View.VISIBLE){
223 mProgressBar.setVisibility(View.INVISIBLE);
224 }
225 }
226
227 private void hideSoftKeyboard(){
228 this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
229 }
230
231 @Override
232 public void onStart() {
233 super.onStart();
234 isActivityRunning = true;
235 }
236
237 @Override
238 public void onStop() {
239 super.onStop();
240 isActivityRunning = false;
241 }
242
243}