package com.ved.musicmapapp.fragments;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Vector;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import android.app.Activity;
import android.content.Context;
import android.content.SharedPreferences;
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.View.OnClickListener;
import android.view.ViewGroup;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ListView;
import android.widget.Toast;
import com.facebook.AccessToken;
import com.facebook.FacebookException;
import com.facebook.FacebookOperationCanceledException;
import com.facebook.HttpMethod;
import com.facebook.Request;
import com.facebook.Response;
import com.facebook.Session;
import com.facebook.SessionState;
import com.facebook.model.GraphObject;
import com.facebook.widget.WebDialog;
import com.facebook.widget.WebDialog.OnCompleteListener;
import com.ved.musicmapapp.LoginAcitivity;
import com.ved.musicmapapp.MainActivity;
import com.ved.musicmapapp.R;
import com.ved.musicmapapp.Objects.FacebookFriend;
import com.ved.musicmapapp.adapters.FriendAdapter;
import com.ved.musicmapapp.providers.FollowUserTask;
import com.ved.musicmapapp.utils.FriendSort;
import com.ved.musicmapapp.utils.Statics;
public class InviteFriendFragment extends Fragment implements OnClickListener {
private ListView list;
private FriendAdapter fAdapter;
private Button btn_skip, btn_invite;
private MainActivity m;
private Session.StatusCallback statusCallback;
// private ProgressDialog pd;
private View loadingLayout;
private SharedPreferences prefs;
private boolean isUseApp, isUseNonApp;
private Activity mContext;
// private int countUseApp;
@Override
public void onAttach(Activity activity) {
// TODO Auto-generated method stub
super.onAttach(activity);
this.mContext = activity;
}
@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
super.onCreateView(inflater, container, savedInstanceState);
View v = inflater.inflate(R.layout.activity_invite_friends, container,
false);
//
Session session = Session.getActiveSession();
// performFacebookPermisson();
if (session != null && !session.isOpened() && !session.isClosed()) {
session.openForRead(new Session.OpenRequest(this)
.setCallback(statusCallback));
} else {
Session.openActiveSession(mContext, this, true, statusCallback);
}
if (null == mContext)
return v;
m = (MainActivity) mContext;
prefs = m.getSharedPreferences("MUSIC_MAP", Context.MODE_PRIVATE);
loadingLayout = v.findViewById(R.id.loadingLayout);
/*
* pd = new ProgressDialog(mContext); pd.setMessage("Getting data...");
* pd.setCancelable(false);
*/
statusCallback = new SessionStatusCallback();
list = (ListView) v.findViewById(R.id.list_invite);
if (null != Statics.lstFriends) {
if (Statics.lstFriends.size() > 0) {
loadingLayout.setVisibility(View.GONE);
fAdapter = new FriendAdapter(mContext, Statics.countUseApps);
list.setAdapter(fAdapter);
} else {
if (!Statics.isNetworkConnected(getActivity())) {
loadingLayout.setVisibility(View.GONE);
Toast.makeText(getActivity(), "Network unavaiable!",
Toast.LENGTH_SHORT).show();
} else {
getFriends();
getFriendsUser();
}
}
} else {
if (!Statics.isNetworkConnected(getActivity())) {
loadingLayout.setVisibility(View.GONE);
Toast.makeText(getActivity(), "Network unavaiable!",
Toast.LENGTH_SHORT).show();
} else {
getFriends();
getFriendsUser();
}
}
btn_skip = (Button) v.findViewById(R.id.btn_skip);
btn_invite = (Button) v.findViewById(R.id.btn_invite);
btn_skip.setOnClickListener(this);
btn_invite.setOnClickListener(this);
isUseApp = false;
isUseNonApp = false;
// countUseApp = -1;
return v;
}
@Override
public void onClick(View v) {
if (v.getId() == R.id.btn_skip) {
m.setNewPage(new MainFragment());
} else if (v.getId() == R.id.btn_invite) {
if (null == fAdapter)
return;
String users = "";
Vector<FacebookFriend> friends = fAdapter.getCheckeds();
Vector<FacebookFriend> friendsUseApp = new Vector<FacebookFriend>();
if (friends.size() == 0) {
Statics.showToast(mContext, "No friend seleted!");
return;
} else {
// Fixed
int i = 0;
for (FacebookFriend friend : friends) {
if (friend.isUseApp()) {
friendsUseApp.add(friend);
if (Statics.hashUsers.containsKey(friend.getUid())) {
Statics.hashUsers.get(friend.getUid()).setFollowed(
true);
i++;
new FollowUserTask(mContext).execute(
Statics.curUser.getID(), Statics.hashUsers
.get(friend.getUid()).getID(),
Statics.FOLLOW);
} else {
if (users.length() == 0) {
users += friends.get(0).getUid();
} else {
users += "," + friend.getUid();
}
}
} else {
if (users.length() == 0) {
users += friends.get(0).getUid();
} else {
users += "," + friend.getUid();
}
}
}
if (users.length() > 0) {
Bundle params = new Bundle();
params.putString(
"message",
"Hey. I'm using PlayListr. Download the app for free to see what music I'm listening to right now.");
params.putString("to", users);
// params.putString("action_type", "send");
// showDialogWithoutNotificationBar("apprequests", params);
showDialogWithoutNotificationBarNew(params);
// sendRequestDialog("apprequests", params);
}
if (users.length() > 0) {
Statics.showToast(mContext, "Your request has been sent");
MainActivity m = (MainActivity) mContext;
m.onYouFollow(null);
} else {
if (i > 0) {
i = 0;
Statics.showToast(mContext,
"Your request has been sent");
MainActivity m = (MainActivity) mContext;
m.onYouFollow(null);
}else{
MainActivity m = (MainActivity) mContext;
m.onYouFollow(null);
}
}
// End
}
}
}
private void showDialogWithoutNotificationBarNew(Bundle params) {
WebDialog requestsDialog = (new WebDialog.RequestsDialogBuilder(
getActivity(), Session.getActiveSession(), params))
.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
if (error != null) {
if (error instanceof FacebookOperationCanceledException) {
Toast.makeText(
getActivity().getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(
getActivity().getApplicationContext(),
"Network Error", Toast.LENGTH_SHORT)
.show();
}
} else {
final String requestId = values
.getString("request");
if (requestId != null) {
Toast.makeText(
getActivity().getApplicationContext(),
"Request sent", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(
getActivity().getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT)
.show();
}
}
}
}).build();
requestsDialog.show();
}
private void showDialogWithoutNotificationBar(String action, Bundle params) {
WebDialog dialog = new WebDialog.Builder(mContext,
Session.getActiveSession(), action, params)
.setOnCompleteListener(new WebDialog.OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
if (error != null
&& !(error instanceof FacebookOperationCanceledException)) {
Statics.showToast(mContext, "Connection is lost!");
} else {
Statics.showToast(mContext,
"Your request has been sent");
try {
MainActivity m = (MainActivity) mContext;
if (m != null)
m.onYouFollow(null);
} catch (Exception ex) {
}
}
}
}).build();
Window dialog_window = dialog.getWindow();
dialog_window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
dialog.show();
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state,
Exception exception) {
if (!Statics.isNetworkConnected(getActivity())) {
loadingLayout.setVisibility(View.GONE);
Toast.makeText(getActivity(), "Network unavaiable!",
Toast.LENGTH_SHORT).show();
} else {
getFriends();
getFriendsUser();
}
}
}
private void getFriendsUser() {
/* make the API call friends */
Session session = Session.getActiveSession();
new Request(session, "/me/friends", null, HttpMethod.GET,
new Request.Callback() {
@Override
public void onCompleted(Response response) {
try {
GraphObject graphObject = response.getGraphObject();
if (null == graphObject)
return;
JSONObject jsonObject = graphObject
.getInnerJSONObject();
Log.d("FB_FRIENDS", jsonObject.toString());
JSONArray array = jsonObject.getJSONArray("data");
// countUseApp = array.length();
for (int i = 0; i < array.length(); i++) {
JSONObject friend = array.getJSONObject(i);
if (friend.getString("id").equals(
prefs.getInt("USER_ID", 0)))
return;
Statics.lstFriends.add(new FacebookFriend(
friend.getString("id"), friend
.getString("name"),
"https://graph.facebook.com/"
+ friend.getString("id")
+ "/picture?type=normal", true));
}
} catch (JSONException e) {
e.printStackTrace();
}
isUseApp = true;
if (isUseNonApp)
sort();
}
}).executeAsync();
}
private void getFriends() {
Statics.lstFriends = new ArrayList<FacebookFriend>();
/* make the API call */
new Request(Session.getActiveSession(), "/me/invitable_friends", null,
HttpMethod.GET, new Request.Callback() {
public void onCompleted(Response response) {
try {
GraphObject graphObject = response.getGraphObject();
if (null == graphObject)
return;
JSONObject jsonObject = graphObject
.getInnerJSONObject();
Log.i("FB_FRIENDS", jsonObject.toString());
JSONArray array = jsonObject.getJSONArray("data");
for (int i = 0; i < array.length(); i++) {
JSONObject friend = array.getJSONObject(i);
if (friend.getString("id").equals(
prefs.getInt("USER_ID", 0)))
return;
Statics.lstFriends.add(new FacebookFriend(
friend.getString("id"), friend
.getString("name"), friend
.getJSONObject("picture")
.getJSONObject("data")
.getString("url"), false));
}
} catch (JSONException e) {
e.printStackTrace();
}
isUseNonApp = true;
if (isUseApp)
sort();
}
}).executeAsync();
}
private void sort() {
Collections.sort(Statics.lstFriends, new FriendSort());
loadingLayout.setVisibility(View.GONE);
if (Statics.lstFriends.size() > 0) {
if (null == mContext)
return;
fAdapter = new FriendAdapter(mContext, Statics.countUseApps);
list.setAdapter(fAdapter);
}
}
@Override
public void onDestroyView() {
if (getView() != null) {
((ViewGroup) getView().getParent()).removeView(getView());
}
super.onDestroyView();
}
}