Java tutorial
package ablgroup.daily2.authentification; import android.content.Context; import android.support.v4.app.Fragment; import android.app.ProgressDialog; import android.content.Intent; import android.content.SharedPreferences; import android.os.Build; import android.os.Bundle; import android.support.annotation.NonNull; import android.support.annotation.Nullable; import android.support.v4.app.FragmentActivity; import android.text.TextUtils; import android.util.AttributeSet; import android.util.Log; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.Button; import android.widget.EditText; import android.widget.RelativeLayout; import android.widget.TextView; import android.widget.Toast; import com.google.android.gms.auth.api.Auth; import com.google.android.gms.auth.api.signin.GoogleSignInAccount; import com.google.android.gms.auth.api.signin.GoogleSignInOptions; import com.google.android.gms.auth.api.signin.GoogleSignInResult; import com.google.android.gms.common.ConnectionResult; import com.google.android.gms.common.api.GoogleApiClient; import com.google.android.gms.common.api.ResultCallback; import com.google.android.gms.common.api.Status; import com.google.android.gms.tasks.OnCompleteListener; import com.google.android.gms.tasks.Task; import com.google.firebase.auth.AuthCredential; import com.google.firebase.auth.AuthResult; import com.google.firebase.auth.FirebaseAuth; import com.google.firebase.auth.FirebaseUser; import com.google.firebase.auth.GoogleAuthProvider; import ablgroup.daily2.MainActivity; import ablgroup.daily2.R; /** * Copyright 2016 Google Inc. All Rights Reserved. * <p> * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * <p> * http://www.apache.org/licenses/LICENSE-2.0 * <p> * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ public class AuthentificationFragment extends FragmentActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener { private static final String TAG = "EmailPassword"; private TextView mStatusTextView; private TextView mDetailTextView; private EditText mEmailField; private EditText mPasswordField; private SharedPreferences sharedPref; private SharedPreferences.Editor editor; private GoogleApiClient mGoogleApiClient; ProgressDialog pd; private static final int RC_SIGN_IN = 9001; private FirebaseAuth mAuth; private FirebaseAuth.AuthStateListener mAuthListener; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // Configure sign-in to request the user's ID, email address, and basic // profile. ID and basic profile are included in DEFAULT_SIGN_IN. // Build a GoogleApiClient with access to the Google Sign-In API and the // options specified by gso. mAuth = FirebaseAuth.getInstance(); mAuthListener = new FirebaseAuth.AuthStateListener() { @Override public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) { FirebaseUser user = firebaseAuth.getCurrentUser(); if (user != null) { // User is signed in launchMainActivity(); updateUI(user, user.getEmail()); } else { // User is signed out updateUI(user, null); } } }; } @Override public View onCreateView(String name, Context context, AttributeSet attrs) { GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken("902650961975-1d9jf67v0ri0mtkhi8lbjqes6m186ghd.apps.googleusercontent.com") .requestEmail().build(); mGoogleApiClient = new GoogleApiClient.Builder(context) .enableAutoManage(this, this /* OnConnectionFailedListener */).addApi(Auth.GOOGLE_SIGN_IN_API, gso) .build(); setContentView(R.layout.activity_login); pd = new ProgressDialog(AuthentificationFragment.this); pd.setMessage("loading"); // Views mStatusTextView = (TextView) findViewById(R.id.status); mDetailTextView = (TextView) findViewById(R.id.detail); mEmailField = (EditText) findViewById(R.id.email); mPasswordField = (EditText) findViewById(R.id.password); // Buttons findViewById(R.id.sign_in).setOnClickListener(this); findViewById(R.id.sign_up).setOnClickListener(this); findViewById(R.id.log_out).setOnClickListener(this); findViewById(R.id.sign_in_button_google).setOnClickListener(this); findViewById(R.id.login_email_btn).setOnClickListener(this); findViewById(R.id.login_retrieve_btn).setOnClickListener(this); findViewById(R.id.login_comeback_btn).setOnClickListener(this); findViewById(R.id.login_retrieve_comeback_btn).setOnClickListener(this); findViewById(R.id.login_retrieve_view).setOnClickListener(this); return super.onCreateView(name, context, attrs); } // [START on_start_add_listener] @Override public void onStart() { super.onStart(); mAuth.addAuthStateListener(mAuthListener); if (mAuth.getCurrentUser() != null) launchMainActivity(); } // [END on_start_add_listener] // [START on_stop_remove_listener] @Override public void onStop() { super.onStop(); if (mAuthListener != null) mAuth.removeAuthStateListener(mAuthListener); } // [END on_stop_remove_listener] private void createAccount(String email, String password) { Log.d(TAG, "createAccount:" + email); if (!validateForm()) { return; } final ProgressDialog pd = new ProgressDialog(AuthentificationFragment.this); pd.setMessage("loading"); pd.show(); // [START create_user_with_email] mAuth.createUserWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "createUserWithEmail:onComplete:" + task.isSuccessful()); if (!task.isSuccessful()) { Toast.makeText(AuthentificationFragment.this, R.string.auth_failed, Toast.LENGTH_SHORT) .show(); } pd.hide(); } }); // [END create_user_with_email] } private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } private void signIn(String email, String password) { Log.d(TAG, "signIn:" + email); if (!validateForm()) { return; } final ProgressDialog pd = new ProgressDialog(AuthentificationFragment.this); pd.setMessage("loading"); pd.show(); // [START sign_in_with_email] mAuth.signInWithEmailAndPassword(email, password).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "signInWithEmail:onComplete:" + task.isSuccessful()); if (!task.isSuccessful()) { Log.w(TAG, "signInWithEmail:failed", task.getException()); Toast.makeText(AuthentificationFragment.this, R.string.auth_failed, Toast.LENGTH_SHORT) .show(); } // [START_EXCLUDE] if (!task.isSuccessful()) { mStatusTextView.setText(R.string.auth_failed); } pd.hide(); // [END_EXCLUDE] } }); // [END sign_in_with_email] } private void signOut() { mAuth.signOut(); // Google sign out Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() { @Override public void onResult(@NonNull Status status) { updateUI(null, null); } }); } private boolean validateForm() { boolean valid = true; String email = mEmailField.getText().toString(); if (TextUtils.isEmpty(email)) { mEmailField.setError("Required."); valid = false; } else { mEmailField.setError(null); } String password = mPasswordField.getText().toString(); if (TextUtils.isEmpty(password)) { mPasswordField.setError("Required."); valid = false; } else { mPasswordField.setError(null); } return valid; } private void updateUI(FirebaseUser user, String email) { pd.hide(); if (user != null || email != null) launchMainActivity(); } public void launchMainActivity() { Intent intent = new Intent(AuthentificationFragment.this, MainActivity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_SINGLE_TOP); startActivity(intent); } @Override public void onClick(View v) { RelativeLayout r = (RelativeLayout) findViewById(R.id.login_first); RelativeLayout r2 = (RelativeLayout) findViewById(R.id.email_password_fields); RelativeLayout r3 = (RelativeLayout) findViewById(R.id.login_retrieve); switch (v.getId()) { case R.id.sign_up: createAccount(mEmailField.getText().toString(), mPasswordField.getText().toString()); break; case R.id.sign_in: signIn(mEmailField.getText().toString(), mPasswordField.getText().toString()); break; case R.id.log_out: signOut(); case R.id.sign_in_button_google: signIn(); break; case R.id.login_email_btn: r.setVisibility(View.INVISIBLE); r2.setVisibility(View.VISIBLE); r3.setVisibility(View.INVISIBLE); break; case R.id.login_comeback_btn: r.setVisibility(View.VISIBLE); r2.setVisibility(View.INVISIBLE); r3.setVisibility(View.INVISIBLE); break; case R.id.login_retrieve_comeback_btn: r.setVisibility(View.VISIBLE); r2.setVisibility(View.INVISIBLE); r3.setVisibility(View.INVISIBLE); break; case R.id.login_retrieve_btn: final TextView t = (TextView) findViewById(R.id.login_retrieve_email); final TextView t2 = (TextView) findViewById(R.id.login_retrieve_confirmation); final TextView btn = (Button) findViewById(R.id.login_retrieve_btn); String emailAddress = t.getText().toString(); mAuth.sendPasswordResetEmail(emailAddress).addOnCompleteListener(new OnCompleteListener<Void>() { @Override public void onComplete(@NonNull Task<Void> task) { if (task.isSuccessful()) { Log.d(TAG, "Email sent."); t.setVisibility(View.INVISIBLE); t2.setVisibility(View.VISIBLE); btn.setVisibility(View.INVISIBLE); } } }); break; case R.id.login_retrieve_view: r.setVisibility(View.INVISIBLE); r2.setVisibility(View.INVISIBLE); r3.setVisibility(View.VISIBLE); break; } } @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...); if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { // Google Sign In was successful, authenticate with Firebase GoogleSignInAccount account = result.getSignInAccount(); firebaseAuthWithGoogle(account); } else { // Google Sign In failed, update UI appropriately // [START_EXCLUDE] updateUI(null, null); // [END_EXCLUDE] } } } private void handleSignInResult(GoogleSignInResult result) { Log.d(TAG, "handleSignInResult:" + result.isSuccess()); if (result.isSuccess()) { // Signed in successfully, show authenticated UI. GoogleSignInAccount acct = result.getSignInAccount(); //firebaseAuthWithGoogle(acct); //mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName())); updateUI(null, acct.getEmail()); } else { // Signed out, show unauthenticated UI. updateUI(null, null); } } private void firebaseAuthWithGoogle(GoogleSignInAccount acct) { Log.d(TAG, "firebaseAuthWithGoogle:" + acct.getId()); AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null); mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { Log.d(TAG, "signInWithCredential:onComplete:" + task.isSuccessful()); // If sign in fails, display a message to the user. If sign in succeeds // the auth state listener will be notified and logic to handle the // signed in user can be handled in the listener. if (!task.isSuccessful()) { Log.w(TAG, "signInWithCredential", task.getException()); Toast.makeText(getBaseContext(), "Authentication failed.", Toast.LENGTH_SHORT).show(); } // ... } }); } @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { } }