Skip to content

Commit 7e88b1f

Browse files
committed
#18 : Added Google Sign In before requesting new Privy
1 parent 7ed21c1 commit 7e88b1f

File tree

10 files changed

+285
-35
lines changed

10 files changed

+285
-35
lines changed

.idea/libraries/firebase_core_10_0_1.xml

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/build.gradle

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@ android {
1212
versionName "1.0"
1313
multiDexEnabled = true
1414
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
15-
1615
}
1716
buildTypes {
1817
release {
@@ -32,9 +31,11 @@ dependencies {
3231
})
3332
compile 'com.android.support:appcompat-v7:25.0.1'
3433
compile 'com.android.support:design:25.0.1'
35-
compile 'com.google.android.gms:play-services:10.0.1'
3634
compile 'com.android.support:multidex:1.0.1'
3735
testCompile 'junit:junit:4.12'
3836
compile 'com.google.code.gson:gson:2.8.0'
3937
compile 'com.android.volley:volley:1.0.0'
38+
compile 'com.google.android.gms:play-services:10.0.1'
4039
}
40+
41+
apply plugin: 'com.google.gms.google-services'

app/google-services.json

Lines changed: 48 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,48 @@
1+
{
2+
"project_info": {
3+
"project_number": "203008384222",
4+
"project_id": "privy-154513"
5+
},
6+
"client": [
7+
{
8+
"client_info": {
9+
"mobilesdk_app_id": "1:203008384222:android:ae185500677abe13",
10+
"android_client_info": {
11+
"package_name": "com.pulkit4tech.privy"
12+
}
13+
},
14+
"oauth_client": [
15+
{
16+
"client_id": "203008384222-oh1nnkreep3i88nbsj72be32ujmr56qs.apps.googleusercontent.com",
17+
"client_type": 1,
18+
"android_info": {
19+
"package_name": "com.pulkit4tech.privy",
20+
"certificate_hash": "DDCEF282F60C4E45E0FC7D575AA76E6D9C214000"
21+
}
22+
},
23+
{
24+
"client_id": "203008384222-5fvdfg6mt939sb650t6ukcde442jmrnl.apps.googleusercontent.com",
25+
"client_type": 3
26+
}
27+
],
28+
"api_key": [
29+
{
30+
"current_key": "AIzaSyBcvpPGh9Ba9sOEg1YCyhA6dZ-plgePfeI"
31+
}
32+
],
33+
"services": {
34+
"analytics_service": {
35+
"status": 1
36+
},
37+
"appinvite_service": {
38+
"status": 1,
39+
"other_platform_oauth_client": []
40+
},
41+
"ads_service": {
42+
"status": 1
43+
}
44+
}
45+
}
46+
],
47+
"configuration_version": "1"
48+
}

app/src/main/java/com/pulkit4tech/privy/MainActivity.java

Lines changed: 197 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,8 @@
11
package com.pulkit4tech.privy;
22

3+
import android.content.Context;
34
import android.content.Intent;
5+
import android.content.SharedPreferences;
46
import android.content.pm.PackageManager;
57
import android.support.annotation.NonNull;
68
import android.support.design.widget.CoordinatorLayout;
@@ -19,8 +21,17 @@
1921
import android.util.Log;
2022
import android.view.Menu;
2123
import android.view.MenuItem;
22-
import android.widget.Toast;
23-
24+
import android.view.View;
25+
import android.widget.TextView;
26+
27+
import com.google.android.gms.auth.api.Auth;
28+
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
29+
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
30+
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
31+
import com.google.android.gms.common.ConnectionResult;
32+
import com.google.android.gms.common.api.GoogleApiClient;
33+
import com.google.android.gms.common.api.ResultCallback;
34+
import com.google.android.gms.common.api.Status;
2435
import com.google.android.gms.location.places.Place;
2536
import com.google.android.gms.location.places.ui.PlacePicker;
2637
import com.pulkit4tech.privy.data.json.Location;
@@ -32,17 +43,31 @@
3243
import java.util.ArrayList;
3344

3445
import static com.pulkit4tech.privy.constants.Constants.DEBUG;
46+
import static com.pulkit4tech.privy.constants.Constants.LOG_PREF;
3547
import static com.pulkit4tech.privy.constants.Constants.MY_PERMISSIONS_REQUEST_FINE_LOCATIONS;
3648
import static com.pulkit4tech.privy.constants.Constants.PLACE_PICKER_REQUEST;
49+
import static com.pulkit4tech.privy.constants.Constants.RC_SIGN_IN;
50+
import static com.pulkit4tech.privy.constants.Constants.RC_SIGN_IN_NEW_PRIVY_REQUEST;
3751

