PageRenderTime 51ms CodeModel.GetById 26ms RepoModel.GetById 0ms app.codeStats 0ms

/app/src/main/java/com/j2ptechnologies/itwtravelgo/view/LoginActivity.java

https://bitbucket.org/itwgoandroid/itw-go-android
Java | 411 lines | 314 code | 70 blank | 27 comment | 25 complexity | 931272bc5a4fb0076042c3db4c38f54f MD5 | raw file
  1. package com.j2ptechnologies.itwtravelgo.view;
  2. import android.annotation.SuppressLint;
  3. import android.app.ActivityOptions;
  4. import android.content.Intent;
  5. import android.os.Build;
  6. import android.os.Bundle;
  7. import android.support.annotation.NonNull;
  8. import android.support.annotation.RequiresApi;
  9. import android.support.design.widget.FloatingActionButton;
  10. import android.support.design.widget.Snackbar;
  11. import android.util.Log;
  12. import android.view.Gravity;
  13. import android.view.View;
  14. import android.widget.Button;
  15. import android.widget.EditText;
  16. import android.widget.TextView;
  17. import android.widget.Toast;
  18. import com.android.volley.Request;
  19. import com.android.volley.Response;
  20. import com.android.volley.VolleyError;
  21. import com.google.android.gms.auth.api.Auth;
  22. import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
  23. import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
  24. import com.google.android.gms.auth.api.signin.GoogleSignInResult;
  25. import com.google.android.gms.common.ConnectionResult;
  26. import com.google.android.gms.common.SignInButton;
  27. import com.google.android.gms.common.api.GoogleApiClient;
  28. import com.google.android.gms.tasks.OnCompleteListener;
  29. import com.google.android.gms.tasks.Task;
  30. import com.google.firebase.auth.AuthCredential;
  31. import com.google.firebase.auth.AuthResult;
  32. import com.google.firebase.auth.FirebaseAuth;
  33. import com.google.firebase.auth.GoogleAuthProvider;
  34. import com.j2ptechnologies.itwtravelgo.Activity.Dashboard;
  35. import com.j2ptechnologies.itwtravelgo.Activity.RegisterActivity;
  36. import com.j2ptechnologies.itwtravelgo.Activity.ResetPassword;
  37. import com.j2ptechnologies.itwtravelgo.R;
  38. import com.j2ptechnologies.itwtravelgo.Utils.CatLoadingView;
  39. import com.j2ptechnologies.itwtravelgo.Utils.CommonMethods;
  40. import com.j2ptechnologies.itwtravelgo.Utils.CommonMethodsFragments;
  41. import com.j2ptechnologies.itwtravelgo.Utils.Constants;
  42. import com.j2ptechnologies.itwtravelgo.Utils.LovelyInfoDialog;
  43. import com.j2ptechnologies.itwtravelgo.Utils.StaticConfig;
  44. import com.j2ptechnologies.itwtravelgo.api.GetApi;
  45. import com.j2ptechnologies.itwtravelgo.api.PostApi;
  46. import com.j2ptechnologies.itwtravelgo.app.App;
  47. import com.j2ptechnologies.itwtravelgo.db.DatabaseHandler;
  48. import com.j2ptechnologies.itwtravelgo.model.EventBusModel;
  49. import com.j2ptechnologies.itwtravelgo.util.Util;
  50. import org.json.JSONException;
  51. import org.json.JSONObject;
  52. import java.util.regex.Matcher;
  53. import java.util.regex.Pattern;
  54. import de.greenrobot.event.EventBus;
  55. import static com.j2ptechnologies.itwtravelgo.Utils.CommonMethodsFragments.getDetails;
  56. import static com.j2ptechnologies.itwtravelgo.util.Util.displayName;
  57. public class LoginActivity extends CommonMethods implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {
  58. //Constants
  59. private static final String TAG = LoginActivity.class.getSimpleName();
  60. private static final int RC_SIGN_IN = 9001;
  61. private boolean firstTimeAccess;
  62. CatLoadingView mView;
  63. private SignInButton mSignInButton;
  64. //Firebase and GoogleApiClient
  65. private GoogleApiClient mGoogleApiClient;
  66. private FirebaseAuth mFirebaseAuth;
  67. FloatingActionButton fab;
  68. private final Pattern VALID_EMAIL_ADDRESS_REGEX =
  69. Pattern.compile("^[A-Z0-9._%+-]+@[A-Z0-9.-]+\\.[A-Z]{2,6}$", Pattern.CASE_INSENSITIVE);
  70. private EditText editTextUsername, editTextPassword;
  71. TextView resetPassword;
  72. @Override
  73. protected void onCreate(Bundle savedInstanceState) {
  74. super.onCreate(savedInstanceState);
  75. setContentView(R.layout.activity_login);
  76. mView = new CatLoadingView();
  77. /* if (!Util.verificaConexao(this)){
  78. Util.initToast(this,"Você não tem conexão com internet");
  79. finish();
  80. }*/
  81. DatabaseHandler db = new DatabaseHandler(getBaseContext());
  82. if (CommonMethodsFragments.getDetails("isRegistered", db).equals("true")) {
  83. Intent i = new Intent(getBaseContext(), Dashboard.class);
  84. i.putExtra("from", "login");
  85. startActivity(i);
  86. finish();
  87. }
  88. mSignInButton = (SignInButton) findViewById(R.id.sign_in_button);
  89. resetPassword = (TextView) findViewById(R.id.resetPassword);
  90. mSignInButton.setOnClickListener(this);
  91. resetPassword.setOnClickListener(this);
  92. GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  93. .requestIdToken(getString(R.string.default_web_client_id))
  94. .requestEmail()
  95. .build();
  96. mGoogleApiClient = new GoogleApiClient.Builder(this)
  97. .enableAutoManage(this, this)
  98. .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
  99. .build();
  100. // Initialize FirebaseAuth
  101. mFirebaseAuth = FirebaseAuth.getInstance();
  102. getSupportActionBar().hide();
  103. fab = (FloatingActionButton) findViewById(R.id.fab);
  104. editTextUsername = (EditText) findViewById(R.id.et_username);
  105. editTextPassword = (EditText) findViewById(R.id.et_password);
  106. Button bt_go = (Button) findViewById(R.id.bt_go);
  107. bt_go.setOnClickListener(new View.OnClickListener() {
  108. @Override
  109. public void onClick(View view) {
  110. if (!validateEmail(editTextUsername.getText().toString().trim())) {
  111. editTextUsername.setError("Invalid Email");
  112. return;
  113. } else if (editTextPassword.getText().toString() != null && editTextPassword.getText().toString().trim().length() < 6) {
  114. editTextPassword.setError("Password length must be min 6");
  115. return;
  116. } else {
  117. JSONObject json = new JSONObject();
  118. try {
  119. json.put("email", editTextUsername.getText().toString().trim());
  120. json.put("password", editTextPassword.getText().toString().trim());
  121. } catch (JSONException e) {
  122. e.printStackTrace();
  123. }
  124. login(json, editTextUsername.getText().toString().trim(), editTextPassword.getText().toString().trim());
  125. }
  126. /*Intent i=new Intent(getBaseContext(),Dashboard.class);
  127. startActivity(i);*/
  128. }
  129. });
  130. firstTimeAccess = true;
  131. }
  132. @Override
  133. public void onActivityResult(int requestCode, int resultCode, Intent data) {
  134. super.onActivityResult(requestCode, resultCode, data);
  135. if (requestCode == RC_SIGN_IN) {
  136. GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
  137. if (result.isSuccess()) {
  138. GoogleSignInAccount account = result.getSignInAccount();
  139. firebaseAuthWithGoogle(account);
  140. } else {
  141. Log.e(TAG, "Google Sign In failed.");
  142. }
  143. }
  144. }
  145. @Override
  146. public void onClick(View v) {
  147. switch (v.getId()) {
  148. case R.id.sign_in_button:
  149. signIn();
  150. break;
  151. case R.id.resetPassword:
  152. if (!validateEmail(editTextUsername.getText().toString().trim())) {
  153. editTextUsername.setError("Invalid Email");
  154. return;
  155. }
  156. resetMyPassword(editTextUsername.getText().toString().trim());
  157. break;
  158. default:
  159. return;
  160. }
  161. }
  162. @Override
  163. public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
  164. Log.d(TAG, "onConnectionFailed:" + connectionResult);
  165. Util.initToast(this, "Google Play Services error.");
  166. }
  167. private void signIn() {
  168. Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
  169. startActivityForResult(signInIntent, RC_SIGN_IN);
  170. }
  171. private void firebaseAuthWithGoogle(final GoogleSignInAccount acct) {
  172. Log.d(TAG, "firebaseAuthWithGooogle:" + acct.getId());
  173. AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
  174. mFirebaseAuth.signInWithCredential(credential)
  175. .addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
  176. @Override
  177. public void onComplete(@NonNull Task<AuthResult> task) {
  178. Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful());
  179. if (!task.isSuccessful()) {
  180. Log.w(TAG, "signInWithCredential", task.getException());
  181. Util.initToast(LoginActivity.this, "Authentication failed");
  182. } else {
  183. displayName = acct.getDisplayName();
  184. Util.email = acct.getEmail();
  185. //storetoFirebase(acct.getDisplayName(), acct.getEmail());
  186. }
  187. }
  188. });
  189. }
  190. @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
  191. @SuppressLint("RestrictedApi")
  192. public void clickRegisterLayout(View view) {
  193. getWindow().setExitTransition(null);
  194. getWindow().setEnterTransition(null);
  195. if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
  196. ActivityOptions options =
  197. ActivityOptions.makeSceneTransitionAnimation(this, fab, fab.getTransitionName());
  198. startActivityForResult(new Intent(this, RegisterActivity.class), StaticConfig.REQUEST_CODE_REGISTER, options.toBundle());
  199. } else {
  200. startActivityForResult(new Intent(this, RegisterActivity.class), StaticConfig.REQUEST_CODE_REGISTER);
  201. }
  202. }
  203. public void clickLogin(View view) {
  204. String username = editTextUsername.getText().toString();
  205. String password = editTextPassword.getText().toString();
  206. //Intent i=new Intent(getBaseContext(),Dashboard.class);
  207. // startActivity(i);
  208. /*if (validate(username, password)) {
  209. } else {
  210. Toast.makeText(this, "Invalid email or empty password", Toast.LENGTH_SHORT).show();
  211. }*/
  212. }
  213. @Override
  214. public void onBackPressed() {
  215. super.onBackPressed();
  216. setResult(RESULT_CANCELED, null);
  217. finish();
  218. }
  219. private boolean validate(String emailStr, String password) {
  220. Matcher matcher = VALID_EMAIL_ADDRESS_REGEX.matcher(emailStr);
  221. return (password.length() > 0 || password.equals(";")) && matcher.find();
  222. }
  223. public void clickResetPassword(View view) {
  224. String username = editTextUsername.getText().toString();
  225. if (validate(username, ";")) {
  226. } else {
  227. Toast.makeText(this, "Invalid email", Toast.LENGTH_SHORT).show();
  228. }
  229. }
  230. /**
  231. * Dinh nghia cac ham tien ich cho quas trinhf dang nhap, dang ky,...
  232. */
  233. class AuthUtils {
  234. /**
  235. * Action register
  236. *
  237. * @param email
  238. * @param password
  239. */
  240. }
  241. public void showDialog() {
  242. mView.setClickCancelAble(false);
  243. mView.show(getSupportFragmentManager(), "");
  244. }
  245. public void dismissDialog() {
  246. mView.dismiss();
  247. }
  248. public void login(JSONObject json, final String email, final String password) {
  249. String URL = Constants.loginUrl;
  250. showDialog();
  251. PostApi api = new PostApi(Request.Method.POST, URL, json, new Response.Listener<JSONObject>() {
  252. @Override
  253. public void onResponse(JSONObject jsonObject) {
  254. dismissDialog();
  255. try {
  256. int code = jsonObject.getInt("code");
  257. if (code == 200) {
  258. DatabaseHandler db = new DatabaseHandler(getBaseContext());
  259. CommonMethodsFragments.addDetails("currentEmail", email, db);
  260. CommonMethodsFragments.addDetails("myCurrentPassword", password, db);
  261. CommonMethodsFragments.addDetails("isRegistered", "true", db);
  262. Intent i = new Intent(getBaseContext(), Dashboard.class);
  263. i.putExtra("from", "login");
  264. startActivity(i);
  265. finish();
  266. } else {
  267. Snackbar snackbar = null;
  268. dismissDialog();
  269. final Snackbar finalSnackbar = snackbar;
  270. snackbar = Snackbar
  271. .make(getWindow().getDecorView(), "Invalid Username or Password", Snackbar.LENGTH_LONG)
  272. .setAction(" ", new View.OnClickListener() {
  273. @Override
  274. public void onClick(View view) {
  275. }
  276. });
  277. snackbar.show();
  278. }
  279. } catch (JSONException e) {
  280. e.printStackTrace();
  281. }
  282. }
  283. }, new Response.ErrorListener() {
  284. @Override
  285. public void onErrorResponse(VolleyError volleyError) {
  286. Snackbar snackbar = null;
  287. dismissDialog();
  288. final Snackbar finalSnackbar = snackbar;
  289. snackbar = Snackbar
  290. .make(getWindow().getDecorView(), "Something went wrong", Snackbar.LENGTH_LONG)
  291. .setAction("", new View.OnClickListener() {
  292. @Override
  293. public void onClick(View view) {
  294. }
  295. });
  296. snackbar.show();
  297. }
  298. });
  299. App.getVolleyQueue().add(api);
  300. }
  301. public void resetMyPassword(final String email) {
  302. String URL = Constants.resetPassword+email;
  303. showDialog();
  304. GetApi updateProfileApi = new GetApi(
  305. new Response.Listener<JSONObject>() {
  306. @Override
  307. public void onResponse(JSONObject jsonObject) {
  308. dismissDialog();
  309. try {
  310. int code=jsonObject.getInt("code");
  311. if(code==200)
  312. {
  313. Intent i=new Intent(getBaseContext(), ResetPassword.class);
  314. i.putExtra("currentEmail",email);
  315. startActivity(i);
  316. }else
  317. {
  318. new LovelyInfoDialog(getBaseContext())
  319. .setTopColorRes(R.color.colorAccent)
  320. .setIcon(R.drawable.ic_tab_infor)
  321. //This will add Don't show again checkbox to the dialog. You can pass any ID as argument
  322. .setTitleGravity(Gravity.CENTER)
  323. .setNotShowAgainOptionChecked(false)
  324. .setTitle("Error")
  325. .setMessage("Invalid Email. Please check your email")
  326. .show();
  327. }
  328. } catch (JSONException e) {
  329. e.printStackTrace();
  330. }
  331. }
  332. }, new Response.ErrorListener() {
  333. @Override
  334. public void onErrorResponse(VolleyError volleyError) {
  335. dismissDialog();
  336. }
  337. }, URL);
  338. App.getVolleyQueue().add(updateProfileApi);
  339. }
  340. }