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(); } }