Skip to content

Commit

Permalink
Merge pull request #31 from pulkit4tech/add_signup
Browse files Browse the repository at this point in the history
#18 : Added Google Sign In before requesting new Privy
  • Loading branch information
pulkit4tech authored Jan 12, 2017
2 parents 7ed21c1 + 7e88b1f commit 1097c7e
Show file tree
Hide file tree
Showing 10 changed files with 285 additions and 35 deletions.
10 changes: 10 additions & 0 deletions .idea/libraries/firebase_core_10_0_1.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

5 changes: 3 additions & 2 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,6 @@ android {
versionName "1.0"
multiDexEnabled = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

}
buildTypes {
release {
Expand All @@ -32,9 +31,11 @@ dependencies {
})
compile 'com.android.support:appcompat-v7:25.0.1'
compile 'com.android.support:design:25.0.1'
compile 'com.google.android.gms:play-services:10.0.1'
compile 'com.android.support:multidex:1.0.1'
testCompile 'junit:junit:4.12'
compile 'com.google.code.gson:gson:2.8.0'
compile 'com.android.volley:volley:1.0.0'
compile 'com.google.android.gms:play-services:10.0.1'
}

apply plugin: 'com.google.gms.google-services'
48 changes: 48 additions & 0 deletions app/google-services.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
{
"project_info": {
"project_number": "203008384222",
"project_id": "privy-154513"
},
"client": [
{
"client_info": {
"mobilesdk_app_id": "1:203008384222:android:ae185500677abe13",
"android_client_info": {
"package_name": "com.pulkit4tech.privy"
}
},
"oauth_client": [
{
"client_id": "203008384222-oh1nnkreep3i88nbsj72be32ujmr56qs.apps.googleusercontent.com",
"client_type": 1,
"android_info": {
"package_name": "com.pulkit4tech.privy",
"certificate_hash": "DDCEF282F60C4E45E0FC7D575AA76E6D9C214000"
}
},
{
"client_id": "203008384222-5fvdfg6mt939sb650t6ukcde442jmrnl.apps.googleusercontent.com",
"client_type": 3
}
],
"api_key": [
{
"current_key": "AIzaSyBcvpPGh9Ba9sOEg1YCyhA6dZ-plgePfeI"
}
],
"services": {
"analytics_service": {
"status": 1
},
"appinvite_service": {
"status": 1,
"other_platform_oauth_client": []
},
"ads_service": {
"status": 1
}
}
}
],
"configuration_version": "1"
}
219 changes: 197 additions & 22 deletions app/src/main/java/com/pulkit4tech/privy/MainActivity.java
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.pulkit4tech.privy;

import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageManager;
import android.support.annotation.NonNull;
import android.support.design.widget.CoordinatorLayout;
Expand All @@ -19,8 +21,17 @@
import android.util.Log;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.Toast;

import android.view.View;
import android.widget.TextView;

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.location.places.Place;
import com.google.android.gms.location.places.ui.PlacePicker;
import com.pulkit4tech.privy.data.json.Location;
Expand All @@ -32,17 +43,31 @@
import java.util.ArrayList;

import static com.pulkit4tech.privy.constants.Constants.DEBUG;
import static com.pulkit4tech.privy.constants.Constants.LOG_PREF;
import static com.pulkit4tech.privy.constants.Constants.MY_PERMISSIONS_REQUEST_FINE_LOCATIONS;
import static com.pulkit4tech.privy.constants.Constants.PLACE_PICKER_REQUEST;
import static com.pulkit4tech.privy.constants.Constants.RC_SIGN_IN;
import static com.pulkit4tech.privy.constants.Constants.RC_SIGN_IN_NEW_PRIVY_REQUEST;

public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, GoogleApiClient.OnConnectionFailedListener {

private NavigationView navigationView;
private GoogleApiClient mGoogleApiClient;
private Context mContext;
private FloatingActionButton fab;
private SharedPreferences mSharedPreferences;
private String NAME = "user_name";
private String EMAIL = "email_id";
private String LOGGED_IN = "logged_in";
// private ImageView profileImg;
private TextView userName, emailId;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mContext = this;
mSharedPreferences = getSharedPreferences(LOG_PREF, MODE_PRIVATE);

if (savedInstanceState == null) {
setUpInfo();
Expand All @@ -55,28 +80,96 @@ protected void onResume() {
}

private void setUpInfo() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
setGoogleApiClientInfo();
setUpFab();
setUpNavigationDrawer();

if (checkIfLoggedIn()) {
fab.hide();
}

FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
// fab.setOnClickListener(new View.OnClickListener() {
// @Override
// public void onClick(View view) {
// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
// .setAction("Action", null);
// }
// });
navigationView.getMenu().getItem(0).setChecked(true);
loadMapFragment();
}

private void setUpNavigationDrawer() {
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
setSupportActionBar(toolbar);
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
drawer.setDrawerListener(toggle);
toggle.syncState();

navigationView = (NavigationView) findViewById(R.id.nav_view);
navigationView.setNavigationItemSelectedListener(this);
navigationView.getMenu().getItem(0).setChecked(true);
loadMapFragment();
setUpNavigationHeader();
}

private void setUpNavigationHeader() {
View nav_head = navigationView.getHeaderView(0);
// profileImg = (ImageView) nav_head.findViewById(R.id.profile_pic);
userName = (TextView) nav_head.findViewById(R.id.user_name);
emailId = (TextView) nav_head.findViewById(R.id.email_id);

setUpNavigationHeaderValue();
}

private void setUpNavigationHeaderValue() {
// TODO : Set Profile Image
userName.setText(mSharedPreferences.getString(NAME, getResources().getString(R.string.sign_in)));
emailId.setText(mSharedPreferences.getString(EMAIL, ""));
}

private void setUpFab() {
fab = (FloatingActionButton) findViewById(R.id.fab);
fab.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startGoogleSignInActivity(RC_SIGN_IN);
}
});
}

