Advertisement
Unofficialpage

Untitled

Feb 27th, 2018
168
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 24.35 KB | None | 0 0
  1. package com.malikbisic.sportapp.activity.firebase;
  2.  
  3. import android.app.ProgressDialog;
  4. import android.content.Intent;
  5.  
  6. import android.os.CountDownTimer;
  7. import android.support.annotation.NonNull;
  8. import android.support.v7.app.AppCompatActivity;
  9. import android.os.Bundle;
  10. import android.text.TextUtils;
  11. import android.util.Log;
  12. import android.view.View;
  13. import android.view.WindowManager;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import android.widget.ImageButton;
  17. import android.widget.TextView;
  18. import android.widget.Toast;
  19.  
  20. import com.facebook.CallbackManager;
  21. import com.facebook.FacebookCallback;
  22. import com.facebook.FacebookException;
  23. import com.facebook.login.LoginManager;
  24. import com.facebook.login.LoginResult;
  25. import com.google.android.gms.auth.api.Auth;
  26. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  27. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  28. import com.google.android.gms.auth.api.signin.GoogleSignInResult;
  29. import com.google.android.gms.common.ConnectionResult;
  30. import com.google.android.gms.common.api.ApiException;
  31. import com.google.android.gms.common.api.GoogleApiClient;
  32. import com.google.android.gms.tasks.OnCompleteListener;
  33. import com.google.android.gms.tasks.OnFailureListener;
  34. import com.google.android.gms.tasks.OnSuccessListener;
  35. import com.google.android.gms.tasks.Task;
  36. import com.google.firebase.auth.AuthCredential;
  37. import com.google.firebase.auth.AuthResult;
  38. import com.google.firebase.auth.FirebaseAuth;
  39. import com.google.firebase.auth.FirebaseUser;
  40. import com.google.firebase.auth.GoogleAuthProvider;
  41. import com.facebook.appevents.AppEventsLogger;
  42. import com.google.firebase.database.FirebaseDatabase;
  43. import com.google.firebase.firestore.DocumentReference;
  44. import com.google.firebase.firestore.DocumentSnapshot;
  45. import com.google.firebase.firestore.FirebaseFirestore;
  46. import com.google.firebase.iid.FirebaseInstanceId;
  47. import com.malikbisic.sportapp.R;
  48. import com.malikbisic.sportapp.activity.StopAppServices;
  49.  
  50. import java.lang.reflect.Array;
  51. import java.util.Arrays;
  52. import java.util.HashMap;
  53. import java.util.Map;
  54.  
  55.  
  56. public class LoginActivity extends AppCompatActivity implements View.OnClickListener {
  57. private static final int RC_SIGN_IN = 1;
  58. private static final String TAG = "LoginActivity";
  59. private GoogleApiClient mGoogleApiClient;
  60. private FirebaseAuth mAuth;
  61. private FirebaseDatabase mDatabase;
  62. private FirebaseAuth.AuthStateListener mAuthStateListener;
  63. private FirebaseFirestore mReferenceUsers;
  64. private EditText mEmailText;
  65. private EditText mPasswordText;
  66. private Button mLoginButton;
  67. private TextView mSignUpLink;
  68. private TextView emailError;
  69. private TextView passwordError;
  70. private TextView mForgotPassword;
  71. private ImageButton googleSignIn;
  72. private ImageButton facebookLogin;
  73. private String user_id;
  74. private String email;
  75. private String password;
  76. private ProgressDialog mDialog;
  77. public static String gFirstName;
  78. public static String gLastName;
  79. public static String gUserId;
  80. public static String userIdLogin;
  81. public static boolean checkGoogleSignIn = false;
  82. public static boolean checkLoginPressed = false;
  83. String getUserEmail;
  84.  
  85. CallbackManager mCallbackManager;
  86.  
  87. @Override
  88. protected void onCreate(Bundle savedInstanceState) {
  89. super.onCreate(savedInstanceState);
  90. Intent closeAPP = new Intent(this, StopAppServices.class);
  91. startService(closeAPP);
  92.  
  93. getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN);
  94. setContentView(R.layout.activity_login);
  95. AppEventsLogger.activateApp(getApplication());
  96. mEmailText = (EditText) findViewById(R.id.input_email_login);
  97. mPasswordText = (EditText) findViewById(R.id.input_password_login);
  98. mLoginButton = (Button) findViewById(R.id.btn_login);
  99. mSignUpLink = (TextView) findViewById(R.id.link_signup);
  100. googleSignIn = (ImageButton) findViewById(R.id.google_login);
  101. facebookLogin = (ImageButton) findViewById(R.id.facebbok_login);
  102. emailError = (TextView) findViewById(R.id.emailInfoErrorLogin);
  103. passwordError = (TextView) findViewById(R.id.passwordInfoErrorLogin);
  104. mForgotPassword = (TextView) findViewById(R.id.forgot_password);
  105.  
  106. Intent intent = getIntent();
  107. getUserEmail = intent.getStringExtra("email");
  108. mEmailText.setText(getUserEmail, TextView.BufferType.EDITABLE);
  109.  
  110. mAuth = FirebaseAuth.getInstance();
  111. mDatabase = FirebaseDatabase.getInstance();
  112. mLoginButton.setOnClickListener(this);
  113. mSignUpLink.setOnClickListener(this);
  114. mForgotPassword.setOnClickListener(this);
  115. googleSignIn.setOnClickListener(this);
  116. mDialog = new ProgressDialog(this);
  117. mReferenceUsers = FirebaseFirestore.getInstance();
  118. mReferenceUsers.collection("Users");
  119. //mReferenceUsers.keepSynced(true);
  120.  
  121. mAuth = FirebaseAuth.getInstance();
  122.  
  123. //FACEBOOK SIGN IN
  124.  
  125. facebookLogin.setOnClickListener(this);
  126.  
  127.  
  128.  
  129.  
  130. //GOOGLE SIGN IN
  131.  
  132. mAuthStateListener = new FirebaseAuth.AuthStateListener() {
  133. @Override
  134. public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
  135. FirebaseUser user = firebaseAuth.getCurrentUser();
  136.  
  137.  
  138. if (user != null) {
  139. autoLogin();
  140. Log.i("user", user.getEmail());
  141.  
  142. }
  143. }
  144. };
  145. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  146. .requestIdToken(getString(R.string.default_web_client_id))
  147. .requestEmail()
  148. .build();
  149.  
  150. mGoogleApiClient = new GoogleApiClient.Builder(getApplicationContext())
  151. .enableAutoManage(this, new GoogleApiClient.OnConnectionFailedListener() {
  152. @Override
  153. public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  154. Toast.makeText(LoginActivity.this, "You got an error", Toast.LENGTH_LONG).show();
  155. }
  156. }).addApi(Auth.GOOGLE_SIGN_IN_API, gso)
  157. .build();
  158.  
  159.  
  160. }
  161.  
  162. private void signIn() {
  163. Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
  164. startActivityForResult(signInIntent, RC_SIGN_IN);
  165. }
  166.  
  167. @Override
  168. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  169. super.onActivityResult(requestCode, resultCode, data);
  170.  
  171. // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
  172. if (requestCode == RC_SIGN_IN) {
  173. mDialog = new ProgressDialog(LoginActivity.this, R.style.AppTheme_Dark_Dialog);
  174. mDialog.setIndeterminate(true);
  175. mDialog.setMessage("Authentication...");
  176. mDialog.show();
  177. GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
  178. GoogleSignInAccount acct = result.getSignInAccount();
  179.  
  180. if (result.isSuccess()) {
  181. // Google Sign In was successful, authenticate with Firebase
  182. GoogleSignInAccount account = result.getSignInAccount();
  183. firebaseAuthWithGoogle(account);
  184. } else {
  185. // Google Sign In failed, update UI appropriately
  186. // ...
  187. ApiException e = new ApiException(result.getStatus());
  188. Log.e("googleLogin",e.getMessage());
  189. mDialog.dismiss();
  190. }
  191. }
  192. mCallbackManager.onActivityResult(requestCode, resultCode, data);
  193. }
  194.  
  195. private void firebaseAuthWithGoogle(final GoogleSignInAccount acct) {
  196.  
  197. final AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
  198. mAuth.signInWithCredential(credential)
  199. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
  200. @Override
  201. public void onComplete(@NonNull Task<AuthResult> task) {
  202. Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
  203.  
  204. // If sign in fails, display a message to the user. If sign in succeeds
  205. // the auth state listener will be notified and logic to handle the
  206. // signed in user can be handled in the listener.
  207. FirebaseUser user = FirebaseAuth.getInstance().getCurrentUser();
  208.  
  209. if (user != null) {
  210. gFirstName = acct.getGivenName();
  211. gLastName = acct.getFamilyName();
  212. gUserId = user.getUid();
  213.  
  214. }
  215.  
  216. if (!task.isSuccessful()) {
  217. Log.w(TAG, "signInWithCredential", task.getException());
  218. Toast.makeText(LoginActivity.this, "Authentication failed.",
  219. Toast.LENGTH_SHORT).show();
  220. } else {
  221.  
  222. checkUserExists();
  223.  
  224. mDialog.dismiss();
  225.  
  226. }
  227.  
  228. }
  229. });
  230. }
  231.  
  232.  
  233. private void checkLogin() {
  234. email = mEmailText.getText().toString().trim();
  235. password = mPasswordText.getText().toString().trim();
  236.  
  237. if (!TextUtils.isEmpty(email) && !TextUtils.isEmpty(password)) {
  238.  
  239. mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(LoginActivity.this, new OnCompleteListener<AuthResult>() {
  240. @Override
  241. public void onComplete(@NonNull Task<AuthResult> task) {
  242. if (task.isSuccessful()) {
  243.  
  244. FirebaseUser user = mAuth.getCurrentUser();
  245. if (user != null)
  246. userIdLogin = user.getUid();
  247.  
  248.  
  249. checkUserExists();
  250.  
  251. } else {
  252. mDialog.dismiss();
  253. Toast.makeText(LoginActivity.this, "Login failed", Toast.LENGTH_LONG).show();
  254. }
  255. }
  256. }).addOnFailureListener(new OnFailureListener() {
  257. @Override
  258. public void onFailure(@NonNull Exception e) {
  259. if (e.getMessage().equals(getString(R.string.error_email))) {
  260. emailError.setText("Bad formatted email");
  261. emailError.setVisibility(View.VISIBLE);
  262. } else {
  263. emailError.setText("");
  264. emailError.setVisibility(View.INVISIBLE);
  265. }
  266.  
  267. if (e.getMessage().equals(getString(R.string.error_password))) {
  268. passwordError.setText("The password is invalid");
  269. passwordError.setVisibility(View.VISIBLE);
  270. } else {
  271. passwordError.setText("");
  272. passwordError.setVisibility(View.INVISIBLE);
  273. }
  274.  
  275. if (e.getMessage().equals(getString(R.string.error_emailandpass))) {
  276. Toast.makeText(LoginActivity.this, "User doesn't exists", Toast.LENGTH_LONG).show();
  277. }
  278. }
  279. });
  280. }
  281. }
  282.  
  283. private void checkUserExists() {
  284. mDialog.setMessage("Please wait...");
  285. mDialog.show();
  286. if (mAuth.getCurrentUser() != null) {
  287.  
  288. user_id = mAuth.getCurrentUser().getUid();
  289. DocumentReference usersRef = mReferenceUsers.collection("Users").document(user_id);
  290. usersRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
  291. @Override
  292. public void onComplete(@NonNull Task<DocumentSnapshot> task) {
  293. if (task.isSuccessful()) {
  294.  
  295. DocumentSnapshot document = task.getResult();
  296. if (document.exists()) {
  297. FirebaseUser user = mAuth.getCurrentUser();
  298.  
  299. if (user.isEmailVerified() && document.contains("username")) {
  300. String current_userID = mAuth.getCurrentUser().getUid();
  301. String device_id = FirebaseInstanceId.getInstance().getToken();
  302.  
  303. Map<String, Object> user2 = new HashMap<>();
  304. user2.put("device_id", device_id);
  305.  
  306. mReferenceUsers.collection("Users").document(current_userID)
  307. .update(user2)
  308. .addOnSuccessListener(new OnSuccessListener<Void>() {
  309. @Override
  310. public void onSuccess(Void aVoid) {
  311.  
  312. }
  313. }).addOnFailureListener(new OnFailureListener() {
  314. @Override
  315. public void onFailure(@NonNull Exception e) {
  316. Log.e("error update", e.getLocalizedMessage());
  317. }
  318. });
  319. Intent setupIntent = new Intent(LoginActivity.this, MainPage.class);
  320. startActivity(setupIntent);
  321. mDialog.dismiss();
  322. finish();
  323. } else if (user.isEmailVerified() && !document.contains("username")) {
  324. Intent intent = new Intent(LoginActivity.this, EnterUsernameForApp.class);
  325. startActivity(intent);
  326. mDialog.dismiss();
  327. finish();
  328.  
  329. } else if (!user.isEmailVerified()) {
  330. mDialog.dismiss();
  331. Toast.makeText(LoginActivity.this, "Please verify your email", Toast.LENGTH_LONG).show();
  332. } else {
  333.  
  334. }
  335. } else {
  336. Intent goToSetUp = new Intent(LoginActivity.this, EnterUsernameForApp.class);
  337. goToSetUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  338. startActivity(goToSetUp);
  339. finish();
  340.  
  341.  
  342. }
  343. }
  344. }
  345. });
  346.  
  347. //nesto
  348.  
  349.  
  350. /* mReferenceUsers.addValueEventListener(new ValueEventListener() {
  351. @Override
  352. public void onDataChange(DataSnapshot dataSnapshot) {
  353. if (dataSnapshot.hasChild(user_id)) {
  354.  
  355. FirebaseUser user = mAuth.getCurrentUser();
  356.  
  357. if (user.isEmailVerified() && dataSnapshot.child(user_id).hasChild("username")) {
  358. String current_userID = mAuth.getCurrentUser().getUid();
  359. String device_id = FirebaseInstanceId.getInstance().getToken();
  360.  
  361. mReferenceUsers.child(current_userID).child("device_id").setValue(device_id);
  362. Intent setupIntent = new Intent(LoginActivity.this, MainPage.class);
  363. startActivity(setupIntent);
  364. mDialog.dismiss();
  365. finish();
  366. } else if (user.isEmailVerified() && !dataSnapshot.child(user_id).hasChild("username")) {
  367. Intent intent = new Intent(LoginActivity.this, EnterUsernameForApp.class);
  368. startActivity(intent);
  369. mDialog.dismiss();
  370. finish();
  371.  
  372. } else if (!user.isEmailVerified()){
  373. mDialog.dismiss();
  374. Toast.makeText(LoginActivity.this, "Please verify your email", Toast.LENGTH_LONG).show();
  375. }
  376. } else {
  377. Intent goToSetUp = new Intent(LoginActivity.this, EnterUsernameForApp.class);
  378. goToSetUp.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  379. startActivity(goToSetUp);
  380. finish();
  381.  
  382.  
  383. }
  384.  
  385. }
  386.  
  387. @Override
  388. public void onCancelled(DatabaseError databaseError) {
  389.  
  390. }
  391. }); */
  392. }
  393. }
  394.  
  395. private void autoLogin() {
  396.  
  397. if (mAuth.getCurrentUser() != null) {
  398. user_id = mAuth.getCurrentUser().getUid();
  399. DocumentReference usersRef = mReferenceUsers.collection("Users").document(user_id);
  400. usersRef.get().addOnCompleteListener(new OnCompleteListener<DocumentSnapshot>() {
  401. @Override
  402. public void onComplete(@NonNull Task<DocumentSnapshot> task) {
  403. if (task.isSuccessful()) {
  404. DocumentSnapshot snapshot = task.getResult();
  405. if (snapshot.exists()) {
  406. if (task.getResult().getString("username") != null) {
  407. FirebaseUser user = mAuth.getCurrentUser();
  408.  
  409. if (user.isEmailVerified() && snapshot.contains("username")) {
  410. final String current_userID = mAuth.getCurrentUser().getUid();
  411. final String device_id = FirebaseInstanceId.getInstance().getToken();
  412.  
  413.  
  414. CountDownTimer timer = new CountDownTimer(3000, 1000) {
  415. @Override
  416. public void onTick(long l) {
  417.  
  418. }
  419.  
  420. @Override
  421. public void onFinish() {
  422. Intent setupIntent = new Intent(LoginActivity.this, MainPage.class);
  423. startActivity(setupIntent);
  424. mDialog.dismiss();
  425.  
  426. Map<String, Object> updateDevideId = new HashMap<>();
  427. updateDevideId.put("device_id", device_id);
  428. finish();
  429. mReferenceUsers.collection("Users").document(current_userID)
  430. .update(updateDevideId)
  431. .addOnSuccessListener(new OnSuccessListener<Void>() {
  432. @Override
  433. public void onSuccess(Void aVoid) {
  434.  
  435. }
  436. }).addOnFailureListener(new OnFailureListener() {
  437. @Override
  438. public void onFailure(@NonNull Exception e) {
  439. Log.e("error update auto login", e.getLocalizedMessage());
  440. }
  441. });
  442. }
  443. }.start();
  444.  
  445. } else {
  446.  
  447. mDialog.dismiss();
  448.  
  449. }
  450. }
  451. } else {
  452. Log.e("error auto login", String.valueOf(task.getException()));
  453. }
  454. }
  455. }
  456. });
  457. }
  458.  
  459. /* if (mAuth.getCurrentUser() != null) {
  460. user_id = mAuth.getCurrentUser().getUid();
  461. mReferenceUsers = mDatabase.getReference("Users");
  462.  
  463.  
  464. mReferenceUsers.addValueEventListener(new ValueEventListener() {
  465. @Override
  466. public void onDataChange(DataSnapshot dataSnapshot) {
  467. if (dataSnapshot.hasChild(user_id)) {
  468.  
  469. FirebaseUser user = mAuth.getCurrentUser();
  470.  
  471. if (user.isEmailVerified() && dataSnapshot.child(user_id).hasChild("username")) {
  472. final String current_userID = mAuth.getCurrentUser().getUid();
  473. final String device_id = FirebaseInstanceId.getInstance().getToken();
  474.  
  475.  
  476. CountDownTimer timer = new CountDownTimer(3000, 1000) {
  477. @Override
  478. public void onTick(long l) {
  479.  
  480. }
  481.  
  482. @Override
  483. public void onFinish() {
  484. Intent setupIntent = new Intent(LoginActivity.this, MainPage.class);
  485. startActivity(setupIntent);
  486. mDialog.dismiss();
  487.  
  488. finish();
  489. mReferenceUsers.child(current_userID).child("device_id").setValue(device_id);
  490. }
  491. }.start();
  492.  
  493. } else {
  494.  
  495. mDialog.dismiss();
  496.  
  497. }
  498. }
  499.  
  500. }
  501.  
  502. @Override
  503. public void onCancelled(DatabaseError databaseError) {
  504.  
  505. }
  506. }); */
  507.  
  508. }
  509.  
  510.  
  511. @Override
  512. public void onClick(View v) {
  513. if (v.getId() == R.id.btn_login) {
  514. checkGoogleSignIn = false;
  515. RegisterActivity.registerPressed = true;
  516. checkLogin();
  517. } else if (v.getId() == R.id.link_signup) {
  518. Intent goToReg = new Intent(LoginActivity.this, RegisterActivity.class);
  519. goToReg.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
  520. startActivity(goToReg);
  521. } else if (v.getId() == R.id.forgot_password) {
  522. Intent openForgotPassActivity = new Intent(LoginActivity.this, ResetPasswordActivity.class);
  523. startActivity(openForgotPassActivity);
  524. } else if (v.getId() == R.id.google_login) {
  525.  
  526. LoginManager.getInstance().logOut();
  527. checkGoogleSignIn = true;
  528. RegisterActivity.registerPressed = false;
  529.  
  530. signIn();
  531.  
  532. } else if (v.getId() == R.id.facebbok_login){
  533. mCallbackManager = CallbackManager.Factory.create();
  534.  
  535. LoginManager loginButton = LoginManager.getInstance();
  536. loginButton.logInWithReadPermissions(LoginActivity.this, Arrays.asList("email", "public_profile"));
  537. loginButton.registerCallback(mCallbackManager, new FacebookCallback<LoginResult>() {
  538. @Override
  539. public void onSuccess(LoginResult loginResult) {
  540. Log.d(TAG, "facebook:onSuccess:" + loginResult);
  541. //handleFacebookAccessToken(loginResult.getAccessToken());
  542. }
  543.  
  544. @Override
  545. public void onCancel() {
  546. Log.d(TAG, "facebook:onCancel");
  547. // ...
  548. }
  549.  
  550. @Override
  551. public void onError(FacebookException error) {
  552. Log.d(TAG, "facebook:onError", error);
  553. // ...
  554. }
  555. });
  556. }
  557.  
  558. }
  559.  
  560.  
  561. @Override
  562. public void onStart() {
  563. super.onStart();
  564. mAuth.addAuthStateListener(mAuthStateListener);
  565. }
  566.  
  567. @Override
  568. public void onStop() {
  569. super.onStop();
  570. if (mAuthStateListener != null) {
  571. mAuth.removeAuthStateListener(mAuthStateListener);
  572. }
  573. }
  574. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement