From 7b56c01297d81dffb7e60ee13a5113ed67763097 Mon Sep 17 00:00:00 2001
From: darshanxyz <darshanxyz@gmail.com>
Date: Sat, 15 Apr 2017 17:03:22 +0530
Subject: [PATCH] Added Google Login Functionality

---
 app/build.gradle                              |   2 +
 app/src/main/AndroidManifest.xml              |   2 +-
 .../java/com/darshanbshah/odsystem/Login.java | 105 +++++++++++++++++-
 .../darshanbshah/odsystem/MainActivity.java   |  25 +++++
 .../darshanbshah/odsystem/Registration.java   |  13 ---
 app/src/main/res/layout/activity_login.xml    |  55 ++-------
 app/src/main/res/layout/activity_main.xml     |  18 +++
 .../main/res/layout/activity_registration.xml |  13 ---
 8 files changed, 158 insertions(+), 75 deletions(-)
 create mode 100644 app/src/main/java/com/darshanbshah/odsystem/MainActivity.java
 delete mode 100644 app/src/main/java/com/darshanbshah/odsystem/Registration.java
 create mode 100644 app/src/main/res/layout/activity_main.xml
 delete mode 100644 app/src/main/res/layout/activity_registration.xml

diff --git a/app/build.gradle b/app/build.gradle
index db17bcb..1f9f585 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -25,6 +25,8 @@ dependencies {
         exclude group: 'com.android.support', module: 'support-annotations'
     })
     compile 'com.android.support:appcompat-v7:25.3.1'
+    compile 'com.google.firebase:firebase-auth:10.2.1'
+    compile 'com.google.android.gms:play-services-auth:10.2.1'
     testCompile 'junit:junit:4.12'
 }
 
diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index e3ddc51..ebed06e 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -15,7 +15,7 @@
                 <category android:name="android.intent.category.LAUNCHER" />
             </intent-filter>
         </activity>
-        <activity android:name=".Registration"></activity>
+        <activity android:name=".MainActivity"></activity>
     </application>
 
 </manifest>
\ No newline at end of file
diff --git a/app/src/main/java/com/darshanbshah/odsystem/Login.java b/app/src/main/java/com/darshanbshah/odsystem/Login.java
index 98b14c9..d52c898 100644
--- a/app/src/main/java/com/darshanbshah/odsystem/Login.java
+++ b/app/src/main/java/com/darshanbshah/odsystem/Login.java
@@ -1,13 +1,114 @@
 package com.darshanbshah.odsystem;
 
+import android.content.Intent;
+import android.support.annotation.NonNull;
 import android.support.v7.app.AppCompatActivity;
 import android.os.Bundle;
+import android.util.Log;
+import android.view.View;
 