private void startGoogleSignInActivity(int resultcode) {
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
startActivityForResult(signInIntent, resultcode);
}

private void signOut() {
clearSharedPreference();
setUpNavigationHeaderValue();

Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
@Override
public void onResult(@NonNull Status status) {
if (status.isSuccess()) {
snackMsg("Signed Out!!");
} else {
snackMsg("Some error while signing out!");
Log.d(DEBUG, "Sign out error : " + status.toString());
}
}
});
}

private boolean checkIfLoggedIn() {
return mSharedPreferences.getBoolean(LOGGED_IN, false);
}

private void setGoogleApiClientInfo() {

// Testing Google Sign in
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestEmail()
.requestProfile()
.build();

// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}

@Override
Expand All @@ -91,6 +184,7 @@ public void onRequestPermissionsResult(int requestCode, @NonNull String[] permis
switch (requestCode) {
case MY_PERMISSIONS_REQUEST_FINE_LOCATIONS:
if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) {
loadMapFragment();
snackMsg("Permission granted!!");
} else {
loadFragment(new NoLocationPermission());
Expand Down Expand Up @@ -147,14 +241,23 @@ public boolean onNavigationItemSelected(MenuItem item) {

if (id == R.id.nav_nearby_privy) {
loadMapFragment();
closeDrawer();
} else if (id == R.id.nav_request_new) {
loadAddNewPrivyActivity();
closeDrawer();
} else if (id == R.id.nav_sign_in_up) {
if (checkIfLoggedIn())
signOut();
else
startGoogleSignInActivity(RC_SIGN_IN);
}
//TODO : Add other conditions
return true;
}

private void closeDrawer() {
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
drawer.closeDrawer(GravityCompat.START);
return true;
}

@Override
Expand All @@ -174,6 +277,64 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
navigationView.getMenu().getItem(0).setChecked(true);
loadMapFragment();
}

// Google Sign in Callback
if (requestCode == RC_SIGN_IN) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}

if (requestCode == RC_SIGN_IN_NEW_PRIVY_REQUEST) {
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResultAndLaunchNewRequestPrivy(result);
}
}

private void handleSignInResultAndLaunchNewRequestPrivy(GoogleSignInResult result) {
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
addLoginInfo(acct);

//Launch NewRequestPrivy
loadAddNewPrivyActivity();

// Hide Fab button
fab.hide();
} else {
clearSharedPreference();
snackMsg("Please Sign in to request new Privy");
}
setUpNavigationHeaderValue();
}

private void handleSignInResult(GoogleSignInResult result) {
Log.d(DEBUG, "handleSignInResult:" + result.isSuccess());
if (result.isSuccess()) {
// Signed in successfully, show authenticated UI.
GoogleSignInAccount acct = result.getSignInAccount();
addLoginInfo(acct);
// Hide Fab button
fab.hide();
} else {
clearSharedPreference();
snackMsg("Please Sign in to request new Privy");
}
setUpNavigationHeaderValue();
}

private void addLoginInfo(GoogleSignInAccount acct) {
// TODO : add Profile Picture
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.putBoolean(LOGGED_IN, true);
editor.putString(NAME, acct.getDisplayName());
editor.putString(EMAIL, acct.getEmail());
editor.commit();
}

private void clearSharedPreference() {
SharedPreferences.Editor editor = mSharedPreferences.edit();
editor.clear().commit();
}

private void requestNewPrivy(Place placeToAdd) {
Expand All @@ -188,16 +349,22 @@ private void requestNewPrivy(Place placeToAdd) {
ArrayList<String> types = new ArrayList<String>();
types.add("establishment");
postdata.setTypes(types);
postdata.setAddress(mSharedPreferences.getString(EMAIL, ""));
postdata.setLanguage("en");
new NetworkRequest(this, postdata).postRequest();
}

private void loadAddNewPrivyActivity() {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
} catch (Exception e) {
Log.d(DEBUG, e.toString());
if (checkIfLoggedIn()) {
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
try {
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
} catch (Exception e) {
Log.d(DEBUG, e.toString());
}
} else {
startGoogleSignInActivity(RC_SIGN_IN_NEW_PRIVY_REQUEST);
snackMsg("Please Sign In to add new Privy");
}
}

Expand All @@ -220,4 +387,12 @@ public void snackMsg(String msg) {
private boolean checkLocationEnabledPermission() {
return ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
}

@Override
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
snackMsg("Some Error while Connecting to Google Service!!");
Log.d(DEBUG, "OnConnectionFailed: " + connectionResult.toString());
}


}
Loading

0 comments on commit 1097c7e

Please sign in to comment.