package com.abewy.android.apps.klyph.fragment;
import java.util.Arrays;
import android.app.Activity;
import android.app.Fragment;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.abewy.android.apps.klyph.R;
import com.abewy.android.apps.klyph.core.KlyphFlags;
import com.abewy.android.apps.klyph.core.KlyphSession;
import com.abewy.android.apps.klyph.core.fql.User;
import com.abewy.util.ApplicationUtil;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.UiLifecycleHelper;
import com.facebook.model.GraphUser;
import com.facebook.widget.LoginButton;
public class LoginFragment extends Fragment
{
private LoginButton authButton;
private ProgressBar progressBar;
private UiLifecycleHelper uiHelper;
private Session.StatusCallback callback = new Session.StatusCallback() {
@Override
public void call(Session session, SessionState state, Exception exception)
{
onSessionStateChange(session, state, exception);
}
};
public interface LoginFragmentCallBack
{
public void onUserInfoFetched(User user);
}
@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)
{
View view = inflater.inflate(R.layout.fragment_login, container, false);
authButton = (LoginButton) view.findViewById(R.id.authButton);
progressBar = (ProgressBar) view.findViewById(R.id.progressBar);
TextView tv = (TextView) view.findViewById(R.id.app_name_textview);
tv.setText(KlyphFlags.IS_PRO_VERSION == true ? R.string.app_pro_large_name : R.string.app_large_name);
TextView version = (TextView) view.findViewById(R.id.version);
version.setText(getString(R.string.about_version, ApplicationUtil.getAppVersion(getActivity())));
authButton.setReadPermissions(Arrays.asList("read_stream", "friends_about_me", "friends_work_history", "friends_activities",
"friends_birthday", "user_checkins", "friends_checkins", "user_education_history", "friends_education_history", "user_events",
"friends_events", "user_groups", "friends_groups", "user_hometown", "friends_hometown", "user_interests", "friends_interests",
"user_likes", "friends_likes", "user_notes", "friends_notes", "user_online_presence", "friends_online_presence", "user_interests",
"friends_interests", "user_likes", "friends_likes", "user_notes", "friends_notes", "user_online_presence", "friends_online_presence",
"user_religion_politics", "friends_religion_politics", "user_status", "friends_status", "user_subscriptions",
"friends_subscriptions", "user_videos", "friends_videos", "user_website", "friends_website", "user_work_history",
"friends_work_history", "read_friendlists", "read_mailbox", "read_requests", "read_stream", "xmpp_login", "email", "user_location",
"user_photos", "friends_photos"));
authButton.setUserInfoChangedCallback(new LoginButton.UserInfoChangedCallback() {
@Override
public void onUserInfoFetched(GraphUser user)
{
Log.d("LoginFragment", "onUserInfoFetched ");
if (Session.getActiveSession().isOpened() && user != null)
{
Log.d("LoginFragment", "onUserInfoFetched2 ");
User u = new User();
u.setUid(user.getId());
u.setName(user.getName());
u.setFirst_name(user.getFirstName());
u.setMiddle_name(user.getMiddleName());
u.setLast_name(user.getLastName());
u.setBirthday(user.getBirthday());
u.setEmail((String) user.getProperty("email"));
u.setSex((String) user.getProperty("gender"));
// u.setIn((String)
// user.getProperty("interested_in"));
u.setLocale((String) user.getProperty("locale"));
u.setRelationship_status((String) user.getProperty("relationship_status"));
u.setUsername((String) user.getProperty("username"));
try
{
u.setTimezone(((Double) user.getProperty("timezone")).intValue());
}
catch (Exception e)
{}
KlyphSession.setSessionUser(u);
if (getActivity() != null)
{
((LoginFragmentCallBack) getActivity()).onUserInfoFetched(u);
}
}
}
});
authButton.setFragment(this);
return view;
}
private void onSessionStateChange(Session session, SessionState state, Exception exception)
{
if (getView() != null)
{
if (state.isOpened())
{
authButton.setVisibility(View.GONE);
progressBar.setVisibility(View.VISIBLE);
}
else if (state.isClosed())
{
authButton.setVisibility(View.VISIBLE);
progressBar.setVisibility(View.GONE);
}
}
}
@Override
public void onAttach(Activity activity)
{
super.onAttach(activity);
if (!(activity instanceof LoginFragmentCallBack))
{
throw new Error("Activity must implements LoginFragmentCallBack");
}
}
@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();
uiHelper = null;
authButton = null;
progressBar = null;
callback = null;
}
@Override
public void onSaveInstanceState(Bundle outState)
{
super.onSaveInstanceState(outState);
uiHelper.onSaveInstanceState(outState);
}
}