-public class Login extends AppCompatActivity {
+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.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;
 
+public class Login extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener{
+
+    private GoogleApiClient mGoogleApiClient;
+    private FirebaseAuth mAuth;
+    private FirebaseAuth.AuthStateListener mAuthListener;
+
+    private static int RC_SIGN_IN = 0;
+    private static String TAG = "MAIN_ACTIVITY";
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
         setContentView(R.layout.activity_login);
+        mAuth = FirebaseAuth.getInstance();
+        mAuthListener = new FirebaseAuth.AuthStateListener() {
+            @Override
+            public void onAuthStateChanged(@NonNull FirebaseAuth firebaseAuth) {
+                FirebaseUser user = firebaseAuth.getCurrentUser();
+                if (user != null) {
+                    Log.d("AUTH", "User logged in: " + user.getEmail());
+                }
+                else {
+                    Log.d("AUTH", "User logged out.");
+                }
+            }
+        };
+        GoogleSignInOptions options = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN).requestIdToken(getString(R.string.default_web_client_id)).requestEmail().build();
+        mGoogleApiClient = new GoogleApiClient.Builder(this).enableAutoManage(this, this).addApi(Auth.GOOGLE_SIGN_IN_API, options).build();
+
+        findViewById(R.id.sign_in_button).setOnClickListener(this);
+    }
+
+    public void login() {
+        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
+        startActivityForResult(signInIntent, RC_SIGN_IN);
+    }
+
+
+    @Override
+    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
+        Log.d(TAG, "Connection failed");
+    }
+
+    @Override
+    public void onClick(View v) {
+        switch (v.getId()) {
+            case R.id.sign_in_button:
+                login();
+                break;
+        }
+    }
+
+    @Override
+    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
+        super.onActivityResult(requestCode, resultCode, data);
+        if (requestCode == RC_SIGN_IN) {
+            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
+            if (result.isSuccess()) {
+                GoogleSignInAccount account = result.getSignInAccount();
+                FirebaseAuthGoogle(account);
+            }
+            else {
+                Log.d(TAG, "Google login failed");
+            }
+        }
+    }
+
+    public void FirebaseAuthGoogle(GoogleSignInAccount account) {
+        AuthCredential credential = GoogleAuthProvider.getCredential(account.getIdToken(), null);
+        mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
+            @Override
+            public void onComplete(@NonNull Task<AuthResult> task) {
+                Log.d("AUTH", "signInWithCredential: onComplete: " + task.isSuccessful());
+                startActivity(new Intent(getApplicationContext(), MainActivity.class));
+            }
+        });
+    }
+
+    @Override
+    protected void onStart() {
+        super.onStart();
+        mAuth.addAuthStateListener(mAuthListener);
+    }
+
+    @Override
+    protected void onStop() {
+        super.onStop();
+        if (mAuthListener != null) {
+            mAuth.removeAuthStateListener(mAuthListener);
+        }
     }
-}
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/darshanbshah/odsystem/MainActivity.java b/app/src/main/java/com/darshanbshah/odsystem/MainActivity.java
new file mode 100644
index 0000000..dff9f5e
--- /dev/null
+++ b/app/src/main/java/com/darshanbshah/odsystem/MainActivity.java
@@ -0,0 +1,25 @@
+package com.darshanbshah.odsystem;
+
+import android.content.Intent;
+import android.support.v7.app.AppCompatActivity;
+import android.os.Bundle;
+import android.view.View;
+
+import com.google.firebase.auth.FirebaseAuth;
+
+public class MainActivity extends AppCompatActivity {
+
+    private FirebaseAuth mAuth;
+    @Override
+    protected void onCreate(Bundle savedInstanceState) {
+        super.onCreate(savedInstanceState);
+        setContentView(R.layout.activity_main);
+        mAuth = FirebaseAuth.getInstance();
+    }
+
+    public void signOut(View view) {
+        mAuth.signOut();
+        startActivity(new Intent(this, Login.class));
+        finish();
+    }
+}
diff --git a/app/src/main/java/com/darshanbshah/odsystem/Registration.java b/app/src/main/java/com/darshanbshah/odsystem/Registration.java
deleted file mode 100644
index e420b23..0000000
--- a/app/src/main/java/com/darshanbshah/odsystem/Registration.java
+++ /dev/null
@@ -1,13 +0,0 @@
-package com.darshanbshah.odsystem;
-
-import android.support.v7.app.AppCompatActivity;
-import android.os.Bundle;
-
-public class Registration extends AppCompatActivity {
-
-    @Override
-    protected void onCreate(Bundle savedInstanceState) {
-        super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_registration);
-    }
-}
diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml
index fe10d90..88f539e 100644
--- a/app/src/main/res/layout/activity_login.xml
+++ b/app/src/main/res/layout/activity_login.xml
@@ -10,61 +10,24 @@
     android:paddingTop="@dimen/activity_vertical_margin"
     tools:context="com.darshanbshah.odsystem.Login">
 
