After searching a lot, i found out for the recent Facebook SDK 4.6.0, inorder to only change FB Login Button text, add this to res/values/strings.xml
<string name="com_facebook_loginview_log_out_button">Your Logout Text</string>
<string name="com_facebook_loginview_log_in_button_long">Your Login Text</string>
However, if we want to have a FB Login button functionality in any random button
add following lines to ClickListener of random button ('buttonLogin' in my case )
buttonLogin.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
LoginButton loginButton = new LoginButton(Login.this);
AccessTokenTracker accessTokenTracker = new AccessTokenTracker() {
@Override
protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken newAccessToken) {
updateWithToken(newAccessToken);
}
};
CallbackManager callbackManager = CallbackManager.Factory.create();
loginButton.setReadPermissions(Arrays.asList("public_profile", "email"));
loginButton.registerCallback(callbackManager, callback);
loginButton.performClick();
}
I only required users public profile and email
updateWithToken() goes as
private void updateWithToken( AccessToken currentAccessToken ){
if(currentAccessToken!=null){
Log.v("MyApp", getClass().toString() + "updateWithToken:If(Token NonNull)");
GraphRequest request = GraphRequest.newMeRequest(currentAccessToken, new GraphRequest.GraphJSONObjectCallback() {
@Override
public void onCompleted(JSONObject object, GraphResponse response) {
Log.v("MyApp",getClass().toString() + response.toString());
// Get facebook data from login
try {
Log.v("MyApp", getClass().toString() + object.toString()); // contains data string
} catch (JSONException e) {
Log.v("MyApp", getClass().toString() + "LoginJSON");
e.printStackTrace();
}
Intent intent = new Intent(Login.this, Home.class); // once data is received i wanted to open Home Activity
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
finish();
}
});
Bundle parameters = new Bundle();
parameters.putString("fields", "id, first_name, last_name, email,gender, birthday, location");
request.setParameters(parameters);
request.executeAsync();
} else {
Log.v("MyApp", getClass().toString() + "updateWithToken:Else(Token Null)");
}
}//updatewithtoken
Also Override OnActivityResult as
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
Log.v("MyApp", getClass().toString() + " Request:" + requestCode + " Result:" + resultCode);
if (requestCode==64206) {
Log.v("MyApp", getClass().toString() + " onActivityResult:If Facebook");
callbackManager.onActivityResult(requestCode, resultCode, data);
}
}
I used log to find request code is 64206 for facebook login.