package com.ved.musicmapapp;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import java.util.Vector;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
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.Session.StatusCallback;
import com.facebook.model.GraphObject;
import com.facebook.widget.WebDialog;
import com.facebook.widget.WebDialog.OnCompleteListener;
import com.ved.musicmapapp.Objects.FacebookFriend;
import com.ved.musicmapapp.Objects.User;
import com.ved.musicmapapp.adapters.FriendAdapter;
import com.ved.musicmapapp.adapters.UserSplashAdapter;
import com.ved.musicmapapp.providers.FollowUserTask;
import com.ved.musicmapapp.providers.GetAroundMeTask;
import com.ved.musicmapapp.providers.GetUserByTypeTask;
import com.ved.musicmapapp.utils.FriendSort;
import com.ved.musicmapapp.utils.Statics;
import android.app.Activity;
import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.content.SharedPreferences.Editor;
import android.graphics.Typeface;
import android.graphics.drawable.ColorDrawable;
import android.location.Location;
import android.location.LocationManager;
import android.os.Bundle;
import android.support.v4.view.ViewPager;
import android.text.Html;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
public class GetFriendsFromFacebookDialog extends Dialog {
private ListView list;
private TextView tv;
private FriendAdapter fAdapter;
private UserSplashAdapter adapter;
// private CountDownTimer cDT1, cDT2, cDT3;
private int currentPage = 0;
private LocationManager mLoccationManager;
private View layoutLoading;
private Button btnOkSplash;
private GetAroundMeTask task;
private SharedPreferences prefs;
private Editor edt;
private ArrayList<Integer> followeds;
private Button mBtnSkip;
private String htmlSkip = "<u>SKIP</u>";
TextView pageId;
ImageView noData;
// private Button mBtnCircle1, mBtnCircle2, mBtnCircle3;
// private boolean isUseApp, isUseNonApp;
// private int countUseApp;
FollowUserTask followUserTask;
GetUserByTypeTask getUserByTypeTask;
Context context;
public GetFriendsFromFacebookDialog(final Context context) {
super(context);
requestWindowFeature(Window.FEATURE_NO_TITLE);
setCancelable(false);
getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT));
this.context = context;
setContentView(R.layout.activity_splash);
init();
goToFirstPage();
}
private void init() {
Statics.lstFriends = new ArrayList<FacebookFriend>();
// countUseApp = -1;
Statics.countUseApps = -1;
prefs = context.getSharedPreferences("MUSIC_MAP", Context.MODE_PRIVATE);
edt = prefs.edit();
noData = (ImageView) findViewById(R.id.no_data);
list = (ListView) findViewById(R.id.list_splash);
tv = (TextView) findViewById(R.id.tv_splash);
Typeface tf = Typeface.createFromAsset(context.getAssets(), "open_sans_regular.ttf");
tv.setTypeface(tf);
mBtnSkip = (Button) findViewById(R.id.btnSkip);
mBtnSkip.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onSkip(v);
}
});
// mBtnSkip.setText(Html.fromHtml(htmlSkip));
layoutLoading = findViewById(R.id.layoutLoading);
btnOkSplash = (Button) findViewById(R.id.btnOkSplash);
btnOkSplash.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
onOk(v);
}
});
followeds = new ArrayList<Integer>();
pageId = (TextView)findViewById(R.id.pageId);
/* mBtnCircle1 = (Button) findViewById(R.id.btnCircle1);
mBtnCircle2 = (Button) findViewById(R.id.btnCircle2);
mBtnCircle3 = (Button) findViewById(R.id.btnCircle3);*/
}
public void onSkip(View v) {
stopCDT();
onNextPage();
}
public void onOk(View v) {
switch (currentPage) {
case 0:
inviteFacebook();
break;
case 1:
case 2:
onFollowUser();
break;
}
}
private void inviteFacebook() {
if (null == fAdapter)
return;
String users = "";
Vector<FacebookFriend> friends = fAdapter.getCheckeds();
if (friends.size() == 0) {
Statics.showToast(context, "No friend seleted!");
return;
} else {
// users += friends.get(0).getUid();
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);
followUserTask = new FollowUserTask((Activity)context);
followUserTask.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);
showDialogWithoutNotificationBarNew(params);
// showDialogWithoutNotificationBar("apprequests", params);
}
if (users.length() > 0) {
Statics.showToast(context,
"Your request has been sent");
onSkip(null);
} else {
if (i > 0) {
i = 0;
Statics.showToast(context,
"Your request has been sent");
onSkip(null);
} else {
onSkip(null);
}
}
}
}
private void showDialogWithoutNotificationBarNew(Bundle params) {
WebDialog requestsDialog = (new WebDialog.RequestsDialogBuilder(
context, Session.getActiveSession(), params))
.setOnCompleteListener(new OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
if (error != null) {
if (error instanceof FacebookOperationCanceledException) {
Toast.makeText(
context
.getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(
context
.getApplicationContext(),
"Network Error", Toast.LENGTH_SHORT)
.show();
}
} else {
final String requestId = values
.getString("request");
if (requestId != null) {
Toast.makeText(
context
.getApplicationContext(),
"Request sent", Toast.LENGTH_SHORT)
.show();
} else {
Toast.makeText(
context
.getApplicationContext(),
"Request cancelled", Toast.LENGTH_SHORT)
.show();
}
}
}
}).build();
requestsDialog.show();
}
private void showDialogWithoutNotificationBar(String action, Bundle params) {
WebDialog dialog = new WebDialog.Builder(context,
Session.getActiveSession(), action, params)
.setOnCompleteListener(new WebDialog.OnCompleteListener() {
@Override
public void onComplete(Bundle values,
FacebookException error) {
if (error != null
&& !(error instanceof FacebookOperationCanceledException)) {
Statics.showToast(context,
"Connection is lost!");
} else {
Statics.showToast(context,
"Your request has been sent");
onSkip(null);
}
}
}).build();
Window dialog_window = dialog.getWindow();
dialog_window.setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
dialog.show();
}
private void onFollowUser() {
int userId = prefs.getInt("USER_ID", 0);
if (null != adapter && adapter.getCheckeds().size() > 0) {
for (final User u : adapter.getCheckeds()) {
if (!u.isFollowed() && userId > 0) {
followUserTask = new FollowUserTask((Activity)context);
followUserTask.execute(userId, u.getID(), 1);
followeds.add(u.getID());
}
}
Statics.showToast(context, "Your request has been sent");
}
onSkip(null);
}
public static List<String> getFaceBookPermmissions(){
List<String> permissions = new ArrayList<String>();
permissions.add("email");
return permissions;
}
private void goToFirstPage() { // FB Friend
currentPage = 0;
tv.setText("Getting facebook friends...");
btnOkSplash.setText("Invite");
// Hide list
layoutLoading.setVisibility(View.VISIBLE);
list.setVisibility(View.GONE);
noData.setVisibility(View.GONE);
openActiveSession((Activity)context, true, statusCallback, getFaceBookPermmissions());
//getFriends();
//getFriendsUser();
}
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data)
// {
//
// super.onActivityResult(requestCode, resultCode, data);
// // mSimpleFacebook.onActivityResult(this, requestCode, resultCode,
// // data);
// Session.getActiveSession().onActivityResult(this, requestCode,resultCode, data);
// }
public static Session openActiveSession(Activity activity,
boolean allowLoginUI, Session.StatusCallback callback,
List<String> permissions) {
Session.OpenRequest openRequest = new Session.OpenRequest(activity)
.setPermissions(permissions).setCallback(callback);
Session session = new Session.Builder(activity).build();
if (SessionState.CREATED_TOKEN_LOADED.equals(session.getState())
|| allowLoginUI) {
Session.setActiveSession(session);
session.openForRead(openRequest);
return session;
}
return null;
}
private StatusCallback statusCallback = new StatusCallback()
{
@Override
public void call(final Session session, SessionState state,final Exception exception)
{
getFriends(session);
getFriendsUser(session);
}
};
private void getFriendsUser(Session session) {
/* make the API call friends */
//Session session = Session.getActiveSession();
if(!session.isOpened())
return;
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");
Statics.countUseApps = array.length();
// 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(Session session) {
if(!session.isOpened())
return;
if (!Statics.isNetworkConnected(context)) {
Statics.showToast(context, "No internet connection!");
return;
}
/* make the API call */
new Request(session, "/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.d("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;
try {
Statics.lstFriends.add(new FacebookFriend(
friend.getString("id"), friend
.getString("name"), friend
.getJSONObject("picture")
.getJSONObject("data")
.getString("url"), false));
} catch (Exception ex) {
}
}
} catch (JSONException e) {
e.printStackTrace();
}
// isUseNonApp = true;
// if (isUseApp)
sort();
}
}).executeAsync();
}
private void sort() {
try {
Collections.sort(Statics.lstFriends, new FriendSort());
if (currentPage != 0)
return;
if(Statics.lstFriends.size() == 0){
list.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
noData.setVisibility(View.VISIBLE);
}
else{
noData.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
list.setVisibility(View.VISIBLE);
fAdapter = new FriendAdapter((Activity)context,Statics.countUseApps);
list.setAdapter(fAdapter);
}
tv.setText(Html.fromHtml("Let's Start. Who's Playlist would you like to view? <br/><b>Pick 3 Friends</b>"));
} catch (Exception ex) {
}
}
/**
* page show list of user around you
*/
private void goToSecondPage() {
/* mBtnCircle1.setBackgroundResource(R.drawable.bg_circle_finish);
mBtnCircle2.setBackgroundResource(R.drawable.bg_circle_current);
mBtnCircle3.setBackgroundResource(R.drawable.bg_circle_future);*/
try{
currentPage = 1;
btnOkSplash.setText("Follow");
pageId.setText("2 of 3");
tv.setText("Finding out users around you...");
// Hide list
layoutLoading.setVisibility(View.VISIBLE);
list.setVisibility(View.GONE);
noData.setVisibility(View.GONE);
Location location = null;
mLoccationManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);
if (mLoccationManager.isProviderEnabled(LocationManager.GPS_PROVIDER)) {
location = mLoccationManager
.getLastKnownLocation(LocationManager.GPS_PROVIDER);
}
if (null == location
&& mLoccationManager
.isProviderEnabled(LocationManager.NETWORK_PROVIDER)) {
location = mLoccationManager
.getLastKnownLocation(LocationManager.NETWORK_PROVIDER);
}
boolean byFB = false;
if (location != null) {
edt.putString("LAST_LONGITUDE", location.getLongitude() + "");
edt.putString("LAST_LATITUDE", location.getLatitude() + "");
edt.commit();
byFB = false;
} else if (null != Statics.curUser) {
edt.putString("LAST_LONGITUDE", Statics.curUser.getLon() + "");
edt.putString("LAST_LATITUDE", Statics.curUser.getLat() + "");
edt.commit();
byFB = true;
}
task = new GetAroundMeTask((Activity)context, GetAroundMeTask.WITHOUT_FOLLOW, byFB) {
@Override
public void onSuccess(ArrayList<User> us) {
super.onSuccess(us);
if (currentPage != 1 || null == us)
return;
// Show list again
layoutLoading.setVisibility(View.GONE);
list.setVisibility(View.VISIBLE);
tv.setText(Html.fromHtml("You can also find music <font color=\"#0394c9\">around you</font>.<br/>Download the app with your friends with you to instantly view their playlists"));
// cDT2.start();
if (us.size() == 0){
list.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
noData.setVisibility(View.VISIBLE);
}
// goToThirdPage();
else{
noData.setVisibility(View.GONE);
adapter = new UserSplashAdapter((Activity)context, us);
list.setAdapter(adapter);
}
}
};
task.execute();
}catch(Exception e)
{
e.printStackTrace();
list.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
noData.setVisibility(View.VISIBLE);
}
}
/**
*
*/
private void goToThirdPage() {
try{
currentPage = 2;
pageId.setText("3 of 3");
// if (null == Statics.hashUsers) {
// finish();
// }
layoutLoading.setVisibility(View.VISIBLE);
list.setVisibility(View.GONE);
noData.setVisibility(View.GONE);
getUserByTypeTask = new GetUserByTypeTask((Activity)context, prefs.getString("FB_ID", ""), 2) {
@Override
protected void onPostExecute(String result) {
super.onPostExecute(result);
// Show list again
// cDT3.start();
try {
tv.setText(Html.fromHtml("We're now comparing your playlist with others to help you <font color=\"#0394c9\">discover new music</font>. Try following these folks"));
ArrayList<User> users = new ArrayList<User>();
for (User user : Statics.hashUsers.values()) {
if (followeds.contains(user.getID()))
user.setFollowed(true);
if (!user.isFollowed()
&& !user.getFbid().equals(
prefs.getString("FB_ID", ""))) {
users.add(user);
Log.d("USER", user.getFirstName());
}
}
if (users.size() == 0){
list.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
noData.setVisibility(View.VISIBLE);
}
// finish();
else{
noData.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
list.setVisibility(View.VISIBLE);
adapter = new UserSplashAdapter((Activity)context, users);
list.setAdapter(adapter);
}
} catch (Exception ex) {
}
}
};
getUserByTypeTask.execute();
}
catch (Exception ex) {
ex.printStackTrace();
list.setVisibility(View.GONE);
layoutLoading.setVisibility(View.GONE);
noData.setVisibility(View.VISIBLE);
}
// // Show list again
// layoutLoading.setVisibility(View.GONE);
//
// // cDT3.start();
//
// tv.setText(Html
// .fromHtml("<b>...We�re now comparing your playlist with others to help you <font color=\"#0394c9\">discover new music</font>. Try following these folks</b>"));
//
// ArrayList<User> users = new ArrayList<User>();
// for (User user : Statics.hashUsers.values()) {
// if (followeds.contains(user.getID()))
// user.setFollowed(true);
// if (!user.isFollowed()
// && !user.getFbid().equals(prefs.getString("FB_ID", ""))) {
// users.add(user);
// Log.d("USER", user.getFirstName());
// }
// }
//
// if (users.size() == 0)
// finish();
// list.setVisibility(View.VISIBLE);
// adapter = new UserSplashAdapter(SplashActivity.this, users);
// list.setAdapter(adapter);
}
/**
* show step page
*/
private void onNextPage() {
switch (currentPage) {
case 0:
Log.i("Page", "go to 2nd page");
if(followUserTask != null)
followUserTask.cancel(true);
goToSecondPage();
break;
case 1:
Log.i("Page", "go to 3rd page");
if(task != null)
task.cancel(true);
goToThirdPage();
break;
case 2:
Log.i("Page", "end");
if(followUserTask != null)
followUserTask.cancel(true);
if(task != null)
task.cancel(true);
if(getUserByTypeTask != null)
getUserByTypeTask.cancel(true);
((MainActivity)context).loadScreenAfterDialog();
dismiss();
break;
}
}
@Override
public boolean dispatchTouchEvent(final MotionEvent ev) {
stopCDT();
return super.dispatchTouchEvent(ev);
}
private void stopCDT() {
// if(null != cDT1) cDT1.cancel();
// if(null != cDT2) cDT2.cancel();
// if(null != cDT3) cDT3.cancel();
}
@Override
public void onBackPressed() {
// do nothing
}
}