diff --git a/.idea/libraries/firebase_core_10_0_1.xml b/.idea/libraries/firebase_core_10_0_1.xml
new file mode 100644
index 0000000..5558c25
--- /dev/null
+++ b/.idea/libraries/firebase_core_10_0_1.xml
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/build.gradle b/app/build.gradle
index 4a14b8f..00ed590 100644
--- a/app/build.gradle
+++ b/app/build.gradle
@@ -12,7 +12,6 @@ android {
versionName "1.0"
multiDexEnabled = true
testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
-
}
buildTypes {
release {
@@ -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'
diff --git a/app/google-services.json b/app/google-services.json
new file mode 100644
index 0000000..7037821
--- /dev/null
+++ b/app/google-services.json
@@ -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"
+}
\ No newline at end of file
diff --git a/app/src/main/java/com/pulkit4tech/privy/MainActivity.java b/app/src/main/java/com/pulkit4tech/privy/MainActivity.java
index dc2be91..31bbf8b 100644
--- a/app/src/main/java/com/pulkit4tech/privy/MainActivity.java
+++ b/app/src/main/java/com/pulkit4tech/privy/MainActivity.java
@@ -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;
@@ -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;
@@ -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();
@@ -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() {
+ @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
@@ -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());
@@ -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
@@ -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) {
@@ -188,16 +349,22 @@ private void requestNewPrivy(Place placeToAdd) {
ArrayList types = new ArrayList();
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");
}
}
@@ -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());
+ }
+
+
}
diff --git a/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java b/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java
index 4b505f7..8dad84f 100644
--- a/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java
+++ b/app/src/main/java/com/pulkit4tech/privy/constants/Constants.java
@@ -5,4 +5,7 @@ public class Constants {
public static final int CAMERA_ANIMATION_DURATION = 2500;
public static final int MY_PERMISSIONS_REQUEST_FINE_LOCATIONS = 1;
public static final int PLACE_PICKER_REQUEST = 2;
+ public static final int RC_SIGN_IN = 9001;
+ public static final int RC_SIGN_IN_NEW_PRIVY_REQUEST = 9002;
+ public static final String LOG_PREF = "Login_preference";
}
diff --git a/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java
index e20531a..1d3b208 100644
--- a/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java
+++ b/app/src/main/java/com/pulkit4tech/privy/data/json/PostPrivyRequest.java
@@ -9,6 +9,15 @@ public class PostPrivyRequest {
private String address;
private ArrayList types;
private String language;
+ private String website;
+
+ public String getWebsite() {
+ return website;
+ }
+
+ public void setWebsite(String website) {
+ this.website = website;
+ }
public Location getLocation() {
return location;
@@ -67,6 +76,7 @@ public String toString() {
", address='" + address + '\'' +
", types=" + types +
", language='" + language + '\'' +
+ ", website='" + website + '\'' +
'}';
}
}
diff --git a/app/src/main/res/layout/nav_header_main.xml b/app/src/main/res/layout/nav_header_main.xml
index 5eea9a6..c0b6ba3 100644
--- a/app/src/main/res/layout/nav_header_main.xml
+++ b/app/src/main/res/layout/nav_header_main.xml
@@ -13,7 +13,7 @@
android:theme="@style/ThemeOverlay.AppCompat.Dark">
+ android:text="@string/sign_in"
+ android:id="@+id/user_name"
+ android:textAppearance="@style/TextAppearance.AppCompat.Body2" />
+ android:text="" />
diff --git a/app/src/main/res/menu/activity_main_drawer.xml b/app/src/main/res/menu/activity_main_drawer.xml
index a896f9d..56926df 100644
--- a/app/src/main/res/menu/activity_main_drawer.xml
+++ b/app/src/main/res/menu/activity_main_drawer.xml
@@ -10,14 +10,14 @@
android:id="@+id/nav_request_new"
android:icon="@drawable/ic_menu_gallery"
android:title="Add Privy" />
+
+
+
+
-
+ android:title="Sign In" />
-
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 5f63ac2..68e7587 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -9,4 +9,5 @@
Open Navigation Drawer
Close Navigation Drawer
Settings
+ Sign In
diff --git a/build.gradle b/build.gradle
index 2b37f58..7fda1b3 100644
--- a/build.gradle
+++ b/build.gradle
@@ -5,6 +5,7 @@ buildscript {
}
dependencies {
classpath 'com.android.tools.build:gradle:2.2.2'
+ classpath 'com.google.gms:google-services:3.0.0'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files