38-
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener {
52+
public class MainActivity extends AppCompatActivity implements NavigationView.OnNavigationItemSelectedListener, GoogleApiClient.OnConnectionFailedListener {
3953

4054
private NavigationView navigationView;
55+
private GoogleApiClient mGoogleApiClient;
56+
private Context mContext;
57+
private FloatingActionButton fab;
58+
private SharedPreferences mSharedPreferences;
59+
private String NAME = "user_name";
60+
private String EMAIL = "email_id";
61+
private String LOGGED_IN = "logged_in";
62+
// private ImageView profileImg;
63+
private TextView userName, emailId;
4164

4265
@Override
4366
protected void onCreate(Bundle savedInstanceState) {
4467
super.onCreate(savedInstanceState);
4568
setContentView(R.layout.activity_main);
69+
mContext = this;
70+
mSharedPreferences = getSharedPreferences(LOG_PREF, MODE_PRIVATE);
4671

4772
if (savedInstanceState == null) {
4873
setUpInfo();
@@ -55,28 +80,96 @@ protected void onResume() {
5580
}
5681

5782
private void setUpInfo() {
58-
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
59-
setSupportActionBar(toolbar);
83+
setGoogleApiClientInfo();
84+
setUpFab();
85+
setUpNavigationDrawer();
86+
87+
if (checkIfLoggedIn()) {
88+
fab.hide();
89+
}
6090

61-
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab);
62-
// fab.setOnClickListener(new View.OnClickListener() {
63-
// @Override
64-
// public void onClick(View view) {
65-
// Snackbar.make(view, "Replace with your own action", Snackbar.LENGTH_LONG)
66-
// .setAction("Action", null);
67-
// }
68-
// });
91+
navigationView.getMenu().getItem(0).setChecked(true);
92+
loadMapFragment();
93+
}
6994

95+
private void setUpNavigationDrawer() {
96+
Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar);
97+
setSupportActionBar(toolbar);
7098
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
7199
ActionBarDrawerToggle toggle = new ActionBarDrawerToggle(
72100
this, drawer, toolbar, R.string.navigation_drawer_open, R.string.navigation_drawer_close);
73101
drawer.setDrawerListener(toggle);
74102
toggle.syncState();
75-
76103
navigationView = (NavigationView) findViewById(R.id.nav_view);
77104
navigationView.setNavigationItemSelectedListener(this);
78-
navigationView.getMenu().getItem(0).setChecked(true);
79-
loadMapFragment();
105+
setUpNavigationHeader();
106+
}
107+
108+
private void setUpNavigationHeader() {
109+
View nav_head = navigationView.getHeaderView(0);
110+
// profileImg = (ImageView) nav_head.findViewById(R.id.profile_pic);
111+
userName = (TextView) nav_head.findViewById(R.id.user_name);
112+
emailId = (TextView) nav_head.findViewById(R.id.email_id);
113+
114+
setUpNavigationHeaderValue();
115+
}
116+
117+
private void setUpNavigationHeaderValue() {
118+
// TODO : Set Profile Image
119+
userName.setText(mSharedPreferences.getString(NAME, getResources().getString(R.string.sign_in)));
120+
emailId.setText(mSharedPreferences.getString(EMAIL, ""));
121+
}
122+
123+
private void setUpFab() {
124+
fab = (FloatingActionButton) findViewById(R.id.fab);
125+
fab.setOnClickListener(new View.OnClickListener() {
126+
@Override
127+
public void onClick(View view) {
128+
startGoogleSignInActivity(RC_SIGN_IN);
129+
}
130+
});
131+
}
132+
133+
private void startGoogleSignInActivity(int resultcode) {
134+
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
135+
startActivityForResult(signInIntent, resultcode);
136+
}
137+
138+
private void signOut() {
139+
clearSharedPreference();
140+
setUpNavigationHeaderValue();
141+
142+
Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(new ResultCallback<Status>() {
143+
@Override
144+
public void onResult(@NonNull Status status) {
145+
if (status.isSuccess()) {
146+
snackMsg("Signed Out!!");
147+
} else {
148+
snackMsg("Some error while signing out!");
149+
Log.d(DEBUG, "Sign out error : " + status.toString());
150+
}
151+
}
152+
});
153+
}
154+
155+
private boolean checkIfLoggedIn() {
156+
return mSharedPreferences.getBoolean(LOGGED_IN, false);
157+
}
158+
159+
private void setGoogleApiClientInfo() {
160+
161+
// Testing Google Sign in
162+
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
163+
.requestEmail()
164+
.requestProfile()
165+
.build();
166+
167+
// Build a GoogleApiClient with access to the Google Sign-In API and the
168+
// options specified by gso.
169+
mGoogleApiClient = new GoogleApiClient.Builder(mContext)
170+
.enableAutoManage(this, this)
171+
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
172+
.build();
80173
}
81174

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

148242
if (id == R.id.nav_nearby_privy) {
149243
loadMapFragment();
244+
closeDrawer();
150245
} else if (id == R.id.nav_request_new) {
151246
loadAddNewPrivyActivity();
247+
closeDrawer();
248+
} else if (id == R.id.nav_sign_in_up) {
249+
if (checkIfLoggedIn())
250+
signOut();
251+
else
252+
startGoogleSignInActivity(RC_SIGN_IN);
152253
}
153254
//TODO : Add other conditions
255+
return true;
256+
}
154257

258+
private void closeDrawer() {
155259
DrawerLayout drawer = (DrawerLayout) findViewById(R.id.drawer_layout);
156260
drawer.closeDrawer(GravityCompat.START);
157-
return true;
158261
}
159262

160263
@Override
@@ -174,6 +277,64 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) {
174277
navigationView.getMenu().getItem(0).setChecked(true);
175278
loadMapFragment();
176279
}
280+
281+
// Google Sign in Callback
282+
if (requestCode == RC_SIGN_IN) {
283+
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
284+
handleSignInResult(result);
285+
}
286+
287+
if (requestCode == RC_SIGN_IN_NEW_PRIVY_REQUEST) {
288+
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
289+
handleSignInResultAndLaunchNewRequestPrivy(result);
290+
}
291+
}
292+
293+
private void handleSignInResultAndLaunchNewRequestPrivy(GoogleSignInResult result) {
294+
if (result.isSuccess()) {
295+
// Signed in successfully, show authenticated UI.
296+
GoogleSignInAccount acct = result.getSignInAccount();
297+
addLoginInfo(acct);
298+
299+
//Launch NewRequestPrivy
300+
loadAddNewPrivyActivity();
301+
302+
// Hide Fab button
303+
fab.hide();
304+
} else {
305+
clearSharedPreference();
306+
snackMsg("Please Sign in to request new Privy");
307+
}
308+
setUpNavigationHeaderValue();
309+
}
310+
311+
private void handleSignInResult(GoogleSignInResult result) {
312+
Log.d(DEBUG, "handleSignInResult:" + result.isSuccess());
313+
if (result.isSuccess()) {
314+
// Signed in successfully, show authenticated UI.
315+
GoogleSignInAccount acct = result.getSignInAccount();
316+
addLoginInfo(acct);
317+
// Hide Fab button
318+
fab.hide();
319+
} else {
320+
clearSharedPreference();
321+
snackMsg("Please Sign in to request new Privy");
322+
}
323+
setUpNavigationHeaderValue();
324+
}
325+
326+
private void addLoginInfo(GoogleSignInAccount acct) {
327+
// TODO : add Profile Picture
328+
SharedPreferences.Editor editor = mSharedPreferences.edit();
329+
editor.putBoolean(LOGGED_IN, true);
330+
editor.putString(NAME, acct.getDisplayName());
331+
editor.putString(EMAIL, acct.getEmail());
332+
editor.commit();
333+
}
334+
335+
private void clearSharedPreference() {
336+
SharedPreferences.Editor editor = mSharedPreferences.edit();
337+
editor.clear().commit();
177338
}
178339

