Android : facebook button widget does not change state

on Sunday, August 3, 2014


i have implemented facebook login as given in the facebook docs.The problem is that whenever i'm trying to open my activity the facebook login webview automatically popups without even clicking the button.If i login at first time(when webview opens automatically),it logins without any problem and the button changes to logout.But if i cancel the webview and then try to login again,it actually logins,but the button doesnt changes to logout.i'm posting my implementation below..plz see if there's anything wrong i'm doing.Also is there any way to prevent automatic webview popup when i open my app for first time.


main fragment facebook------>



package com.example.fitnessapp;

import java.util.Arrays;

import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;

public class MainFragment_facebook extends Fragment{
private static final String TAG = "MainFragment";
private UiLifecycleHelper uiHelper;
// private TextView userInfoTextView;

private Session.StatusCallback callback = new Session.StatusCallback() {

@Override
public void call(Session session, SessionState state, Exception exception) {
onSessionStateChange(session, state, exception);

}

};
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
uiHelper = new UiLifecycleHelper(getActivity(), callback);
uiHelper.onCreate(savedInstanceState);
}
@Override
public View onCreateView(LayoutInflater inflater,
ViewGroup container, Bundle savedInstanceState) {
// TODO Auto-generated method stub
View view=inflater.inflate(R.layout.settings_layout, container,false);
// userInfoTextView = (TextView) view.findViewById(R.id.fb_user_name);
LoginButton authButton = (LoginButton) view.findViewById(R.id.authButton);
authButton.setReadPermissions(Arrays.asList("public_profile","user_location", "user_birthday", "user_likes"));
onClickLogin();
authButton.setFragment(this);

return view;
}
@Override
public void onResume() {
super.onResume();
Session session = Session.getActiveSession();
if (session != null &&
(session.isOpened() || session.isClosed()) ) {
onSessionStateChange(session, session.getState(), null);
}

uiHelper.onResume();
}

@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
uiHelper.onActivityResult(requestCode, resultCode, data);
}

@Override
public void onPause() {
super.onPause();
uiHelper.onPause();
}

@Override
public void onDestroy() {
super.onDestroy();
uiHelper.onDestroy();
}

@Override
public void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}

private Session.StatusCallback statusCallback =
new SessionStatusCallback();
private void onClickLogin() {
Session session = Session.getActiveSession();
if (!session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setPermissions(Arrays.asList("public_profile"))
.setCallback(statusCallback));
} else {
Session.openActiveSession(getActivity(), this, true, statusCallback);
}
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
// Respond to session state changes, ex: updating the view
}
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
// userInfoTextView.setVisibility(View.VISIBLE);
Log.i(TAG, "Logged in...");
// Request user data and show the results
Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {

@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if (user != null) {
// Display the parsed user info
// userInfoTextView.setText(buildUserInfoDisplay(user));
}
}
});

} else if (state.isClosed()) {
// userInfoTextView.setVisibility(View.INVISIBLE);
Log.i(TAG, "Logged out...");
}
}
// private String buildUserInfoDisplay(GraphUser user) {
// StringBuilder userInfo = new StringBuilder("");
//
// // Example: typed access (name)
// // - no special permissions required
// userInfo.append(String.format("Name: %s\n\n",
// user.getName()));
//
// return userInfo.toString();
// }
}




settings activity---->
package com.example.fitnessapp;

import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.FragmentActivity;
import android.util.Log;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.CompoundButton;
import android.widget.CompoundButton.OnCheckedChangeListener;
import android.widget.TextView;
import android.widget.ToggleButton;
import constants.Preference;

public class Settings_Activity extends FragmentActivity implements OnClickListener,OnCheckedChangeListener {
TextView text_done,introduction_tour,feedback,about_us,rate_us;
ToggleButton toggle_countdown,toggle_push,toggle_sound;
SharedPreferences shared;
Editor edit;
private MainFragment_facebook mainFragment;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate( savedInstanceState);
setContentView(R.layout.settings_layout);
init();
setListener();

if (savedInstanceState == null) {
// Add the fragment on initial activity setup
mainFragment = new MainFragment_facebook();
getSupportFragmentManager()
.beginTransaction()
.add(R.id.settings, mainFragment)
.commit();
} else {
// Or set the fragment from restored state info
mainFragment = (MainFragment_facebook) getSupportFragmentManager()
.findFragmentById(R.id.settings);
}

}

void init() {
shared=getSharedPreferences(Preference.KEY_PREF,MODE_PRIVATE);
edit=shared.edit();
text_done = (TextView) findViewById(R.id.text_done);
introduction_tour=(TextView)findViewById(R.id.textView9);
feedback=(TextView)findViewById(R.id.textView7);
about_us=(TextView)findViewById(R.id.textView8);
rate_us=(TextView)findViewById(R.id.textView6);
toggle_sound=(ToggleButton)findViewById(R.id.toggle_sound);
toggle_push=(ToggleButton)findViewById(R.id.toggle_push);
toggle_countdown=(ToggleButton)findViewById(R.id.toggle_countdown);
//checking values in shared preference
toggle_sound.setChecked(shared.getBoolean(Preference.KEY_SOUND, false));
toggle_countdown.setChecked(shared.getBoolean(Preference.KEY_COUNTDOWN, false));
toggle_push.setChecked(shared.getBoolean(Preference.KEY_PUSH, false));
}

void setListener() {
text_done.setOnClickListener(this);
introduction_tour.setOnClickListener(this);
feedback.setOnClickListener(this);
about_us.setOnClickListener(this);
rate_us.setOnClickListener(this);
toggle_sound.setOnCheckedChangeListener(this);
toggle_countdown.setOnCheckedChangeListener(this);
toggle_push.setOnCheckedChangeListener(this);
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
Log.v("enter", "enter");
switch (v.getId()) {
case R.id.text_done:
finish();
overridePendingTransition(R.anim.dummy, R.anim.push_down_out);
break;
case R.id.textView9:
Intent intent=new Intent(Settings_Activity.this,Introduction_tour_activity.class);
startActivity(intent);
break;
case R.id.textView7:
final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);
emailIntent.setType("plain/text");
emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL, new String[]{"djani67@gmail.com"});
emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, "Subject");
emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Text");
startActivity(Intent.createChooser(emailIntent, "Send mail..."));
break;
case R.id.textView8:
Intent intent2= new Intent(Settings_Activity.this,About_us_activity.class);
startActivity(intent2);
break;
case R.id.textView6:
Uri uri = Uri.parse("http://www.google.com");
Intent intent3 = new Intent(Intent.ACTION_VIEW, uri);
startActivity(intent3);
default:
break;
}

}

@Override
public void onBackPressed() {
// TODO Auto-generated method stub
super.onBackPressed();
overridePendingTransition(R.anim.dummy, R.anim.push_down_out);
}

//putting toggle button status in shared preference
@Override
public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
// TODO Auto-generated method stub
switch (buttonView.getId()) {
case R.id.toggle_sound:
edit.putBoolean(Preference.KEY_SOUND, isChecked);

break;

case R.id.toggle_countdown:
edit.putBoolean(Preference.KEY_COUNTDOWN, isChecked);

break;

case R.id.toggle_push:
edit.putBoolean(Preference.KEY_PUSH, isChecked);
break;

}

edit.commit();
}
}

0 comments:

Post a Comment