-    <EditText
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:inputType="textPersonName"
-        android:ems="10"
-        android:layout_marginTop="185dp"
-        android:id="@+id/emailField"
-        android:hint="Email"
-        android:layout_alignParentTop="true"
-        android:layout_centerHorizontal="true"
-        android:textAlignment="center" />
-
-    <EditText
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:inputType="textPassword"
-        android:ems="10"
-        android:id="@+id/passwordField"
-        android:hint="Password"
-        android:fontFamily="sans-serif"
-        android:layout_marginTop="43dp"
-        android:layout_below="@+id/emailField"
-        android:layout_alignStart="@+id/emailField"
-        android:textAlignment="center" />
-
-    <Button
-        android:text="Login"
-        android:layout_width="wrap_content"
-        android:layout_height="wrap_content"
-        android:layout_marginTop="41dp"
-        android:id="@+id/loginButton"
-        android:layout_below="@+id/passwordField"
-        android:layout_centerHorizontal="true"
-        style="@style/Widget.AppCompat.Button.Colored" />
-
     <TextView
         android:text="OD SYSTEM"
         android:layout_width="match_parent"
         android:layout_height="wrap_content"
-        android:layout_marginTop="68dp"
+        android:layout_marginTop="12dp"
         android:id="@+id/textView3"
         android:typeface="sans"
-        android:layout_alignParentTop="true"
-        android:layout_alignParentStart="true"
         android:textAppearance="@style/TextAppearance.AppCompat"
         android:textSize="36sp"
-        android:textAlignment="center" />
+        android:textAlignment="center"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentStart="true" />
 
-    <TextView
-        android:text="Register"
+    <com.google.android.gms.common.SignInButton
         android:layout_width="wrap_content"
         android:layout_height="wrap_content"
-        android:layout_marginTop="31dp"
-        android:id="@+id/regTextView"
-        android:textAlignment="center"
-        android:layout_below="@+id/loginButton"
-        android:layout_centerHorizontal="true" />
+        android:layout_marginTop="186dp"
+        android:id="@+id/sign_in_button"
+        android:layout_centerHorizontal="true"></com.google.android.gms.common.SignInButton>
+
 </RelativeLayout>
diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml
new file mode 100644
index 0000000..b091d10
--- /dev/null
+++ b/app/src/main/res/layout/activity_main.xml
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="utf-8"?>
+<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
+    xmlns:tools="http://schemas.android.com/tools"
+    android:id="@+id/activity_main"
+    android:layout_width="match_parent"
+    android:layout_height="match_parent"
+    tools:context="com.darshanbshah.odsystem.MainActivity">
+
+    <Button
+        android:text="Sign Out"
+        android:layout_width="wrap_content"
+        android:layout_height="wrap_content"
+        android:id="@+id/sign_out_button"
+        android:onClick="signOut"
+        style="@android:style/Widget.Material.Button.ButtonBar.AlertDialog"
+        android:layout_alignParentTop="true"
+        android:layout_alignParentEnd="true" />
+</RelativeLayout>
diff --git a/app/src/main/res/layout/activity_registration.xml b/app/src/main/res/layout/activity_registration.xml
deleted file mode 100644
index 9f5bf6f..0000000
--- a/app/src/main/res/layout/activity_registration.xml
+++ /dev/null
@@ -1,13 +0,0 @@
-<?xml version="1.0" encoding="utf-8"?>
-<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
-    xmlns:tools="http://schemas.android.com/tools"
-    android:id="@+id/activity_registration"
-    android:layout_width="match_parent"
-    android:layout_height="match_parent"
-    android:paddingBottom="@dimen/activity_vertical_margin"
-    android:paddingLeft="@dimen/activity_horizontal_margin"
-    android:paddingRight="@dimen/activity_horizontal_margin"
-    android:paddingTop="@dimen/activity_vertical_margin"
-    tools:context="com.darshanbshah.odsystem.Registration">
-
-</RelativeLayout>
-- 
GitLab