· 6 years ago · Dec 31, 2019, 03:34 PM
1package com.fmerscher.hskl.project.whatsappclone.ui.createUserScreen;
2
3import android.app.ProgressDialog;
4import android.content.Intent;
5import android.os.Bundle;
6import android.support.annotation.NonNull;
7import android.support.annotation.Nullable;
8import android.support.v7.app.AppCompatActivity;
9import android.text.TextUtils;
10import android.util.Log;
11import android.view.View;
12import android.widget.Button;
13import android.widget.EditText;
14import android.widget.Toast;
15
16
17import com.fmerscher.hskl.project.whatsappclone.R;
18import com.fmerscher.hskl.project.whatsappclone.ui.homescreen.MainActivity;
19import com.fmerscher.hskl.project.whatsappclone.ui.models.User;
20import com.fmerscher.hskl.project.whatsappclone.utils.Util;
21import com.google.android.gms.tasks.OnCompleteListener;
22import com.google.android.gms.tasks.Task;
23import com.google.firebase.auth.AuthResult;
24import com.google.firebase.auth.FirebaseAuth;
25import com.google.firebase.auth.FirebaseUser;
26import com.google.firebase.database.DatabaseReference;
27import com.google.firebase.database.FirebaseDatabase;
28import com.google.firebase.functions.FirebaseFunctions;
29import com.virgilsecurity.android.ethree.kotlin.callback.OnGetTokenCallback;
30import com.virgilsecurity.android.ethree.kotlin.callback.OnResultListener;
31import com.virgilsecurity.android.ethree.kotlin.interaction.EThree;
32
33import java.util.Map;
34
35public class CreateUserActivity extends AppCompatActivity implements View.OnClickListener
36{
37
38 public static final String tag = CreateUserActivity.class.getSimpleName();
39 private DatabaseReference mDatabase;
40 private FirebaseAuth mAuth;
41 private EThree eThree;
42 private final com.virgilsecurity.android.ethree.kotlin.callback.OnCompleteListener onRegisterListener;
43 private Button nextButton;
44 private EditText mDesiredUsername;
45 private EditText mExistingUsername;
46 private EditText mExistingPassword;
47 private String mUserName;
48
49 public CreateUserActivity()
50 {
51 onRegisterListener = new com.virgilsecurity.android.ethree.kotlin.callback.OnCompleteListener()
52 {
53
54 @Override
55 public void onSuccess()
56 {
57 Log.d(tag, "Virgilsecurity registration complete.");
58 }
59
60 @Override
61 public void onError(Throwable throwable)
62 {
63
64 }
65 };
66 }
67
68 @Override
69 protected void onCreate(@Nullable Bundle savedInstanceState)
70 {
71 super.onCreate(savedInstanceState);
72 setContentView(R.layout.activity_create_user);
73 findViewById(R.id.nextBtn).setOnClickListener(this);
74 OnGetTokenCallback tokenFetcherCallback = initializeEthreeToFetchVirgilJWTTokenFromFirebaseFunction();
75 OnResultListener<EThree> initializeListener = new OnResultListener<EThree>() {
76
77 @Override public void onSuccess(EThree result) {
78 Log.d(tag, "EThree initialization succeed");
79 eThree = result;
80 }
81
82 @Override public void onError(Throwable throwable) {
83 Log.d(tag, "EThree initialization failed: " + throwable.getMessage());
84 }
85 };
86 EThree.initialize(getBaseContext(), tokenFetcherCallback).addCallback(initializeListener);
87 initViews();
88 }
89
90 private OnGetTokenCallback initializeEthreeToFetchVirgilJWTTokenFromFirebaseFunction()
91 {
92 return new OnGetTokenCallback() {
93
94 @Override public String onGetToken() {
95 Map<String, String> data = (Map<String, String>) FirebaseFunctions.getInstance().getHttpsCallable("getVirgilJwt ").call().getResult().getData();
96 Log.d(tag, "Print token: " + data.get("token"));
97 return data.get("token");
98 }
99 };
100 }
101
102 private void initViews()
103 {
104 nextButton = (Button) findViewById(R.id.nextBtn);
105 nextButton.setOnClickListener(this);
106 mDesiredUsername = (EditText) findViewById(R.id.userNameET);
107
108 mExistingUsername = (EditText) findViewById(R.id.existingUserET);
109 mExistingPassword = (EditText) findViewById(R.id.passwordET);
110 }
111
112
113 @Override
114 public void onClick(View v)
115 {
116 switch (v.getId())
117 {
118 case R.id.nextBtn:
119 onNextButtonClicked();
120 break;
121 }
122
123 }
124
125 private void onNextButtonClicked()
126 {
127 if (0 < mExistingUsername.getText().toString().length())
128 {
129 loginExistingUser();
130 return;
131 }
132
133 mUserName = mDesiredUsername.getText().toString();
134 if (!TextUtils.isEmpty(mUserName))
135 {
136 createUser();
137 }
138 else
139 {
140 Toast.makeText(this, "User name can not be blank", Toast.LENGTH_LONG).show();
141 }
142 }
143
144 private void loginExistingUser()
145 {
146 String user = mExistingUsername.getText().toString();
147 String password = mExistingPassword.getText().toString();
148
149 FirebaseAuth.getInstance().signInWithEmailAndPassword(user, password).addOnCompleteListener(new OnCompleteListener<AuthResult>()
150 {
151
152 @Override
153 public void onComplete(@NonNull Task<AuthResult> task)
154 {
155
156 Log.d(tag, "signInUser:oncomplete:" + task.isSuccessful());
157
158 hideProgressDialog();
159
160
161 if (task.isSuccessful())
162 {
163 eThree.register().addCallback(onRegisterListener);
164 onAuthSuccess(task.getResult().getUser());
165 Util.updateToken();
166 }
167 else
168 {
169 try
170 {
171 Exception e = task.getException();
172 e.printStackTrace();
173 Log.d("exception:", e.getMessage());
174 Toast.makeText(CreateUserActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
175 }
176 catch (Exception e)
177 {
178 e.printStackTrace();
179 Log.d("exception:", e.getMessage());
180 }
181 }
182
183 }
184 });
185 }
186
187 private void createUser()
188 {
189 mAuth = FirebaseAuth.getInstance();
190 String email = mUserName + "@gmail.com";
191
192 mAuth.createUserWithEmailAndPassword(email, mUserName)
193 .addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
194 {
195
196 @Override
197 public void onComplete(@NonNull Task<AuthResult> task)
198 {
199 Log.d(tag, "createUser:oncomplete:" + task.isSuccessful());
200 hideProgressDialog();
201 if (task.isSuccessful())
202 {
203 eThree.register().addCallback(onRegisterListener);
204 onAuthSuccess(task.getResult().getUser());
205 Util.updateToken();
206 }
207 else
208 {
209 try
210 {
211 Exception e = task.getException();
212 e.printStackTrace();
213 Log.d("exception:", e.getMessage());
214 Toast.makeText(CreateUserActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
215 }
216 catch (Exception e)
217 {
218 e.printStackTrace();
219 Log.d("exception:", e.getMessage());
220 }
221 }
222 }
223 });
224
225 }
226
227
228 private void onAuthSuccess(FirebaseUser firebaseUser)
229 {
230 mDatabase = FirebaseDatabase.getInstance().getReference();
231 User user = new User();
232 user.setName(usernameFromEmail(firebaseUser.getEmail()));
233 user.setUid(firebaseUser.getUid());
234 mDatabase.child("users").child(firebaseUser.getUid()).setValue(user);
235 Intent intent = new Intent(this, MainActivity.class);
236 startActivity(intent);
237 }
238
239 private ProgressDialog mProgressDialog;
240
241 public void hideProgressDialog()
242 {
243 if (null != mProgressDialog && mProgressDialog.isShowing())
244 {
245 mProgressDialog.dismiss();
246 }
247 }
248
249 private String usernameFromEmail(String email)
250 {
251 if (email.contains("@"))
252 {
253 return email.split("@")[0];
254 }
255 else
256 {
257 return email;
258 }
259 }
260
261
262}