Java tutorial
package com.hackeruproj.android.havatzfit.log_in_activity; import android.app.AlertDialog; import android.app.ProgressDialog; import android.content.DialogInterface; import android.content.Intent; import android.support.annotation.NonNull; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.CheckBox; 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.SignInButton; import com.google.android.gms.common.api.GoogleApiClient; 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 com.hackeruproj.android.havatzfit.firebase_utilities.Users; import com.hackeruproj.android.havatzfit.general_utilities.GenUtils; import com.hackeruproj.android.havatzfit.lobby_activity.LobbyActivity; import com.hackeruproj.android.havatzfit.R; import com.hackeruproj.android.havatzfit.custom_toolbar.UserToolbar; /** * Created by Igor on 20-Jul-16. */ public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener { //start TAG and RC setting private static final String TAG = "Google login"; private static final int RC_SIGN_IN = 9001; //finish TAG and RC setting //start setting checkbox CheckBox stayOn; //end setting checkbox // start declare auth private FirebaseAuth mAuth; // finish declare auth //start declare SignIn Btn SignInButton nSignInBtn; //finish declare SignIn Btn //start delcare auth listener and GoogleAPIClient private FirebaseAuth.AuthStateListener mAuthListener; private GoogleApiClient mGoogleApiClient; //finish delcare auth listenerand and GoogleAPIClient //start ProgressDialog private ProgressDialog mProgressDialog; //finish //start initiate object FireBaseUtils GenUtils utils = new GenUtils(MainActivity.this); //finish initiate object FireBaseUtils @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //start asking user for license agreement showDisclaimer(); //finish asking user for license agreement //start initiate progrss dialog mProgressDialog = new ProgressDialog(this); mProgressDialog.setMessage("Loading..."); mProgressDialog.setIndeterminate(true); mProgressDialog.setCancelable(false); //start button listener //start connect SignIn btn ref to xml id tag nSignInBtn = (SignInButton) findViewById(R.id.googleLoginBtn); //finish connect SignIn btn ref to xml id tag //start connect stayOn with XML id stayOn = (CheckBox) findViewById(R.id.checkBoxID); //end connect stayOn with XML id //start config signin GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN) .requestIdToken(getString(R.string.default_web_client_id)).requestEmail().requestProfile().build(); //end config signin mGoogleApiClient = new GoogleApiClient.Builder(this) .enableAutoManage(this/*activity*/, this/*OnConnectionFailedListener */) .addApi(Auth.GOOGLE_SIGN_IN_API, gso).build(); //start initialize Auth mAuth = FirebaseAuth.getInstance(); //end initialize Auth //start intitialize SignIn btn onclick listener nSignInBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { //check if internet connection is availbled if not pop a message and return from listener if (!GenUtils.isNetworkEnabled(MainActivity.this)) { Toast.makeText(MainActivity.this, R.string.msgConnectivity, Toast.LENGTH_SHORT).show(); return; } //if internet connection is not null proceed to signIn signIn(); } }); //finish intitialize SignIn btn onclick listener //start if user marked stay online and connected to the web go straight to lobby if (utils.isChecked(GenUtils.IS_CHECKED) && GenUtils.isNetworkEnabled(MainActivity.this)) { FirebaseUser user = mAuth.getCurrentUser(); getUserData(user); toLobby(); } else if (!GenUtils.isNetworkEnabled(MainActivity.this)) { Toast.makeText(MainActivity.this, R.string.msgConnectivity, Toast.LENGTH_SHORT).show(); } //end if user marked stay online and connected to the web go straight to lobby } //start ask for runtime permissions private void askRunPermission() { if (!GenUtils.chkLocPerm(this)) { ActivityCompat.requestPermissions(this, new String[] { android.Manifest.permission.ACCESS_FINE_LOCATION }, 0); } } //finish ask for permissions in runtime //start check user agreement on terms and conditions private void showDisclaimer() { if (!utils.isChecked(GenUtils.HAS_AGREED)) { AlertDialog.Builder disclaimer = new AlertDialog.Builder(this); disclaimer.setTitle(R.string.disclaimerHead); disclaimer.setMessage(R.string.disclaimerTheme); //positive button, save to sp the value disclaimer.setPositiveButton(R.string.posetive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { utils.saveUser(GenUtils.HAS_AGREED); //start ask for runtime permissions askRunPermission(); //finish ask for runtime permissions } }); //on negetive click exit app disclaimer.setNegativeButton(R.string.negetive, new DialogInterface.OnClickListener() { @Override public void onClick(DialogInterface dialog, int which) { dialog.cancel(); finish(); } }); disclaimer.show(); } } //end check user agreement on terms and conditions //start onActivity result @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); // Result returned from launching the Intent and inputs all the UserData in the UserUtility Static class if (requestCode == RC_SIGN_IN) { GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data); if (result.isSuccess()) { GoogleSignInAccount account = result.getSignInAccount(); firebaseAuthWithGoogle(account);//<-- authenticates user in the server with his account } else { Toast.makeText(MainActivity.this, "Login failed", Toast.LENGTH_SHORT).show(); } } } //end onActivity result //start authWithGoogle private void firebaseAuthWithGoogle(final GoogleSignInAccount account) { Log.d(TAG, "firebaseAuthWithGoogle:" + account.getId()); //start client loading mProgressDialog.show(); //end client loading AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null); mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() { @Override public void onComplete(@NonNull Task<AuthResult> task) { String userUID = task.getResult().getUser().getUid(); String userName = task.getResult().getUser().getDisplayName(); String userMail = task.getResult().getUser().getEmail(); String agrdOnTerms = GenUtils.getCurrentDate(); //create user signature in the DB Users users = new Users(userUID, userName, userMail, agrdOnTerms); users.createUser(); getUserData(task.getResult().getUser());//get user data into the Tab //check if stayOn has been clicked if (stayOn.isChecked()) { utils.saveUser(GenUtils.IS_CHECKED); } toLobby(); /* startActivity(new Intent(MainActivity.this,LobbyActivity.class)); finish();*/ // 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(MainActivity.this, "Authentication failed.", Toast.LENGTH_SHORT).show(); } //start end progrewssBar mProgressDialog.dismiss(); //end end progrewssBar } }); } //end authWithGoogle private void signIn() { Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient); startActivityForResult(signInIntent, RC_SIGN_IN); } //start go to logged page method private void getUserData(FirebaseUser user) { //end loading progress bar if (user != null) { //if user logged in do succesfull user logged actions UserToolbar.setmStringID(user.getUid()); UserToolbar.setmStringName(user.getDisplayName()); UserToolbar.setmStringMail(user.getEmail()); UserToolbar.setmStringUri(String.valueOf(user.getPhotoUrl())); } } //end go to logged page method //start move to lobbyPage private void toLobby() { startActivity(new Intent(MainActivity.this, LobbyActivity.class)); finish(); } //end move to lobbyPage @Override public void onConnectionFailed(@NonNull ConnectionResult connectionResult) { Toast.makeText(MainActivity.this, R.string.cncFailMsg, Toast.LENGTH_SHORT).show(); } }