· 6 years ago · Dec 31, 2019, 05:50 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.android.gms.tasks.Tasks;
24import com.google.firebase.auth.AuthResult;
25import com.google.firebase.auth.FirebaseAuth;
26import com.google.firebase.auth.FirebaseUser;
27import com.google.firebase.database.DatabaseReference;
28import com.google.firebase.database.FirebaseDatabase;
29import com.google.firebase.functions.FirebaseFunctions;
30import com.virgilsecurity.android.ethree.kotlin.callback.OnGetTokenCallback;
31import com.virgilsecurity.android.ethree.kotlin.callback.OnResultListener;
32import com.virgilsecurity.android.ethree.kotlin.interaction.EThree;
33
34import java.util.Map;
35
36
37public class CreateUserActivity extends AppCompatActivity implements View.OnClickListener
38{
39
40 public static final String tag = CreateUserActivity.class.getSimpleName();
41 private DatabaseReference mDatabase;
42 private FirebaseAuth mAuth;
43 private EThree eThree;
44 private final com.virgilsecurity.android.ethree.kotlin.callback.OnCompleteListener onRegisterListener;
45 private Button nextButton;
46 private EditText mDesiredUsername;
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.nextButton).setOnClickListener(this);
74 initViews();
75 }
76
77
78 private void initViews()
79 {
80 nextButton = (Button) findViewById(R.id.nextButton);
81 nextButton.setOnClickListener(this);
82 mDesiredUsername = (EditText) findViewById(R.id.desiredUserNameEditText);
83 }
84
85
86 @Override
87 public void onClick(View v)
88 {
89 switch (v.getId())
90 {
91 case R.id.nextButton:
92 onNextButtonClicked();
93 break;
94 }
95
96 }
97
98 private void onNextButtonClicked()
99 {
100 mUserName = mDesiredUsername.getText().toString();
101 if (!TextUtils.isEmpty(mUserName))
102 {
103 createUser();
104 }
105 else
106 {
107 Toast.makeText(this, "User name can not be blank", Toast.LENGTH_LONG).show();
108 }
109 }
110
111 private void createUser()
112 {
113 mAuth = FirebaseAuth.getInstance();
114 String email = mUserName + "@gmail.com";
115 mAuth.createUserWithEmailAndPassword(email, mUserName)
116 .addOnCompleteListener(this, new OnCompleteListener<AuthResult>()
117 {
118
119 @Override
120 public void onComplete(@NonNull Task<AuthResult> task)
121 {
122 Log.d(tag, "createUser:oncomplete:" + task.isSuccessful());
123 hideProgressDialog();
124 if (task.isSuccessful())
125 {
126 FirebaseUser firebaseUser = task.getResult().getUser();
127 Log.d(tag, "Firebase user token :" + firebaseUser.getIdToken(true));
128 if(null != firebaseUser)
129 {
130 OnGetTokenCallback tokenFetcherCallback = new OnGetTokenCallback()
131 {
132
133 @Override
134 public String onGetToken()
135 {
136 try
137 {
138 Map<String, String> data = (Map<String, String>) Tasks.await(FirebaseFunctions.getInstance().getHttpsCallable("getVirgilJwt").call()).getData();
139 Log.d(tag, "Print token: " + data.get("token"));
140 return data.get("token");
141 }
142 catch (Exception ex)
143 {
144 Log.e(tag, "Error at OnGetTokenCallback: " + ex.getMessage());
145 }
146 return null;
147 }
148 };
149 OnResultListener<EThree> initializeListener = new OnResultListener<EThree>()
150 {
151
152 @Override
153 public void onSuccess(EThree result)
154 {
155 Log.d(tag, "EThree initialization succeed");
156 eThree = result;
157 }
158
159 @Override
160 public void onError(Throwable throwable)
161 {
162 Log.d(tag, "EThree initialization failed: " + throwable.getMessage());
163 }
164 };
165 EThree.initialize(getBaseContext(), tokenFetcherCallback).addCallback(initializeListener);
166 eThree.register().addCallback(onRegisterListener);
167 onAuthSuccess(firebaseUser);
168 Util.updateToken();
169 }
170 }
171 else
172 {
173 try
174 {
175 Exception e = task.getException();
176 e.printStackTrace();
177 Log.d("exception:", e.getMessage());
178 Toast.makeText(CreateUserActivity.this, e.getMessage(), Toast.LENGTH_SHORT).show();
179 }
180 catch (Exception e)
181 {
182 e.printStackTrace();
183 Log.d("exception:", e.getMessage());
184 }
185 }
186 }
187 });
188 }
189
190
191 private void onAuthSuccess(FirebaseUser firebaseUser)
192 {
193 mDatabase = FirebaseDatabase.getInstance().getReference();
194 User user = new User();
195 user.setName(usernameFromEmail(firebaseUser.getEmail()));
196 user.setUid(firebaseUser.getUid());
197 mDatabase.child("users").child(firebaseUser.getUid()).setValue(user);
198 Intent intent = new Intent(this, MainActivity.class);
199 startActivity(intent);
200 }
201
202 private ProgressDialog mProgressDialog;
203
204 public void hideProgressDialog()
205 {
206 if (null != mProgressDialog && mProgressDialog.isShowing())
207 {
208 mProgressDialog.dismiss();
209 }
210 }
211
212 private String usernameFromEmail(String email)
213 {
214 if (email.contains("@"))
215 {
216 return email.split("@")[0];
217 }
218 else
219 {
220 return email;
221 }
222 }
223}