From 41bbc671ca8ed80d741da974dd13634c576c9c7f Mon Sep 17 00:00:00 2001 From: Dennis Thiessen Date: Sat, 27 May 2017 23:55:05 +0200 Subject: [PATCH] Bugfixing: Social Media Login more reliable, especially with Google+ --- .../fragment/FacebookButtonFragment.java | 9 ++-- .../fragment/GooglePlusButtonFragment.java | 45 +++++++++++++------ .../fragment/ProfileStatisticsFragment.java | 12 ++--- 3 files changed, 40 insertions(+), 26 deletions(-) diff --git a/app/src/main/java/org/deke/risk/riskahead/fragment/FacebookButtonFragment.java b/app/src/main/java/org/deke/risk/riskahead/fragment/FacebookButtonFragment.java index 7718aec..52c5f28 100644 --- a/app/src/main/java/org/deke/risk/riskahead/fragment/FacebookButtonFragment.java +++ b/app/src/main/java/org/deke/risk/riskahead/fragment/FacebookButtonFragment.java @@ -76,8 +76,6 @@ public class FacebookButtonFragment extends Fragment { FacebookSdk.sdkInitialize(getContext()); callbackManager = CallbackManager.Factory.create(); initFacebookButton(); - - } @Override @@ -112,13 +110,13 @@ public class FacebookButtonFragment extends Fragment { @Override public void onCancel() { Log.d("FB","OnCancel"); - ((LoginActivity) getActivity()).showMessage("Facebook LogIn canceled"); + ((LoginActivity) getActivity()).showMessage("Facebook LogIn canceled. Please use E-Mail instead."); } @Override public void onError(FacebookException exception) { - Log.d("FB","OnError"); - ((LoginActivity) getActivity()).showMessage("Error while SignIn: ErrorMsg: " + exception.toString()); + Log.d("FB","OnError: " + exception.toString()); + ((LoginActivity) getActivity()).showMessage("Could not log in with Facebook. Please use E-Mail instead or try again later."); } }); } @@ -127,7 +125,6 @@ public class FacebookButtonFragment extends Fragment { GraphRequest request = GraphRequest.newMeRequest(accesstoken, new GraphRequest.GraphJSONObjectCallback() { @Override public void onCompleted(JSONObject objects, GraphResponse response) { - try { ((LoginActivity) getActivity()).handleSocialMediaLogin(objects.getString("id"), "facebook", objects.getString("first_name"), objects.getString("email")); } catch (JSONException e) { diff --git a/app/src/main/java/org/deke/risk/riskahead/fragment/GooglePlusButtonFragment.java b/app/src/main/java/org/deke/risk/riskahead/fragment/GooglePlusButtonFragment.java index 7e87034..f1d8b82 100644 --- a/app/src/main/java/org/deke/risk/riskahead/fragment/GooglePlusButtonFragment.java +++ b/app/src/main/java/org/deke/risk/riskahead/fragment/GooglePlusButtonFragment.java @@ -2,7 +2,10 @@ package org.deke.risk.riskahead.fragment; import android.Manifest; import android.app.Activity; +import android.app.AlertDialog; +import android.app.Dialog; import android.content.Context; +import android.content.DialogInterface; import android.content.Intent; import android.content.IntentSender; import android.content.pm.PackageManager; @@ -26,6 +29,7 @@ import com.google.android.gms.plus.Plus; import com.google.android.gms.plus.model.people.Person; import org.deke.risk.riskahead.LoginActivity; +import org.deke.risk.riskahead.MainActivity; import org.deke.risk.riskahead.R; /** @@ -82,11 +86,28 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien } private void performClickAction() { - + Log.d(TAG,"Click on Google+ Button performed"); if (ActivityCompat.checkSelfPermission(getActivity(), Manifest.permission.GET_ACCOUNTS) != PackageManager.PERMISSION_GRANTED) { - ActivityCompat.requestPermissions(getActivity(), new String[]{Manifest.permission.GET_ACCOUNTS}, MY_PERMISSIONS_REQUEST_ACCOUNTS); + Log.d(TAG,"Permission not granted yet - request now"); + + // Should we show an explanation? + AlertDialog alertDialog = new AlertDialog.Builder(getActivity()).create(); + alertDialog.setTitle("Request Permission"); + alertDialog.setMessage("Google needs permission to see your profile (Contact List) in order to enable log-in with Google+. However, if you do not grant permission, log in with Google+ will not be available."); + alertDialog.setButton(AlertDialog.BUTTON_NEUTRAL, "OK", + new DialogInterface.OnClickListener() { + public void onClick(DialogInterface dialog, int which) { + dialog.dismiss(); + requestPermissions(new String[]{Manifest.permission.GET_ACCOUNTS}, MY_PERMISSIONS_REQUEST_ACCOUNTS); + } + }); + alertDialog.show(); + + }else{ + Log.d(TAG,"Permission already granted"); + if(mGoogleApiClient.isConnected()){ Person currentPerson = getProfileInformation(); ((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient)); @@ -97,28 +118,28 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien } @Override - public void onRequestPermissionsResult(int requestCode, - String permissions[], int[] grantResults) { + public void onRequestPermissionsResult(int requestCode, String permissions[], int[] grantResults) { + Log.d(TAG,"RequestCode: "+requestCode); + switch (requestCode) { case MY_PERMISSIONS_REQUEST_ACCOUNTS: { // If request is cancelled, the result arrays are empty. if (grantResults.length > 0 && grantResults[0] == PackageManager.PERMISSION_GRANTED) { + Log.d(TAG,"Permission granted"); if(mGoogleApiClient.isConnected()){ Person currentPerson = getProfileInformation(); ((LoginActivity) getActivity()).handleSocialMediaLogin(currentPerson.getId(),"google",currentPerson.getDisplayName(),Plus.AccountApi.getAccountName(mGoogleApiClient)); }else{ - signInWithGplus(); + signInWithGplus(); } } else { - + Log.d(TAG,"Permission not granted - what now?"); + Toast.makeText(mContext, "Could not log in with Google+. Please use E-Mail instead or try again later.", + Toast.LENGTH_LONG).show(); } - return; } - - // other 'case' lines to check for other - // permissions this app might request } } @@ -162,7 +183,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien } if (!mIntentInProgress) { - mConnectionResult = result; if (mSignInClicked) { @@ -171,7 +191,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien resolveSignInError(); } } - } @Override @@ -187,8 +206,6 @@ public class GooglePlusButtonFragment extends Fragment implements GoogleApiClien mGoogleApiClient.connect(); } - - /** * Sign-in into google * */ diff --git a/app/src/main/java/org/deke/risk/riskahead/fragment/ProfileStatisticsFragment.java b/app/src/main/java/org/deke/risk/riskahead/fragment/ProfileStatisticsFragment.java index c240927..c5cd32a 100644 --- a/app/src/main/java/org/deke/risk/riskahead/fragment/ProfileStatisticsFragment.java +++ b/app/src/main/java/org/deke/risk/riskahead/fragment/ProfileStatisticsFragment.java @@ -86,7 +86,7 @@ public class ProfileStatisticsFragment extends Fragment { } private StringRequest getStringRequestProfileStats() { - return new StringRequest(Request.Method.POST, AppConfig.URL_ENCRYPTED, new Response.Listener() { + return new StringRequest(Request.Method.POST, AppConfig.REST_GET_USERSTATS, new Response.Listener() { @Override public void onResponse(String response) { @@ -96,11 +96,12 @@ public class ProfileStatisticsFragment extends Fragment { JSONObject jObj = new JSONObject(response); boolean error = jObj.getBoolean("error"); if (!error) { - jObj = jObj.getJSONObject("msg"); - points.setText(jObj.getString("points")); - ranking.setText(jObj.getString("rank")); posts.setText(jObj.getString("numberOfPosts")); - txtMemberSince.setText(jObj.getString("created_at")); + + JSONObject subJObj = jObj.getJSONObject("msg"); + points.setText(subJObj.getString("points")); + ranking.setText(subJObj.getString("rank")); + txtMemberSince.setText(subJObj.getString("created_at")); JSONArray jSubs = jObj.getJSONArray("subs"); @@ -158,7 +159,6 @@ public class ProfileStatisticsFragment extends Fragment { @Override protected Map getParams() { Map params = new HashMap<>(); - params.put("tag", AppConfig.REST_GET_USERSTATS); params.put("uid", parent.user.get(SessionManager.KEY_UID)); params.put("token", parent.user.get(SessionManager.TOKEN)); params.put("userstatsid", uid);