179340
private void requestNewPrivy(Place placeToAdd) {
@@ -188,16 +349,22 @@ private void requestNewPrivy(Place placeToAdd) {
188349
ArrayList<String> types = new ArrayList<String>();
189350
types.add("establishment");
190351
postdata.setTypes(types);
352+
postdata.setAddress(mSharedPreferences.getString(EMAIL, ""));
191353
postdata.setLanguage("en");
192354
new NetworkRequest(this, postdata).postRequest();
193355
}
194356

195357
private void loadAddNewPrivyActivity() {
196-
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
197-
try {
198-
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
199-
} catch (Exception e) {
200-
Log.d(DEBUG, e.toString());
358+
if (checkIfLoggedIn()) {
359+
PlacePicker.IntentBuilder builder = new PlacePicker.IntentBuilder();
360+
try {
361+
startActivityForResult(builder.build(this), PLACE_PICKER_REQUEST);
362+
} catch (Exception e) {
363+
Log.d(DEBUG, e.toString());
364+
}
365+
} else {
366+
startGoogleSignInActivity(RC_SIGN_IN_NEW_PRIVY_REQUEST);
367+
snackMsg("Please Sign In to add new Privy");
201368
}
202369
}
203370

@@ -220,4 +387,12 @@ public void snackMsg(String msg) {
220387
private boolean checkLocationEnabledPermission() {
221388
return ActivityCompat.checkSelfPermission(this, android.Manifest.permission.ACCESS_FINE_LOCATION) == PackageManager.PERMISSION_GRANTED;
222389
}
390+
391+
@Override
392+
public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
393+
snackMsg("Some Error while Connecting to Google Service!!");
394+
Log.d(DEBUG, "OnConnectionFailed: " + connectionResult.toString());
395+
}
396+
397+
223398
}

0 commit comments

Comments
 (0)