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 android.app.Activity; import android.content.Context; import android.content.Intent; import android.content.SharedPreferences; import android.content.SharedPreferences.Editor; import android.graphics.Typeface; import android.location.Location; import android.location.LocationManager; import android.os.Bundle; 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.ListView; import android.widget.TextView; import android.widget.Toast; 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.Session.StatusCallback; import com.facebook.SessionState; 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; public class GetFriendsFromFBActivity extends BaseActivity { 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; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_splash); init(); goToFirstPage(); } private void init() { Statics.lstFriends = new ArrayList<FacebookFriend>(); // countUseApp = -1; Statics.countUseApps = -1; prefs = 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(getAssets(), "open_sans_regular.ttf"); tv.setTypeface(tf); mBtnSkip = (Button) findViewById(R.id.btnSkip); // mBtnSkip.setText(Html.fromHtml(htmlSkip)); layoutLoading = findViewById(R.id.layoutLoading); btnOkSplash = (Button) findViewById(R.id.btnOkSplash); 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(this, "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(GetFriendsFromFBActivity.this); 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(GetFriendsFromFBActivity.this, "Your request has been sent"); onSkip(null); } else { if (i > 0) { i = 0; Statics.showToast(GetFriendsFromFBActivity.this, "Your request has been sent"); onSkip(null); } else { onSkip(null); } } } } private void showDialogWithoutNotificationBarNew(Bundle params) { WebDialog requestsDialog = (new WebDialog.RequestsDialogBuilder( GetFriendsFromFBActivity.this, Session.getActiveSession(), params)) .setOnCompleteListener(new OnCompleteListener() { @Override public void onComplete(Bundle values, FacebookException error) { if (error != null) { if (error instanceof FacebookOperationCanceledException) { Toast.makeText( GetFriendsFromFBActivity.this .getApplicationContext(), "Request cancelled", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText( GetFriendsFromFBActivity.this .getApplicationContext(), "Network Error", Toast.LENGTH_SHORT) .show(); } } else { final String requestId = values .getString("request"); if (requestId != null) { Toast.makeText( GetFriendsFromFBActivity.this .getApplicationContext(), "Request sent", Toast.LENGTH_SHORT) .show(); } else { Toast.makeText( GetFriendsFromFBActivity.this .getApplicationContext(), "Request cancelled", Toast.LENGTH_SHORT) .show(); } } } }).build(); requestsDialog.show(); } private void showDialogWithoutNotificationBar(String action, Bundle params) { WebDialog dialog = new WebDialog.Builder(this, Session.getActiveSession(), action, params) .setOnCompleteListener(new WebDialog.OnCompleteListener() { @Override public void onComplete(Bundle values, FacebookException error) { if (error != null && !(error instanceof FacebookOperationCanceledException)) { Statics.showToast(getBaseContext(), "Connection is lost!"); } else { Statics.showToast(GetFriendsFromFBActivity.this, "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(this); followUserTask.execute(userId, u.getID(), 1); followeds.add(u.getID()); } } Statics.showToast(this, "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(this, 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(this)) { Statics.showToast(this, "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(GetFriendsFromFBActivity.this,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) 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(this, 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(GetFriendsFromFBActivity.this, 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(this, 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(GetFriendsFromFBActivity.this, 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); finish(); 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 } @Override public void finish() { // TODO Auto-generated method stub Log.i("check", "finish"); super.finish(); } @Override public boolean isDestroyed() { // TODO Auto-generated method stub Log.i("check", "isDestroyed"); return super.isDestroyed(); } @Override public boolean isFinishing() { // TODO Auto-generated method stub Log.i("check", "isFinishing"); return super.isFinishing(); } }